@dahawa/hawa-code 2.2.2 → 2.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -487,7 +487,7 @@ ${c}. Members must communicate with each other using the ${$h} tool`;if(n){l+=`
487
487
 
488
488
  Warning: Team "${r}" has ${d.length} active ${p}, so it cannot be deleted.`}l+=`
489
489
 
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){let o=st.isMessageArchivingEnable(),i=st.isMemoEnable();if(!o&&!i)return null;let s=r??t,a=o&&s?.some(S=>S.name===Xu),c=i&&s?.some(S=>S.name===XS);if(!a&&!c)return null;let l=t?.some(S=>S.name===Xu),u=t?.some(S=>S.name===XS),d=Date.now(),p=n?.percentUsed,f=.92*100,A=[];a&&(Rmo()?A.push(l?`use ${Xu} 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`:`load ${Xu} with ${Zu} 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`):A.push(l?`use ${Xu} 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`:`load ${Xu} with ${Zu} 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&&A.push(u?`use ${XS} to persist long analysis conclusions, plans, or error records to keep them out of the context window while remaining retrievable later`:`load ${XS} with ${Zu} to persist long analysis conclusions, plans, or error records to keep them out of the context window while remaining retrievable later`),a&&c&&A.push(`${Xu} and ${XS} 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 h="";p!==void 0?h=`Context usage is ${p}%. The system will automatically compact prior messages when usage reaches ${f}%. \u5982\u679C\u5386\u53F2\u6D88\u606F\u5B58\u5728\u5927\u91CF\u4EFB\u52A1\u65E0\u5173\u5185\u5BB9\uFF0C\u5373\u4F7F\u4E0A\u4E0B\u6587\u5360\u7528\u7387\u4F4E\u4E5F\u5E94\u8BE5\u8FDB\u884C\u5904\u7406 .Reduce context usage by: `:h="Reduce context usage by: ";let E=A.length===1?`${h}${A[0]}`:`${h}${A.map(S=>`- ${S}`).join(`
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){let o=st.isMessageArchivingEnable(),i=st.isMemoEnable();if(!o&&!i)return null;let s=r??t,a=o&&s?.some(S=>S.name===Xu),c=i&&s?.some(S=>S.name===XS);if(!a&&!c)return null;let l=t?.some(S=>S.name===Xu),u=t?.some(S=>S.name===XS),d=Date.now(),p=n?.percentUsed,f=.92*100,A=[];a&&(Rmo()?A.push(l?`use ${Xu} 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`:`load ${Xu} with ${Zu} 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`):A.push(l?`use ${Xu} 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`:`load ${Xu} with ${Zu} 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&&A.push(u?`use ${XS} to persist long analysis conclusions, plans, or error records to keep them out of the context window while remaining retrievable later`:`load ${XS} with ${Zu} to persist long analysis conclusions, plans, or error records to keep them out of the context window while remaining retrievable later`),a&&c&&A.push(`${Xu} and ${XS} 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 h="";p!==void 0?h=`Context usage is ${p}%. The system will automatically compact prior messages when usage reaches ${f}%. 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: `:h="Reduce context usage by: ";let E=A.length===1?`${h}${A[0]}`:`${h}${A.map(S=>`- ${S}`).join(`
491
491
  `)}`;return this.createReminderMessage("message_archiving_context","performance","medium",E,d,!0)}async getToolLazy(t,r,n,o){if(!(st.isLazyToolEnable()&&o===!0))return null;let i=n??await Dn.getTools(!1),s=r?.map(A=>A.name)??[],a=new Set(s),c=i.filter(A=>!ey.includes(A.name)&&!a.has(A.name)).map(A=>A.name),l=i.some(A=>A.name===Zu),u=i.some(A=>A.name===Dd),d=l?`Load them with ${Zu} if needed; call it in parallel with other tools when possible.`:"",p=u?`Unload tools you no longer need with ${Dd}; call it in parallel with other tools when possible. You do not need to unload if you are returning results to the user.`:"",f=`Not yet loaded tools : ${c.length?c.join(", ")+". "+d:"none."}
492
492
  Loaded tools: ${s.length?s.join(", ")+". "+p:"none."}.`;return[this.createReminderMessage("tool","general","high",f,Date.now())]}getRecalledMemories(t){let n=We.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:
493
493
 
@@ -676,7 +676,7 @@ globstar while`,t,p,r,f,A),this.matchOne(t.slice(p),r.slice(f),n))return this.de
676
676
  `)),dUn(e,o,{encoding:r,flush:!0})}var vHt=new lde.default({fetchMethod:e=>EUn(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});async function MHt(e){let t=gV(e);return vHt.get(t)||vHt.fetchMethod?.(t)}async function EUn(e){let t=new AbortController;setTimeout(()=>{t.abort()},1e3);let r=await Jkt(e,t.signal,15),n=0;for(let o of r)pB(o)==="CRLF"&&n++;return n>3?"CRLF":"LF"}function kHt(e,t,r){if(e.has(t))return e.get(t);let n=r();return e.set(t,n),n}var _Un=new lde.default({fetchMethod:e=>PHt(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});function Ym(e){let t=gV(e);return kHt(_Un,t,()=>PHt(t))}function PHt(e){let r=Buffer.alloc(4096),n;try{n=xHt(e,"r");let o=wHt(n,r,0,4096,0);return o===0?"utf8":o>=2&&r[0]===255&&r[1]===254?"utf16le":o>=3&&r[0]===239&&r[1]===187&&r[2]===191||r.slice(0,o).toString("utf8").length>0?"utf8":"ascii"}catch(o){return Se(`Error detecting encoding for file ${e}: ${o}`),"utf8"}finally{n&&RHt(n)}}var SUn=new lde.default({fetchMethod:e=>LHt(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});function pB(e){let t=gV(e);return kHt(SUn,t,()=>LHt(t))}function LHt(e,t="utf8"){try{if(!NHt(e).isFile())return"LF";let n=Buffer.alloc(4096),o=xHt(e,"r"),i=wHt(o,n,0,4096,0);RHt(o);let s=n.toString(t,0,i),a=0,c=0;for(let l=0;l<s.length;l++)s[l]===`
677
677
  `&&(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 GF(e){let t=DHt(e)?e:gV(Me(),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?DHt(e)?e:gV(Me(),e):void 0}function QHt(e){try{let t=dPe(e),r=t?gUn(Me(),t):void 0;return{absolutePath:t,relativePath:r}}catch(t){return te("getAbsoluteAndRelativePaths error ",t),{absolutePath:null,relativePath:null}}}function dde(e){try{let t=AUn(e),r=bHt(e,CHt(e));if(!fUn(t))return;let i=pUn(t).filter(s=>bHt(s,CHt(s))===r&&hUn(t,s)!==e)[0];return i||void 0}catch(t){Se(`Error finding similar file for ${e}: ${t}`);return}}function fPe(){let e=process.env.HAWA_CODE_COMPACT_LINE_PREFIX;return!(e==="0"||e==="false")}function Wx({content:e,startLine:t}){if(!e)return"";let r=e.split(/\r?\n/);return fPe()?r.map((n,o)=>`${o+t} ${n}`).join(`
678
678
  `):r.map((n,o)=>{let i=String(o+t);return i.length>=6?`${i}\u2192${n}`:`${i.padStart(6," ")}\u2192${n}`}).join(`
679
- `)}function UHt(e){try{let t=mUn(e),r=t.readSync();return t.closeSync(),r===null}catch(t){return Se(`Error checking directory: ${t}`),!1}}Ge();function Vx(){let e=no();e.hasCompletedProjectOnboarding||fs({...e,hasCompletedProjectOnboarding:!0})}function CUn(){let e=hr();Io({...e,lastReleaseNotesSeen:MACRO.VERSION})}function pPe({workspaceDir:e}){let r=!no().hasCompletedProjectOnboarding,o=hr().lastReleaseNotesSeen,i=[];(!o||(0,FHt.gt)(MACRO.VERSION,o))&&(i=Rue[MACRO.VERSION]||[]);let s=i.length>0;if(Ki.useEffect(()=>{s&&!r&&CUn()},[s,r]),!r&&!s)return null;let a=yUn(TUn(e,Ci)),c=UHt(e),l=!a&&!c,u=xF.isEnabled&&!hr().shiftEnterKeyBindingInstalled,d=Z();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(Fd,{children:[]},(()=>{let p=[];return c&&p.push(Ki.createElement(Fd.Item,{key:"workspace"},Ki.createElement(C,{color:d.secondaryText},"Ask ",Xe," to create a new app or clone a repository."))),l&&p.push(Ki.createElement(Fd.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(Fd.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(Fd.Item,{key:"questions"},Ki.createElement(C,{color:d.secondaryText},"Ask ",Xe," questions about your codebase."))),p.push(Ki.createElement(Fd.Item,{key:"changes"},Ki.createElement(C,{color:d.secondaryText},"Ask ",Xe," to implement changes to your codebase."))),p})())),!r&&s&&Ki.createElement(x,{borderColor:Z().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:Z().secondaryText},"\u2022 ",p))))),e===bUn()&&Ki.createElement(C,{color:Z().warning},"Note: You have launched ",Ki.createElement(C,{bold:!0},Xe)," in your home directory. For the best experience, launch it in a project directory instead."))}var qF=F(oe(),1);var $F=F(oe(),1);var AV=F(oe(),1);function mPe({isFocused:e,isSelected:t,smallPointer:r,children:n}){let{styles:o}=ps("Select");return AV.default.createElement(x,{...o.option({isFocused:e})},e&&AV.default.createElement(C,{...o.focusIndicator()},r?Jr.triangleDownSmall:Jr.pointer),AV.default.createElement(C,{...o.label({isFocused:e,isSelected:t})},n),t&&AV.default.createElement(C,{...o.selectedIndicator()},Jr.tick))}var jm=F(oe(),1);import{isDeepStrictEqual as IUn}from"node:util";var hV=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:gPe(s);r.push([c,a]),i++,o=a}super(r),this.first=n}};var vUn=(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}}},APe=e=>e.flatMap(t=>{if("options"in t){let r=APe(t.options),n=r.flatMap(i=>"value"in i?i.value:[]);return[...t.header!==void 0?[{header:t.header,optionValues:n}]:[],...r]}return t}),HHt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=APe(r),o=typeof e=="number"?Math.min(e,n.length):n.length,i=new hV(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}},hPe=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n,onFocus:o,focusValue:i})=>{let s=APe(t),[a,c]=(0,jm.useReducer)(vUn,{visibleOptionCount:e,defaultValue:r,options:t},HHt),[l,u]=(0,jm.useState)(s);s!==l&&!IUn(s,l)&&(c({type:"reset",state:HHt({visibleOptionCount:e,defaultValue:r,options:t})}),u(s));let d=(0,jm.useCallback)(()=>{c({type:"focus-next-option"})},[]),p=(0,jm.useCallback)(()=>{c({type:"focus-previous-option"})},[]),f=(0,jm.useCallback)(()=>{c({type:"select-focused-option"})},[]),A=(0,jm.useMemo)(()=>s.map((h,E)=>({...h,index:E})).slice(a.visibleFromIndex,a.visibleToIndex),[s,a.visibleFromIndex,a.visibleToIndex]);return(0,jm.useEffect)(()=>{a.value&&a.previousValue!==a.value&&n?.(a.value)},[a.previousValue,a.value,t,n]),(0,jm.useEffect)(()=>{a.focusedValue&&o?.(a.focusedValue)},[a.focusedValue,o]),(0,jm.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 EPe=({isDisabled:e=!1,state:t})=>{Tt((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};var gPe=e=>`HEADER-${e.optionValues.join(",")}`;function SC({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a}){let c=hPe({visibleOptionCount:t,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a});EPe({isDisabled:e,state:c});let{styles:l}=ps("Select");return $F.default.createElement(x,{...l.container()},c.visibleOptions.map(u=>{let d="value"in u?u.value:gPe(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=$F.default.createElement($F.default.Fragment,null,h.slice(0,S),$F.default.createElement(C,{...l.highlightedText()},r),h.slice(S+r.length))}return $F.default.createElement(mPe,{key:d,isFocused:p,isSelected:f,smallPointer:A},E)}))}function GHt({onDone:e}){return Tt((t,r)=>{(r.ctrl&&(t==="c"||t==="d")||r.escape)&&e()}),qF.default.createElement(x,{flexDirection:"column",borderStyle:"round",padding:1,borderColor:Z().secondaryBorder},qF.default.createElement(x,{marginBottom:1,flexDirection:"column"},qF.default.createElement(C,{bold:!0},"You've spent $5 this session.")),qF.default.createElement(x,null,qF.default.createElement(SC,{options:[{value:"ok",label:"Got it, thanks!"}],onChange:e})))}var hn=F(oe(),1),Wt=F(oe(),1);var Pp=F(oe(),1);Ge();Ar();yy();var RUn="2.2.2",Ty={VERSION:RUn,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 yPe=46,VHt=["(\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 fde({isDefaultModel:e=!1}){let t=Math.max(yPe,Me().length+12),r=Z(),n=VHt[Math.floor(Math.random()*VHt.length)];return Pp.createElement(x,{flexDirection:"column"},Pp.createElement(x,{flexDirection:"column",gap:1,paddingLeft:1,width:"100%"},Pp.createElement(C,null,Pp.createElement(C,null,n)," Welcome to"," ",Pp.createElement(C,{bold:!0},Xe),Pp.createElement(C,{color:r.secondaryText}," v",Ty.VERSION)),Pp.createElement(Pp.Fragment,null,Pp.createElement(x,{paddingLeft:2,flexDirection:"column",gap:1},Pp.createElement(C,{color:r.secondaryText,italic:!0},"/help for help"),Pp.createElement(C,{color:r.secondaryText},"cwd: ",Me()),Pp.createElement(C,{color:r.secondaryText},"model: ",vo.getConfig().routing.MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A"),Pp.createElement(C,{color:r.secondaryText},"small fast model: ",vo.getConfig().routing.SMALL_FAST_MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A")))))}var pS=F(oe(),1);Re();var NJ=F(oe(),1);import{randomUUID as lS}from"crypto";$s();Re();nr();Ar();Re();Ge();import{existsSync as bC,readdirSync as Z9n,statSync as X9n}from"fs";import{join as Xx,relative as e4n}from"path";import{homedir as E8t}from"os";import{platform as t4n}from"process";import{readFile as ew}from"fs/promises";Ar();fE();gr();import{join as kUn,sep as PUn}from"path";function Lp(){if(!zm())return!1;try{let e=tt();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Wm(){return(kUn(Me(),".hcode","team-memory")+PUn).normalize("NFC")}function pE(e){let t=e.normalize("NFC"),r=Wm();return t.startsWith(r)}var _8t=F(vV(),1);ei();var m8t=F(vV(),1);Ar();Ge();Re();Op();import{readFile as f8t}from"fs/promises";import{existsSync as UPe,readdirSync as z9n,statSync as W9n}from"fs";import{join as FPe,relative as g8t}from"path";import{homedir as K9n}from"os";function p8t(e){try{let t=(0,m8t.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 J9n(e,t){return t.length===0?!0:t.some(r=>{try{return Gd(e,r,{matchBase:!0,dot:!0})}catch(n){return Se(n),!1}})}function HPe(e){let t=[];try{if(!UPe(e))return t;let r=z9n(e);for(let n of r){let o=FPe(e,n),i=W9n(o);i.isDirectory()?t.push(...HPe(o)):i.isFile()&&n.endsWith(".md")&&t.push(o)}}catch(r){Se(r)}return t}async function A8t(){let e=[];try{let t=FPe(K9n(),$n,"rules");if(UPe(t)){let r=HPe(t);for(let n of r)try{let o=await f8t(n,"utf-8"),{paths:i,content:s}=p8t(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=FPe(Me(),$n,"rules");if(UPe(t)){let r=HPe(t);for(let n of r)try{let o=await f8t(n,"utf-8"),{paths:i,content:s}=p8t(o);i.length>0&&e.push({filePath:g8t(Me(),n),content:s,paths:i,isProjectRule:!0})}catch(o){Se(o)}}}catch(t){Se(t)}return e}function h8t(e,t){e=zce(e);let r=zce(Me()),n=e.startsWith(r)?g8t(r,e):e;return t.filter(o=>J9n(n,o.paths))}var r4n=`# hawaCodeMd
679
+ `)}function UHt(e){try{let t=mUn(e),r=t.readSync();return t.closeSync(),r===null}catch(t){return Se(`Error checking directory: ${t}`),!1}}Ge();function Vx(){let e=no();e.hasCompletedProjectOnboarding||fs({...e,hasCompletedProjectOnboarding:!0})}function CUn(){let e=hr();Io({...e,lastReleaseNotesSeen:MACRO.VERSION})}function pPe({workspaceDir:e}){let r=!no().hasCompletedProjectOnboarding,o=hr().lastReleaseNotesSeen,i=[];(!o||(0,FHt.gt)(MACRO.VERSION,o))&&(i=Rue[MACRO.VERSION]||[]);let s=i.length>0;if(Ki.useEffect(()=>{s&&!r&&CUn()},[s,r]),!r&&!s)return null;let a=yUn(TUn(e,Ci)),c=UHt(e),l=!a&&!c,u=xF.isEnabled&&!hr().shiftEnterKeyBindingInstalled,d=Z();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(Fd,{children:[]},(()=>{let p=[];return c&&p.push(Ki.createElement(Fd.Item,{key:"workspace"},Ki.createElement(C,{color:d.secondaryText},"Ask ",Xe," to create a new app or clone a repository."))),l&&p.push(Ki.createElement(Fd.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(Fd.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(Fd.Item,{key:"questions"},Ki.createElement(C,{color:d.secondaryText},"Ask ",Xe," questions about your codebase."))),p.push(Ki.createElement(Fd.Item,{key:"changes"},Ki.createElement(C,{color:d.secondaryText},"Ask ",Xe," to implement changes to your codebase."))),p})())),!r&&s&&Ki.createElement(x,{borderColor:Z().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:Z().secondaryText},"\u2022 ",p))))),e===bUn()&&Ki.createElement(C,{color:Z().warning},"Note: You have launched ",Ki.createElement(C,{bold:!0},Xe)," in your home directory. For the best experience, launch it in a project directory instead."))}var qF=F(oe(),1);var $F=F(oe(),1);var AV=F(oe(),1);function mPe({isFocused:e,isSelected:t,smallPointer:r,children:n}){let{styles:o}=ps("Select");return AV.default.createElement(x,{...o.option({isFocused:e})},e&&AV.default.createElement(C,{...o.focusIndicator()},r?Jr.triangleDownSmall:Jr.pointer),AV.default.createElement(C,{...o.label({isFocused:e,isSelected:t})},n),t&&AV.default.createElement(C,{...o.selectedIndicator()},Jr.tick))}var jm=F(oe(),1);import{isDeepStrictEqual as IUn}from"node:util";var hV=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:gPe(s);r.push([c,a]),i++,o=a}super(r),this.first=n}};var vUn=(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}}},APe=e=>e.flatMap(t=>{if("options"in t){let r=APe(t.options),n=r.flatMap(i=>"value"in i?i.value:[]);return[...t.header!==void 0?[{header:t.header,optionValues:n}]:[],...r]}return t}),HHt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=APe(r),o=typeof e=="number"?Math.min(e,n.length):n.length,i=new hV(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}},hPe=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n,onFocus:o,focusValue:i})=>{let s=APe(t),[a,c]=(0,jm.useReducer)(vUn,{visibleOptionCount:e,defaultValue:r,options:t},HHt),[l,u]=(0,jm.useState)(s);s!==l&&!IUn(s,l)&&(c({type:"reset",state:HHt({visibleOptionCount:e,defaultValue:r,options:t})}),u(s));let d=(0,jm.useCallback)(()=>{c({type:"focus-next-option"})},[]),p=(0,jm.useCallback)(()=>{c({type:"focus-previous-option"})},[]),f=(0,jm.useCallback)(()=>{c({type:"select-focused-option"})},[]),A=(0,jm.useMemo)(()=>s.map((h,E)=>({...h,index:E})).slice(a.visibleFromIndex,a.visibleToIndex),[s,a.visibleFromIndex,a.visibleToIndex]);return(0,jm.useEffect)(()=>{a.value&&a.previousValue!==a.value&&n?.(a.value)},[a.previousValue,a.value,t,n]),(0,jm.useEffect)(()=>{a.focusedValue&&o?.(a.focusedValue)},[a.focusedValue,o]),(0,jm.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 EPe=({isDisabled:e=!1,state:t})=>{Tt((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};var gPe=e=>`HEADER-${e.optionValues.join(",")}`;function SC({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a}){let c=hPe({visibleOptionCount:t,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a});EPe({isDisabled:e,state:c});let{styles:l}=ps("Select");return $F.default.createElement(x,{...l.container()},c.visibleOptions.map(u=>{let d="value"in u?u.value:gPe(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=$F.default.createElement($F.default.Fragment,null,h.slice(0,S),$F.default.createElement(C,{...l.highlightedText()},r),h.slice(S+r.length))}return $F.default.createElement(mPe,{key:d,isFocused:p,isSelected:f,smallPointer:A},E)}))}function GHt({onDone:e}){return Tt((t,r)=>{(r.ctrl&&(t==="c"||t==="d")||r.escape)&&e()}),qF.default.createElement(x,{flexDirection:"column",borderStyle:"round",padding:1,borderColor:Z().secondaryBorder},qF.default.createElement(x,{marginBottom:1,flexDirection:"column"},qF.default.createElement(C,{bold:!0},"You've spent $5 this session.")),qF.default.createElement(x,null,qF.default.createElement(SC,{options:[{value:"ok",label:"Got it, thanks!"}],onChange:e})))}var hn=F(oe(),1),Wt=F(oe(),1);var Pp=F(oe(),1);Ge();Ar();yy();var RUn="2.2.3",Ty={VERSION:RUn,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 yPe=46,VHt=["(\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 fde({isDefaultModel:e=!1}){let t=Math.max(yPe,Me().length+12),r=Z(),n=VHt[Math.floor(Math.random()*VHt.length)];return Pp.createElement(x,{flexDirection:"column"},Pp.createElement(x,{flexDirection:"column",gap:1,paddingLeft:1,width:"100%"},Pp.createElement(C,null,Pp.createElement(C,null,n)," Welcome to"," ",Pp.createElement(C,{bold:!0},Xe),Pp.createElement(C,{color:r.secondaryText}," v",Ty.VERSION)),Pp.createElement(Pp.Fragment,null,Pp.createElement(x,{paddingLeft:2,flexDirection:"column",gap:1},Pp.createElement(C,{color:r.secondaryText,italic:!0},"/help for help"),Pp.createElement(C,{color:r.secondaryText},"cwd: ",Me()),Pp.createElement(C,{color:r.secondaryText},"model: ",vo.getConfig().routing.MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A"),Pp.createElement(C,{color:r.secondaryText},"small fast model: ",vo.getConfig().routing.SMALL_FAST_MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A")))))}var pS=F(oe(),1);Re();var NJ=F(oe(),1);import{randomUUID as lS}from"crypto";$s();Re();nr();Ar();Re();Ge();import{existsSync as bC,readdirSync as Z9n,statSync as X9n}from"fs";import{join as Xx,relative as e4n}from"path";import{homedir as E8t}from"os";import{platform as t4n}from"process";import{readFile as ew}from"fs/promises";Ar();fE();gr();import{join as kUn,sep as PUn}from"path";function Lp(){if(!zm())return!1;try{let e=tt();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Wm(){return(kUn(Me(),".hcode","team-memory")+PUn).normalize("NFC")}function pE(e){let t=e.normalize("NFC"),r=Wm();return t.startsWith(r)}var _8t=F(vV(),1);ei();var m8t=F(vV(),1);Ar();Ge();Re();Op();import{readFile as f8t}from"fs/promises";import{existsSync as UPe,readdirSync as z9n,statSync as W9n}from"fs";import{join as FPe,relative as g8t}from"path";import{homedir as K9n}from"os";function p8t(e){try{let t=(0,m8t.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 J9n(e,t){return t.length===0?!0:t.some(r=>{try{return Gd(e,r,{matchBase:!0,dot:!0})}catch(n){return Se(n),!1}})}function HPe(e){let t=[];try{if(!UPe(e))return t;let r=z9n(e);for(let n of r){let o=FPe(e,n),i=W9n(o);i.isDirectory()?t.push(...HPe(o)):i.isFile()&&n.endsWith(".md")&&t.push(o)}}catch(r){Se(r)}return t}async function A8t(){let e=[];try{let t=FPe(K9n(),$n,"rules");if(UPe(t)){let r=HPe(t);for(let n of r)try{let o=await f8t(n,"utf-8"),{paths:i,content:s}=p8t(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=FPe(Me(),$n,"rules");if(UPe(t)){let r=HPe(t);for(let n of r)try{let o=await f8t(n,"utf-8"),{paths:i,content:s}=p8t(o);i.length>0&&e.push({filePath:g8t(Me(),n),content:s,paths:i,isProjectRule:!0})}catch(o){Se(o)}}}catch(t){Se(t)}return e}function h8t(e,t){e=zce(e);let r=zce(Me()),n=e.startsWith(r)?g8t(r,e):e;return t.filter(o=>J9n(n,o.paths))}var r4n=`# hawaCodeMd
680
680
  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 n4n(e="default"){let r=We.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}):
681
681
 
682
682
  ${o.content}`}).join(`
@@ -774,7 +774,7 @@ data: ${JSON.stringify(H)}
774
774
  Stack trace: `+d.stack)),new Response(c.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var nge=null,T4e=!1;function Uno(){nge=null,T4e=!1}Dt.on("proxy:changed",Uno);function Fno(){if(T4e)return nge;if(T4e=!0,tt().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(nge=new wZt.ProxyAgent({uri:e}),Ht(`[proxy] using proxy: ${e}`)),nge}function Hno(){let e=Fno();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function ige(e){let t=e||process.env.API_TYPE,r=Hno();switch(t){case"openai":return kno(r);case"openai-responses":return Pno(r);case"gemini":return Lno(r);default:return Qno(r)}}yy();var NZt=F(oe(),1);function RZt(e,t){let r=[],n=Math.max(1,Math.floor(t)),o="",i=0;for(let s of e){let a=Gno(s);o&&i+a>n?(r.push(o),o=s,i=a):(o+=s,i+=a)}return o&&r.push(o),r}function Gno(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||$no(t)?0:qno(t)?2:1}function $no(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function qno(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 b0(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 I4e(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let r=Math.floor(t/3600),n=Math.floor(t%3600/60),o=t%60;return r>0?`${r}h ${n}m ${o}s`:`${n}m ${o}s`}function qC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}function sge(e,t,r){let n=[];return typeof e=="number"&&n.push(I4e(e)),typeof t=="number"&&n.push(`${t} ${t===1?"turn":"turns"}`),typeof r=="number"&&n.push(`${qC(r)} tokens`),n.length>0?` (${n.join(" \xB7 ")})`:""}Re();$s();var eu={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function age(e,t){eu.totalCost+=e,eu.totalAPIDuration+=t}function cge(e,t){eu.inputTokens+=e,eu.outputTokens+=t,Dt.emit("token:change",{inputTokens:eu.inputTokens,outputTokens:eu.outputTokens})}function lge(e,t){eu.cacheCreationTokens+=e,eu.cacheReadTokens+=t}function lM(){return{inputTokens:eu.inputTokens,outputTokens:eu.outputTokens,cacheCreationTokens:eu.cacheCreationTokens,cacheReadTokens:eu.cacheReadTokens}}function d9(){return eu.totalCost}function uge(){return Date.now()-eu.startTime}function DZt(){return eu.totalAPIDuration}function OZt(e){eu.currentContextTokens=e}function BZt(){return eu.currentContextTokens}function Vno(){return ht.grey(`Total duration (API): ${b0(eu.totalAPIDuration)}
775
775
  Total duration (wall): ${b0(uge())}`)}function MZt(){(0,NZt.useEffect)(()=>{let e=()=>{process.stdout.write(`
776
776
  `+Vno()+`
777
- `);let t=no();fs({...t,lastCost:eu.totalCost,lastAPIDuration:eu.totalAPIDuration,lastDuration:uge(),lastSessionId:J_})};return process.on("exit",e),()=>{process.off("exit",e)}},[])}Re();Ge();Ge();var v4e="2.2.2";globalThis.MACRO={VERSION:v4e,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 dge=process.env.HAWA_CODE_USER_AGENT||`${Ii}/${v4e} (${process.env.USER_TYPE})`;Re();Re();nr();function Yf(e){let t=[];return e.filter(r=>r.type!=="progress"&&r.type!=="reminder").forEach(r=>{switch(r.type){case"user":{let n=Df(t);if(n?.type==="user"){t[t.length-1]=Wno(n,r);return}t.push(r);return}case"assistant":t.push(r);return;case"insert":{let n=Df(t);n?.type==="user"&&(t[t.length-1]=Yno(n,r));return}}}),t}function Yno(e,t){return{...e,message:{...e.message,content:zno(e.message.content,jno(t.content.content))}}}function jno(e){return`
777
+ `);let t=no();fs({...t,lastCost:eu.totalCost,lastAPIDuration:eu.totalAPIDuration,lastDuration:uge(),lastSessionId:J_})};return process.on("exit",e),()=>{process.off("exit",e)}},[])}Re();Ge();Ge();var v4e="2.2.3";globalThis.MACRO={VERSION:v4e,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 dge=process.env.HAWA_CODE_USER_AGENT||`${Ii}/${v4e} (${process.env.USER_TYPE})`;Re();Re();nr();function Yf(e){let t=[];return e.filter(r=>r.type!=="progress"&&r.type!=="reminder").forEach(r=>{switch(r.type){case"user":{let n=Df(t);if(n?.type==="user"){t[t.length-1]=Wno(n,r);return}t.push(r);return}case"assistant":t.push(r);return;case"insert":{let n=Df(t);n?.type==="user"&&(t[t.length-1]=Yno(n,r));return}}}),t}function Yno(e,t){return{...e,message:{...e.message,content:zno(e.message.content,jno(t.content.content))}}}function jno(e){return`
778
778
  <system-reminder>
779
779
  The user sent the following message:
780
780
  ${e}
package/hands.js CHANGED
@@ -483,7 +483,7 @@ ${l}. Members must communicate with each other using the ${Qp} tool`;if(n){c+=`
483
483
 
484
484
  Warning: Team "${r}" has ${f.length} active ${g}, so it cannot be deleted.`}c+=`
485
485
 
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){let i=at.isMessageArchivingEnable(),o=at.isMemoEnable();if(!i&&!o)return null;let s=r??t,a=i&&s?.some(C=>C.name===ec),l=o&&s?.some(C=>C.name===YA);if(!a&&!l)return null;let c=t?.some(C=>C.name===ec),u=t?.some(C=>C.name===YA),f=Date.now(),g=n?.percentUsed,m=.92*100,A=[];a&&(ron()?A.push(c?`use ${ec} 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`:`load ${ec} with ${Xl} 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`):A.push(c?`use ${ec} 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`:`load ${ec} with ${Xl} 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&&A.push(u?`use ${YA} to persist long analysis conclusions, plans, or error records to keep them out of the context window while remaining retrievable later`:`load ${YA} with ${Xl} to persist long analysis conclusions, plans, or error records to keep them out of the context window while remaining retrievable later`),a&&l&&A.push(`${ec} and ${YA} 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 E="";g!==void 0?E=`Context usage is ${g}%. The system will automatically compact prior messages when usage reaches ${m}%. \u5982\u679C\u5386\u53F2\u6D88\u606F\u5B58\u5728\u5927\u91CF\u4EFB\u52A1\u65E0\u5173\u5185\u5BB9\uFF0C\u5373\u4F7F\u4E0A\u4E0B\u6587\u5360\u7528\u7387\u4F4E\u4E5F\u5E94\u8BE5\u8FDB\u884C\u5904\u7406 .Reduce context usage by: `:E="Reduce context usage by: ";let _=A.length===1?`${E}${A[0]}`:`${E}${A.map(C=>`- ${C}`).join(`
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){let i=at.isMessageArchivingEnable(),o=at.isMemoEnable();if(!i&&!o)return null;let s=r??t,a=i&&s?.some(C=>C.name===ec),l=o&&s?.some(C=>C.name===YA);if(!a&&!l)return null;let c=t?.some(C=>C.name===ec),u=t?.some(C=>C.name===YA),f=Date.now(),g=n?.percentUsed,m=.92*100,A=[];a&&(ron()?A.push(c?`use ${ec} 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`:`load ${ec} with ${Xl} 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`):A.push(c?`use ${ec} 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`:`load ${ec} with ${Xl} 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&&A.push(u?`use ${YA} to persist long analysis conclusions, plans, or error records to keep them out of the context window while remaining retrievable later`:`load ${YA} with ${Xl} to persist long analysis conclusions, plans, or error records to keep them out of the context window while remaining retrievable later`),a&&l&&A.push(`${ec} and ${YA} 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 E="";g!==void 0?E=`Context usage is ${g}%. The system will automatically compact prior messages when usage reaches ${m}%. 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: `:E="Reduce context usage by: ";let _=A.length===1?`${E}${A[0]}`:`${E}${A.map(C=>`- ${C}`).join(`
487
487
  `)}`;return this.createReminderMessage("message_archiving_context","performance","medium",_,f,!0)}async getToolLazy(t,r,n,i){if(!(at.isLazyToolEnable()&&i===!0))return null;let o=n??await cn.getTools(!1),s=r?.map(A=>A.name)??[],a=new Set(s),l=o.filter(A=>!VA.includes(A.name)&&!a.has(A.name)).map(A=>A.name),c=o.some(A=>A.name===Xl),u=o.some(A=>A.name===Pc),f=c?`Load them with ${Xl} if needed; call it in parallel with other tools when possible.`:"",g=u?`Unload tools you no longer need with ${Pc}; call it in parallel with other tools when possible. You do not need to unload if you are returning results to the user.`:"",m=`Not yet loaded tools : ${l.length?l.join(", ")+". "+f:"none."}
488
488
  Loaded tools: ${s.length?s.join(", ")+". "+g:"none."}.`;return[this.createReminderMessage("tool","general","high",m,Date.now())]}getRecalledMemories(t){let n=We.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:
489
489
 
@@ -757,7 +757,7 @@ data: ${JSON.stringify(z)}
757
757
  `);a=P.pop()||"";for(let z of P){let Y=z.trim();if(!(!Y||Y==="data: [DONE]"))if(Y.startsWith("data: ")){let Q=Y.slice(6);try{let G=JSON.parse(Q);w(G)}catch(G){this.logger&&this.logger.error({err:G,line:Y},"Failed to parse Gemini SSE chunk")}}else try{let Q=JSON.parse(Y);w(Q)}catch{}}};(async()=>{try{for(;;){let{value:P,done:z}=await s.read();if(z)break;a+=n.decode(P,{stream:!0}),O()}I()}catch(P){o.error(P)}})()}})}convertGeminiResponseToAnthropic(t){this.logger&&this.logger.debug({response:t},"Original Gemini response");try{if(!t.candidates||!t.candidates[0])throw new Error("No candidates found in Gemini response");let r=t.candidates[0],n=[];r.content&&r.content.parts&&r.content.parts.forEach(o=>{if(o.text&&n.push({type:"text",text:o.text}),o.functionCall){let s=`toolu_${QB()}`,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:`
758
758
 
759
759
  [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 B3r(`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"}}},jye=new zye;var mmt=ee(dmt(),1);lr();ds();function kg(e){return e?typeof e.entries=="function"?Object.fromEntries(e.entries()):{...e}:{}}function fmt(e){let t=String(e?.["x-thinking-level"]??"medium").toLowerCase();return["off","low","medium","high"].includes(t)?t:"medium"}function jXr(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t}}function YXr(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t,summary:"auto"}}function VXr(e,t="chat"){let r={request:{},response:{},openai:{request:{},response:{}}};return r.request.model=e.request.body.model,r.request.messages=e.request.body.messages,r.request.system=e.request.body.system,r.response.content=e.response.body.content,t==="responses"?(r.openai.request.model=e.openai.request.body.model,r.openai.request.input=e.openai.request.body.input,r.openai.response.output=e.openai.response.body?.output):(r.openai.request.model=e.openai.request.body.model,r.openai.request.messages=e.openai.request.body.messages,r.openai.response.choices=e.openai.response.body.choices),r}function R5(e,t,r){Ez(t,e),_z(t,VXr(e,r),r)}function I2(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 N5(e){let t=new Headers(e);return t.delete("content-encoding"),t.delete("content-length"),t.delete("transfer-encoding"),t}function yIe(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 pmt=["/v1/messages"];function bIe(e){let t;try{typeof e=="string"?t=new Av(e):e instanceof Av?t=e:t=new Av(e.url)}catch{return""}let r=t.pathname;for(let n of pmt){let i=r.indexOf(n);if(i!==-1)return t.origin+r.slice(0,i)}return t.origin}function NZ(e,t){let r=typeof e=="string"?e:e instanceof Av?e.toString():e.url,n;try{n=new Av(r).pathname}catch{return!1}return pmt.some(i=>n.includes(i))&&(t.method==="POST"||t.method==="post")}function WXr(e){return async(t,r)=>{if(!NZ(t,r))return e(t,r);let n=JSON.parse(r.body),i=await BK.transformRequestOut(n),o=bIe(t)+"/chat/completions",s=kg(r.headers),a=s.authorization??s.Authorization??"";jXr(i,fmt(s));let l=await e(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:a},body:JSON.stringify(i),signal:r.signal});if(!l.ok){let _=await l.text();return K(`OpenAI Chat Completions API error: ${l.status}`,{url:o,errorResponse:_}),yIe("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:kg(l.headers)},openai:{request:{body:i},response:{}}};if(!c){let _=await l.text(),C=new Response(_,{status:l.status,statusText:l.statusText,headers:N5(l.headers)}),S=await BK.transformResponseIn(C,n),I=await S.text();try{R5({...f,openai:{...f.openai,response:{body:JSON.parse(_)}},response:{...f.response,body:JSON.parse(I)}},u)}catch(w){K("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Chat \u975E\u6D41\u5F0F):",w)}return new Response(I,{status:S.status,statusText:S.statusText,headers:S.headers})}let g=I2(l.body),m=new Response(g.stream,{status:l.status,statusText:l.statusText,headers:N5(l.headers)}),A=await BK.transformResponseIn(m,n),E=I2(A.body);return Promise.all([g.done,E.done]).then(async([_,C])=>{try{R5({...f,openai:{...f.openai,response:{body:await Hit(_)}},response:{...f.response,body:await CU(C)}},u)}catch(S){K("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Chat \u6D41\u5F0F):"+S?.stack)}}).catch(_=>K("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Chat):"+_)),new Response(E.stream,{status:A.status,statusText:A.statusText,headers:A.headers})}}function KXr(e){return async(t,r)=>{if(!NZ(t,r))return e(t,r);let n=JSON.parse(r.body),i=await OK.transformRequestOut(n),o=kg(r.headers);YXr(i,fmt(o));let s=JSON.stringify(i),l=bIe(t)+"/responses",c=o.authorization??o.Authorization??"";if(!c)return new Response(JSON.stringify({type:"error",error:{type:"api_error",message:"Missing Authorization header",code:"RESPONSES_AUTH_MISSING"}}),{status:401,headers:{"Content-Type":"application/json"}});let u=await e(l,{method:"POST",headers:{"Content-Type":"application/json",Authorization:c,"x-api-key":c.replace(/^Bearer\s+/i,"").trim()},body:s,signal:r.signal});if(!u.ok){let S=await u.text();return K(`OpenAI Responses API error: ${u.status} ${u.statusText}`,{url:l,status:u.status,errorResponse:S}),yIe("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:kg(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:N5(u.headers)}),w=await OK.transformResponseIn(I,n),O=await w.text();try{R5({...m,openai:{...m.openai,response:{body:JSON.parse(S)}},response:{...m.response,body:JSON.parse(O)}},g,"responses")}catch(P){K("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u975E\u6D41\u5F0F):",P)}return new Response(O,{status:w.status,statusText:w.statusText,headers:w.headers})}let A=I2(u.body),E=new Response(A.stream,{status:u.status,statusText:u.statusText,headers:N5(u.headers)}),_=await OK.transformResponseIn(E,n),C=I2(_.body);return Promise.all([A.done,C.done]).then(async([S,I])=>{try{R5({...m,openai:{...m.openai,response:{body:await Uit(S)}},response:{...m.response,body:await CU(I)}},g,"responses")}catch(w){K("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u6D41\u5F0F):"+w?.stack)}}).catch(S=>K("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Responses):"+S)),new Response(C.stream,{status:_.status,statusText:_.statusText,headers:_.headers})}}function JXr(e){return async(t,r)=>{if(!NZ(t,r))return e(t,r);let n=JSON.parse(r.body),i=kg(r.headers),o=await jye.transformRequestOut(n),s=JSON.stringify(o),a=bIe(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 K("gemini request error:",C),C}if(!c.ok){let C=await c.text();return K(`Gemini API error response: ${c.status} ${c.statusText}`,{url:a,status:c.status,errorResponse:C}),yIe("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:kg(r.headers),body:n},response:{status:c.status,statusText:c.statusText,headers:kg(c.headers)},openai:{request:{body:o},response:{}}},m=I2(c.body),A=new Response(m.stream,{status:c.status,statusText:c.statusText,headers:N5(c.headers)}),E=await jye.transformResponseIn(A),_=I2(E.body);return Promise.all([m.done,_.done]).then(async([C,S])=>{try{let I=u?qit(C):JSON.parse(C),w=u?await CU(S):JSON.parse(S);R5({...g,openai:{...g.openai,response:{body:I}},response:{...g.response,body:w}},f)}catch(I){K("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Gemini):"+I?.stack)}}).catch(C=>K("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Gemini):"+C)),new Response(_.stream,{status:E.status,statusText:E.statusText,headers:E.headers})}}function ZXr(e){return async(t,r)=>{if(!NZ(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=kg(r.headers);["1","true"].includes(String(process.env.HAWA_CODE_X_API_KEY_DISABLED??"").toLowerCase())&&(delete i["x-api-key"],delete i["X-API-Key"]),["1","true"].includes(String(process.env.HAWA_CODE_AUTH_DISABLED??"").toLowerCase())&&(delete i.authorization,delete i.Authorization),delete i["content-length"];let a=await e(t,{method:r.method,headers:i,body:n,signal:r.signal});if(!a.ok){let f=await a.text();K(`API error response: ${a.status} ${a.statusText}`,{url:typeof t=="string"?t:t instanceof Av?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 Av?t.toString():t.url,method:r.method,headers:kg(r.headers),body:JSON.parse(n)},response:{status:a.status,statusText:a.statusText,headers:kg(a.headers)}};return(async()=>{if(c){let m=await a.text();u.response.body=await CU(m)}else u.response.body=await a.json();let g=kg(r.headers)["x-agent-id"];Ez(g,u),_z(g,{request:u.request.body.messages,response:u.response.body.content})})().catch(f=>K(`\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF:
760
- Stack trace: `+f.stack)),new Response(l.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var RZ=null,_Ie=!1;function XXr(){RZ=null,_Ie=!1}mr.on("proxy:changed",XXr);function een(){if(_Ie)return RZ;if(_Ie=!0,st().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(RZ=new mmt.ProxyAgent({uri:e}),zt(`[proxy] using proxy: ${e}`)),RZ}function ten(){let e=een();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function BZ(e){let t=e||process.env.API_TYPE,r=ten();switch(t){case"openai":return WXr(r);case"openai-responses":return KXr(r);case"gemini":return JXr(r);default:return ZXr(r)}}uh();var oen=ee(Ee(),1);function gmt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=ren(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function ren(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||nen(t)?0:ien(t)?2:1}function nen(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function ien(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 r_(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 UC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}Me();ds();var dc={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function OZ(e,t){dc.totalCost+=e,dc.totalAPIDuration+=t}function kZ(e,t){dc.inputTokens+=e,dc.outputTokens+=t,mr.emit("token:change",{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens})}function MZ(e,t){dc.cacheCreationTokens+=e,dc.cacheReadTokens+=t}function CIe(){return{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens,cacheCreationTokens:dc.cacheCreationTokens,cacheReadTokens:dc.cacheReadTokens}}function Amt(){return dc.totalCost}function hmt(){return Date.now()-dc.startTime}function Emt(){return dc.totalAPIDuration}function _mt(e){dc.currentContextTokens=e}function ymt(){return dc.currentContextTokens}Me();qe();qe();var SIe="2.2.2";globalThis.MACRO={VERSION:SIe,PACKAGE_URL:`@dahawa/${Xi}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var QZ=process.env.HAWA_CODE_USER_AGENT||`${Xi}/${SIe} (${process.env.USER_TYPE})`;import{randomUUID as cy}from"crypto";ds();Me();Xt();xr();Me();qe();import{existsSync as a_,readdirSync as xnn,statSync as wnn}from"fs";import{join as $C,relative as Dnn}from"path";import{homedir as zAt}from"os";import{platform as Rnn}from"process";import{readFile as GC}from"fs/promises";xr();Mg();lr();import{join as uen,sep as den}from"path";function dm(){if(!um())return!1;try{let e=st();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function $f(){return(uen(Qe(),".hcode","team-memory")+den).normalize("NFC")}function i_(e){let t=e.normalize("NFC"),r=$f();return t.startsWith(r)}var jAt=ee(U5(),1);Fi();var HAt=ee(U5(),1);xr();qe();Me();Cu();import{readFile as FAt}from"fs/promises";import{existsSync as UIe,readdirSync as Snn,statSync as Inn}from"fs";import{join as HIe,relative as qAt}from"path";import{homedir as Tnn}from"os";function UAt(e){try{let t=(0,HAt.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 Te(t),{paths:[],content:e.trim()}}}function vnn(e,t){return t.length===0?!0:t.some(r=>{try{return ac(e,r,{matchBase:!0,dot:!0})}catch(n){return Te(n),!1}})}function qIe(e){let t=[];try{if(!UIe(e))return t;let r=Snn(e);for(let n of r){let i=HIe(e,n),o=Inn(i);o.isDirectory()?t.push(...qIe(i)):o.isFile()&&n.endsWith(".md")&&t.push(i)}}catch(r){Te(r)}return t}async function $At(){let e=[];try{let t=HIe(Tnn(),en,"rules");if(UIe(t)){let r=qIe(t);for(let n of r)try{let i=await FAt(n,"utf-8"),{paths:o,content:s}=UAt(i);o.length>0&&e.push({filePath:n,content:s,paths:o,isProjectRule:!1})}catch(i){Te(i)}}}catch(t){Te(t)}try{let t=HIe(Qe(),en,"rules");if(UIe(t)){let r=qIe(t);for(let n of r)try{let i=await FAt(n,"utf-8"),{paths:o,content:s}=UAt(i);o.length>0&&e.push({filePath:qAt(Qe(),n),content:s,paths:o,isProjectRule:!0})}catch(i){Te(i)}}}catch(t){Te(t)}return e}function GAt(e,t){e=gV(e);let r=gV(Qe()),n=e.startsWith(r)?qAt(r,e):e;return t.filter(i=>vnn(n,i.paths))}var Nnn=`# hawaCodeMd
760
+ Stack trace: `+f.stack)),new Response(l.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var RZ=null,_Ie=!1;function XXr(){RZ=null,_Ie=!1}mr.on("proxy:changed",XXr);function een(){if(_Ie)return RZ;if(_Ie=!0,st().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(RZ=new mmt.ProxyAgent({uri:e}),zt(`[proxy] using proxy: ${e}`)),RZ}function ten(){let e=een();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function BZ(e){let t=e||process.env.API_TYPE,r=ten();switch(t){case"openai":return WXr(r);case"openai-responses":return KXr(r);case"gemini":return JXr(r);default:return ZXr(r)}}uh();var oen=ee(Ee(),1);function gmt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=ren(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function ren(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||nen(t)?0:ien(t)?2:1}function nen(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function ien(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 r_(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 UC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}Me();ds();var dc={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function OZ(e,t){dc.totalCost+=e,dc.totalAPIDuration+=t}function kZ(e,t){dc.inputTokens+=e,dc.outputTokens+=t,mr.emit("token:change",{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens})}function MZ(e,t){dc.cacheCreationTokens+=e,dc.cacheReadTokens+=t}function CIe(){return{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens,cacheCreationTokens:dc.cacheCreationTokens,cacheReadTokens:dc.cacheReadTokens}}function Amt(){return dc.totalCost}function hmt(){return Date.now()-dc.startTime}function Emt(){return dc.totalAPIDuration}function _mt(e){dc.currentContextTokens=e}function ymt(){return dc.currentContextTokens}Me();qe();qe();var SIe="2.2.3";globalThis.MACRO={VERSION:SIe,PACKAGE_URL:`@dahawa/${Xi}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var QZ=process.env.HAWA_CODE_USER_AGENT||`${Xi}/${SIe} (${process.env.USER_TYPE})`;import{randomUUID as cy}from"crypto";ds();Me();Xt();xr();Me();qe();import{existsSync as a_,readdirSync as xnn,statSync as wnn}from"fs";import{join as $C,relative as Dnn}from"path";import{homedir as zAt}from"os";import{platform as Rnn}from"process";import{readFile as GC}from"fs/promises";xr();Mg();lr();import{join as uen,sep as den}from"path";function dm(){if(!um())return!1;try{let e=st();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function $f(){return(uen(Qe(),".hcode","team-memory")+den).normalize("NFC")}function i_(e){let t=e.normalize("NFC"),r=$f();return t.startsWith(r)}var jAt=ee(U5(),1);Fi();var HAt=ee(U5(),1);xr();qe();Me();Cu();import{readFile as FAt}from"fs/promises";import{existsSync as UIe,readdirSync as Snn,statSync as Inn}from"fs";import{join as HIe,relative as qAt}from"path";import{homedir as Tnn}from"os";function UAt(e){try{let t=(0,HAt.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 Te(t),{paths:[],content:e.trim()}}}function vnn(e,t){return t.length===0?!0:t.some(r=>{try{return ac(e,r,{matchBase:!0,dot:!0})}catch(n){return Te(n),!1}})}function qIe(e){let t=[];try{if(!UIe(e))return t;let r=Snn(e);for(let n of r){let i=HIe(e,n),o=Inn(i);o.isDirectory()?t.push(...qIe(i)):o.isFile()&&n.endsWith(".md")&&t.push(i)}}catch(r){Te(r)}return t}async function $At(){let e=[];try{let t=HIe(Tnn(),en,"rules");if(UIe(t)){let r=qIe(t);for(let n of r)try{let i=await FAt(n,"utf-8"),{paths:o,content:s}=UAt(i);o.length>0&&e.push({filePath:n,content:s,paths:o,isProjectRule:!1})}catch(i){Te(i)}}}catch(t){Te(t)}try{let t=HIe(Qe(),en,"rules");if(UIe(t)){let r=qIe(t);for(let n of r)try{let i=await FAt(n,"utf-8"),{paths:o,content:s}=UAt(i);o.length>0&&e.push({filePath:qAt(Qe(),n),content:s,paths:o,isProjectRule:!0})}catch(i){Te(i)}}}catch(t){Te(t)}return e}function GAt(e,t){e=gV(e);let r=gV(Qe()),n=e.startsWith(r)?qAt(r,e):e;return t.filter(i=>vnn(n,i.paths))}var Nnn=`# hawaCodeMd
761
761
  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 Bnn(e="default"){let r=We.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}):
762
762
 
763
763
  ${i.content}`}).join(`
@@ -1129,7 +1129,7 @@ You are powered by the model ${e}.`}async function Wv(){return H5()?`gitStatus:
1129
1129
  <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:gI(c.inputSchema));return{name:c.name,description:`${u}
1130
1130
 
1131
1131
  Schema:
1132
- ${f}`}}),{messages:a}=t,l=rln(o);return nln(o,l,s,a)}},q_t=iln;Pg();var ku=ee(Ee(),1),uO=ee(Ee(),1);Me();Me();import{existsSync as oln,readdirSync as sln,statSync as aln}from"fs";import{join as lln}from"path";function cln(){let e=eo.plan();if(!oln(e))return[];try{return sln(e).filter(r=>r.endsWith(".md")).map(r=>{let n=lln(e,r),i=aln(n);return{name:r,path:n,modified:i.mtime}}).sort((r,n)=>n.modified.getTime()-r.modified.getTime())}catch{return[]}}var $_t=({onSelect:e})=>{let[t,r]=(0,uO.useState)([]),[n,i]=(0,uO.useState)(0),[o,s]=(0,uO.useState)(!1);(0,uO.useEffect)(()=>{let c=cln();r(c),s(!0)},[]);let a=[{label:"New plan",value:"__NEW_PLAN__",isNew:!0},...t.map(c=>({label:c.name,value:c.path,isNew:!1,modified:c.modified}))];vr((c,u)=>{if(u.upArrow)i(f=>f>0?f-1:a.length-1);else if(u.downArrow)i(f=>f<a.length-1?f+1:0);else if(u.return){let f=a[n];f&&e(f.value)}else u.escape&&e("__CANCELLED__")});let l=Pe();return o?ku.createElement(N,{flexDirection:"column",marginY:1},ku.createElement(N,{marginBottom:1},ku.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")),ku.createElement(N,{marginBottom:1},ku.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 ku.createElement(N,{key:c.isNew?"new":c.value,flexDirection:"row",marginLeft:2},ku.createElement(v,{color:f?l.claude:l.text},f?"\u276F":" "),ku.createElement(v,{color:f?l.claude:l.text}," "),ku.createElement(v,{color:f?l.claude:l.text,bold:c.isNew},c.isNew?c.label:c.label.replace(".md","")),!c.isNew&&c.modified&&ku.createElement(v,{dimColor:!0}," ","(",kge(c.modified),")"))}),ku.createElement(N,{marginTop:1,marginLeft:2},ku.createElement(v,{dimColor:!0},"\u2191/\u2193 to select \xB7 Enter to confirm \xB7 Esc to cancel"))):ku.createElement(N,{flexDirection:"column",marginY:1},ku.createElement(v,null,"Loading plan history..."))};var G_t=ee(Ee(),1),uln={type:"local-jsx",name:"plan",description:()=>"Enable plan mode",isEnabled:!0,isHidden:!1,disableCancel:!0,async call(e){return xi.isPlanMode()?(e("Already in plan mode."),null):G_t.createElement($_t,{onSelect:t=>{if(t==="__CANCELLED__"){e("Cancelled.");return}t&&t!=="__NEW_PLAN__"?xi.setCurrentPlanFilePath(t):xi.generatePlanFilePath(),xi.setMode("plan",!0,!1),e("Enabled plan mode")}})},userFacingName(){return"plan"}},z_t=uln;Pg();var dln={type:"local",name:"auto",description:()=>"Enable auto mode",isEnabled:!0,isHidden:!1,async call(){return xi.isAutoMode()?"Already in auto mode.":(xi.setMode("auto",!0),"Enabled auto mode")},userFacingName(){return"auto"}},j_t=dln;xr();import{resolve as fln}from"path";var pln={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=Qe(),n=fln(r,t);la(n);let i=Qe();return i===r?`Already in ${i}.`:`Changed directory to ${i}/`},userFacingName(){return"cd"}},Y_t=pln;var ICt=ee(Ee(),1);var $n=ee(Ee(),1);var zln=ee(Ee(),1);var S9=ee(Ee(),1),qln=ee(J_t(),1);var Z_t={info:"blue",success:"green",error:"red",warning:"yellow"},xln={styles:{container:({variant:e})=>({flexGrow:1,borderStyle:"round",borderColor:Z_t[e],gap:1,paddingX:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:Z_t[e]}),content:()=>({flexShrink:1,flexGrow:1,minWidth:0,flexDirection:"column",gap:1}),title:()=>({bold:!0}),message:()=>({})},config({variant:e}){let t;return e==="info"&&(t=Lr.info),e==="success"&&(t=Lr.tick),e==="error"&&(t=Lr.cross),e==="warning"&&(t=Lr.warning),{icon:t}}},X_t=xln;var wln={styles:{container:({color:e})=>({backgroundColor:e}),label:()=>({color:"black"})}},eyt=wln;var Dln={styles:{input:({isFocused:e})=>({dimColor:!e})}},tyt=Dln;var Rln={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=Rln;var Nln={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})}},nyt=Nln;var Bln={styles:{container:()=>({flexGrow:1,minWidth:0}),completed:()=>({color:"magenta"}),remaining:()=>({dimColor:!0})},config:()=>({completedCharacter:Lr.square,remainingCharacter:Lr.squareLightShade})},iyt=Bln;var Oln={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})}},oyt=Oln;var kln={styles:{container:()=>({gap:1}),frame:()=>({color:"blue"}),label:()=>({})}},syt=kln;var Mln={success:"green",error:"red",warning:"yellow",info:"blue"},Qln={success:Lr.tick,error:Lr.cross,warning:Lr.warning,info:Lr.info},Pln={styles:{container:()=>({gap:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:Mln[e]}),message:()=>({})},config:({variant:e})=>({icon:Qln[e]})},ayt=Pln;var Lln={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})},config:()=>({marker:Lr.line})},lyt=Lln;var Fln={styles:{value:()=>({})}},cyt=Fln;var Uln={styles:{value:()=>({})}},uyt=Uln;var Hln={styles:{value:()=>({})}},dyt=Hln;var $ln={components:{Alert:X_t,Badge:eyt,ConfirmInput:tyt,MultiSelect:ryt,OrderedList:nyt,ProgressBar:iyt,Select:oyt,Spinner:syt,StatusMessage:ayt,UnorderedList:lyt,TextInput:cyt,EmailInput:uyt,PasswordInput:dyt}},Gln=(0,S9.createContext)($ln);var Ao=e=>(0,S9.useContext)(Gln).components[e];var jln=ee(Ee(),1);var m_=ee(Ee(),1);var fO=ee(Ee(),1);var fyt=ee(Ee(),1);var I9=Lr.line;var XX=(0,fyt.createContext)({marker:I9});function pyt({children:e}){let{marker:t}=(0,fO.useContext)(XX),{styles:r}=Ao("UnorderedList");return fO.default.createElement(N,{...r.listItem()},fO.default.createElement(v,{...r.marker()},t),fO.default.createElement(N,{...r.content()},e))}var myt=ee(Ee(),1),Tve=(0,myt.createContext)({depth:0});function Yln({children:e}){let{depth:t}=(0,m_.useContext)(Tve),{styles:r,config:n}=Ao("UnorderedList"),i=(0,m_.useMemo)(()=>({depth:t+1}),[t]),o=(0,m_.useMemo)(()=>{let{marker:s}=n();return typeof s=="string"?{marker:s}:Array.isArray(s)?{marker:s[t]??s.at(-1)??I9}:{marker:I9}},[n,t]);return m_.default.createElement(Tve.Provider,{value:i},m_.default.createElement(XX.Provider,{value:o},m_.default.createElement(N,{...r.list()},e)))}Yln.Item=pyt;var Wln=ee(Ee(),1);var Vln=ee(Ee(),1);var T9=ee(Ee(),1);var pO=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 gyt=ee(Ee(),1);var mO=ee(Ee(),1);var v9=ee(Ee(),1);function Ayt({isFocused:e,isSelected:t,children:r}){let{styles:n}=Ao("Select");return v9.default.createElement(N,{...n.option({isFocused:e})},e&&v9.default.createElement(v,{...n.focusIndicator()},Lr.pointer),v9.default.createElement(v,{...n.label({isFocused:e,isSelected:t})},r),t&&v9.default.createElement(v,{...n.selectedIndicator()},Lr.tick))}var hm=ee(Ee(),1);import{isDeepStrictEqual as Kln}from"node:util";var Jln=(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}},hyt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=typeof e=="number"?Math.min(e,r.length):r.length,i=new pO(r);return{optionMap:i,visibleOptionCount:n,focusedValue:i.first?.value,visibleFromIndex:0,visibleToIndex:n,previousValue:t,value:t}},Eyt=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n})=>{let[i,o]=(0,hm.useReducer)(Jln,{visibleOptionCount:e,defaultValue:r,options:t},hyt),[s,a]=(0,hm.useState)(t);t!==s&&!Kln(t,s)&&(o({type:"reset",state:hyt({visibleOptionCount:e,defaultValue:r,options:t})}),a(t));let l=(0,hm.useCallback)(()=>{o({type:"focus-next-option"})},[]),c=(0,hm.useCallback)(()=>{o({type:"focus-previous-option"})},[]),u=(0,hm.useCallback)(()=>{o({type:"select-focused-option"})},[]),f=(0,hm.useMemo)(()=>t.map((g,m)=>({...g,index:m})).slice(i.visibleFromIndex,i.visibleToIndex),[t,i.visibleFromIndex,i.visibleToIndex]);return(0,hm.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 _yt=({isDisabled:e=!1,state:t})=>{vr((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};function gO({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:i,onChange:o}){let s=Eyt({visibleOptionCount:t,options:n,defaultValue:i,onChange:o});_yt({isDisabled:e,state:s});let{styles:a}=Ao("Select");return mO.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=mO.default.createElement(mO.default.Fragment,null,l.label.slice(0,u),mO.default.createElement(v,{...a.highlightedText()},r),l.label.slice(u+r.length))}return mO.default.createElement(Ayt,{key:l.value,isFocused:!e&&s.focusedValue===l.value,isSelected:s.value===l.value},c)}))}var Zln=ee(Ee(),1);var yyt=ee(Ee(),1);var ecn=ee(Ee(),1);var eee=ee(Ee(),1);var Xln=ee(Ee(),1);var iBi=ar.inverse(" ");var Hg=ee(Ee(),1);var AO=ee(Ee(),1);var byt=ee(Ee(),1);var tee=(0,byt.createContext)({marker:Lr.line});function ree({children:e}){let{marker:t}=(0,AO.useContext)(tee),{styles:r}=Ao("OrderedList");return AO.default.createElement(N,{...r.listItem()},AO.default.createElement(v,{...r.marker()},t),AO.default.createElement(N,{...r.content()},e))}var Cyt=ee(Ee(),1),vve=(0,Cyt.createContext)({marker:""});function qg({children:e}){let{marker:t}=(0,Hg.useContext)(vve),{styles:r}=Ao("OrderedList"),n=0;for(let o of Hg.default.Children.toArray(e))!(0,Hg.isValidElement)(o)||o.type!==ree||n++;let i=String(n).length;return Hg.default.createElement(N,{...r.list()},Hg.default.Children.map(e,(o,s)=>{if(!(0,Hg.isValidElement)(o)||o.type!==ree)return o;let a=`${String(s+1).padStart(i)}.`,l=`${t}${a}`;return Hg.default.createElement(vve.Provider,{value:{marker:l}},Hg.default.createElement(tee.Provider,{value:{marker:l}},o))}))}qg.Item=ree;var rcn=ee(Ee(),1);var xve=ee(Ee(),1);var tcn=ee(Ee(),1);var OBi=ar.inverse(" ");var ncn=ee(Ee(),1);var icn=ee(Ee(),1);var scn=ee(Ee(),1);var nee=ee(Ee(),1);var ocn=ee(Ee(),1);var n2i=ar.inverse(" ");var zi=ee(Ee(),1);var wve=ee(Ee(),1),Dve=ee(Ee(),1);$5();ds();Fi();Pv();lr();var Syt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function Kv(){let e=[...Syt,...[...Syt].reverse()],{frame:t}=pR({interval:120});return wve.createElement(N,{flexWrap:"nowrap",height:1,width:2},wve.createElement(v,{color:Pe().claude},e[t%e.length]))}var see=ee(Ee(),1);var oee=null,g_=null,iee=new Set;function Nve(e){let{columns:t,rows:r}=e;if(t&&r)return{columns:t,rows:r};let n=Cpe();return{columns:t||n.columns||80,rows:r||n.rows||24}}function Rve(){g_&&(oee=Nve(g_),iee.forEach(e=>e(oee)))}function acn(e,t){return g_!==e&&(g_&&g_.off("resize",Rve),g_=e,oee=Nve(e),e.on("resize",Rve)),iee.add(t),()=>{iee.delete(t),iee.size===0&&g_&&(g_.off("resize",Rve),g_=null,oee=null)}}function Bve(){let{stdout:e}=fR(),[t,r]=(0,see.useState)(()=>Nve(e));return(0,see.useEffect)(()=>acn(e,r),[e]),t}function hO(){return Bve()}qe();bf();Me();oh();Me();var jOi=ee(Xve(),1);import{homedir as M9}from"os";import{join as yO}from"path";import{existsSync as Q9,mkdirSync as fCt,appendFileSync as dCt,readFileSync as pCt,constants as ifn,writeFileSync as ofn,unlinkSync as mCt,statSync as sfn}from"fs";import{platform as gCt}from"process";import{accessSync as afn}from"fs";var nfn="2.2.2",k9={VERSION:nfn,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"};qe();var Zv=yO(R0,".update.lock"),lfn=300*1e3;function ACt(){try{if(Q9(R0)||fCt(R0,{recursive:!0}),Q9(Zv)){let e=sfn(Zv);if(Date.now()-e.mtimeMs<lfn)return!1;try{mCt(Zv)}catch(r){return Te(`Failed to remove stale lock file: ${r}`),!1}}return ofn(Zv,`${process.pid}`,"utf8"),!0}catch(e){return Te(`Failed to acquire lock: ${e}`),!1}}function hCt(){try{Q9(Zv)&&pCt(Zv,"utf8")===`${process.pid}`&&mCt(Zv)}catch(e){Te(`Failed to release lock: ${e}`)}}async function exe(){try{let e=await ai("npm -g config get prefix");if(e.code!==0)return Te("Failed to check npm permissions"),{hasPermissions:!1,npmPrefix:null};let t=e.stdout.trim(),r=!1;try{afn(t,ifn.W_OK),r=!0}catch{r=!1}return r?{hasPermissions:!0,npmPrefix:t}:(Te("Insufficient permissions for global npm install."),{hasPermissions:!1,npmPrefix:t})}catch(e){return Te(`Failed to verify npm global install permissions: ${e}`),{hasPermissions:!1,npmPrefix:null}}}async function ECt(e){if(!ACt())throw gt("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:k9.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{Q9(e)||fCt(e,{recursive:!0});let t=await ai(`npm -g config set prefix ${e}`);if(t.code!==0)throw new Error(`Failed to set npm prefix: ${t.stderr}`);let r=`
1132
+ ${f}`}}),{messages:a}=t,l=rln(o);return nln(o,l,s,a)}},q_t=iln;Pg();var ku=ee(Ee(),1),uO=ee(Ee(),1);Me();Me();import{existsSync as oln,readdirSync as sln,statSync as aln}from"fs";import{join as lln}from"path";function cln(){let e=eo.plan();if(!oln(e))return[];try{return sln(e).filter(r=>r.endsWith(".md")).map(r=>{let n=lln(e,r),i=aln(n);return{name:r,path:n,modified:i.mtime}}).sort((r,n)=>n.modified.getTime()-r.modified.getTime())}catch{return[]}}var $_t=({onSelect:e})=>{let[t,r]=(0,uO.useState)([]),[n,i]=(0,uO.useState)(0),[o,s]=(0,uO.useState)(!1);(0,uO.useEffect)(()=>{let c=cln();r(c),s(!0)},[]);let a=[{label:"New plan",value:"__NEW_PLAN__",isNew:!0},...t.map(c=>({label:c.name,value:c.path,isNew:!1,modified:c.modified}))];vr((c,u)=>{if(u.upArrow)i(f=>f>0?f-1:a.length-1);else if(u.downArrow)i(f=>f<a.length-1?f+1:0);else if(u.return){let f=a[n];f&&e(f.value)}else u.escape&&e("__CANCELLED__")});let l=Pe();return o?ku.createElement(N,{flexDirection:"column",marginY:1},ku.createElement(N,{marginBottom:1},ku.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")),ku.createElement(N,{marginBottom:1},ku.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 ku.createElement(N,{key:c.isNew?"new":c.value,flexDirection:"row",marginLeft:2},ku.createElement(v,{color:f?l.claude:l.text},f?"\u276F":" "),ku.createElement(v,{color:f?l.claude:l.text}," "),ku.createElement(v,{color:f?l.claude:l.text,bold:c.isNew},c.isNew?c.label:c.label.replace(".md","")),!c.isNew&&c.modified&&ku.createElement(v,{dimColor:!0}," ","(",kge(c.modified),")"))}),ku.createElement(N,{marginTop:1,marginLeft:2},ku.createElement(v,{dimColor:!0},"\u2191/\u2193 to select \xB7 Enter to confirm \xB7 Esc to cancel"))):ku.createElement(N,{flexDirection:"column",marginY:1},ku.createElement(v,null,"Loading plan history..."))};var G_t=ee(Ee(),1),uln={type:"local-jsx",name:"plan",description:()=>"Enable plan mode",isEnabled:!0,isHidden:!1,disableCancel:!0,async call(e){return xi.isPlanMode()?(e("Already in plan mode."),null):G_t.createElement($_t,{onSelect:t=>{if(t==="__CANCELLED__"){e("Cancelled.");return}t&&t!=="__NEW_PLAN__"?xi.setCurrentPlanFilePath(t):xi.generatePlanFilePath(),xi.setMode("plan",!0,!1),e("Enabled plan mode")}})},userFacingName(){return"plan"}},z_t=uln;Pg();var dln={type:"local",name:"auto",description:()=>"Enable auto mode",isEnabled:!0,isHidden:!1,async call(){return xi.isAutoMode()?"Already in auto mode.":(xi.setMode("auto",!0),"Enabled auto mode")},userFacingName(){return"auto"}},j_t=dln;xr();import{resolve as fln}from"path";var pln={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=Qe(),n=fln(r,t);la(n);let i=Qe();return i===r?`Already in ${i}.`:`Changed directory to ${i}/`},userFacingName(){return"cd"}},Y_t=pln;var ICt=ee(Ee(),1);var $n=ee(Ee(),1);var zln=ee(Ee(),1);var S9=ee(Ee(),1),qln=ee(J_t(),1);var Z_t={info:"blue",success:"green",error:"red",warning:"yellow"},xln={styles:{container:({variant:e})=>({flexGrow:1,borderStyle:"round",borderColor:Z_t[e],gap:1,paddingX:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:Z_t[e]}),content:()=>({flexShrink:1,flexGrow:1,minWidth:0,flexDirection:"column",gap:1}),title:()=>({bold:!0}),message:()=>({})},config({variant:e}){let t;return e==="info"&&(t=Lr.info),e==="success"&&(t=Lr.tick),e==="error"&&(t=Lr.cross),e==="warning"&&(t=Lr.warning),{icon:t}}},X_t=xln;var wln={styles:{container:({color:e})=>({backgroundColor:e}),label:()=>({color:"black"})}},eyt=wln;var Dln={styles:{input:({isFocused:e})=>({dimColor:!e})}},tyt=Dln;var Rln={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=Rln;var Nln={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})}},nyt=Nln;var Bln={styles:{container:()=>({flexGrow:1,minWidth:0}),completed:()=>({color:"magenta"}),remaining:()=>({dimColor:!0})},config:()=>({completedCharacter:Lr.square,remainingCharacter:Lr.squareLightShade})},iyt=Bln;var Oln={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})}},oyt=Oln;var kln={styles:{container:()=>({gap:1}),frame:()=>({color:"blue"}),label:()=>({})}},syt=kln;var Mln={success:"green",error:"red",warning:"yellow",info:"blue"},Qln={success:Lr.tick,error:Lr.cross,warning:Lr.warning,info:Lr.info},Pln={styles:{container:()=>({gap:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:Mln[e]}),message:()=>({})},config:({variant:e})=>({icon:Qln[e]})},ayt=Pln;var Lln={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})},config:()=>({marker:Lr.line})},lyt=Lln;var Fln={styles:{value:()=>({})}},cyt=Fln;var Uln={styles:{value:()=>({})}},uyt=Uln;var Hln={styles:{value:()=>({})}},dyt=Hln;var $ln={components:{Alert:X_t,Badge:eyt,ConfirmInput:tyt,MultiSelect:ryt,OrderedList:nyt,ProgressBar:iyt,Select:oyt,Spinner:syt,StatusMessage:ayt,UnorderedList:lyt,TextInput:cyt,EmailInput:uyt,PasswordInput:dyt}},Gln=(0,S9.createContext)($ln);var Ao=e=>(0,S9.useContext)(Gln).components[e];var jln=ee(Ee(),1);var m_=ee(Ee(),1);var fO=ee(Ee(),1);var fyt=ee(Ee(),1);var I9=Lr.line;var XX=(0,fyt.createContext)({marker:I9});function pyt({children:e}){let{marker:t}=(0,fO.useContext)(XX),{styles:r}=Ao("UnorderedList");return fO.default.createElement(N,{...r.listItem()},fO.default.createElement(v,{...r.marker()},t),fO.default.createElement(N,{...r.content()},e))}var myt=ee(Ee(),1),Tve=(0,myt.createContext)({depth:0});function Yln({children:e}){let{depth:t}=(0,m_.useContext)(Tve),{styles:r,config:n}=Ao("UnorderedList"),i=(0,m_.useMemo)(()=>({depth:t+1}),[t]),o=(0,m_.useMemo)(()=>{let{marker:s}=n();return typeof s=="string"?{marker:s}:Array.isArray(s)?{marker:s[t]??s.at(-1)??I9}:{marker:I9}},[n,t]);return m_.default.createElement(Tve.Provider,{value:i},m_.default.createElement(XX.Provider,{value:o},m_.default.createElement(N,{...r.list()},e)))}Yln.Item=pyt;var Wln=ee(Ee(),1);var Vln=ee(Ee(),1);var T9=ee(Ee(),1);var pO=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 gyt=ee(Ee(),1);var mO=ee(Ee(),1);var v9=ee(Ee(),1);function Ayt({isFocused:e,isSelected:t,children:r}){let{styles:n}=Ao("Select");return v9.default.createElement(N,{...n.option({isFocused:e})},e&&v9.default.createElement(v,{...n.focusIndicator()},Lr.pointer),v9.default.createElement(v,{...n.label({isFocused:e,isSelected:t})},r),t&&v9.default.createElement(v,{...n.selectedIndicator()},Lr.tick))}var hm=ee(Ee(),1);import{isDeepStrictEqual as Kln}from"node:util";var Jln=(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}},hyt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=typeof e=="number"?Math.min(e,r.length):r.length,i=new pO(r);return{optionMap:i,visibleOptionCount:n,focusedValue:i.first?.value,visibleFromIndex:0,visibleToIndex:n,previousValue:t,value:t}},Eyt=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n})=>{let[i,o]=(0,hm.useReducer)(Jln,{visibleOptionCount:e,defaultValue:r,options:t},hyt),[s,a]=(0,hm.useState)(t);t!==s&&!Kln(t,s)&&(o({type:"reset",state:hyt({visibleOptionCount:e,defaultValue:r,options:t})}),a(t));let l=(0,hm.useCallback)(()=>{o({type:"focus-next-option"})},[]),c=(0,hm.useCallback)(()=>{o({type:"focus-previous-option"})},[]),u=(0,hm.useCallback)(()=>{o({type:"select-focused-option"})},[]),f=(0,hm.useMemo)(()=>t.map((g,m)=>({...g,index:m})).slice(i.visibleFromIndex,i.visibleToIndex),[t,i.visibleFromIndex,i.visibleToIndex]);return(0,hm.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 _yt=({isDisabled:e=!1,state:t})=>{vr((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};function gO({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:i,onChange:o}){let s=Eyt({visibleOptionCount:t,options:n,defaultValue:i,onChange:o});_yt({isDisabled:e,state:s});let{styles:a}=Ao("Select");return mO.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=mO.default.createElement(mO.default.Fragment,null,l.label.slice(0,u),mO.default.createElement(v,{...a.highlightedText()},r),l.label.slice(u+r.length))}return mO.default.createElement(Ayt,{key:l.value,isFocused:!e&&s.focusedValue===l.value,isSelected:s.value===l.value},c)}))}var Zln=ee(Ee(),1);var yyt=ee(Ee(),1);var ecn=ee(Ee(),1);var eee=ee(Ee(),1);var Xln=ee(Ee(),1);var iBi=ar.inverse(" ");var Hg=ee(Ee(),1);var AO=ee(Ee(),1);var byt=ee(Ee(),1);var tee=(0,byt.createContext)({marker:Lr.line});function ree({children:e}){let{marker:t}=(0,AO.useContext)(tee),{styles:r}=Ao("OrderedList");return AO.default.createElement(N,{...r.listItem()},AO.default.createElement(v,{...r.marker()},t),AO.default.createElement(N,{...r.content()},e))}var Cyt=ee(Ee(),1),vve=(0,Cyt.createContext)({marker:""});function qg({children:e}){let{marker:t}=(0,Hg.useContext)(vve),{styles:r}=Ao("OrderedList"),n=0;for(let o of Hg.default.Children.toArray(e))!(0,Hg.isValidElement)(o)||o.type!==ree||n++;let i=String(n).length;return Hg.default.createElement(N,{...r.list()},Hg.default.Children.map(e,(o,s)=>{if(!(0,Hg.isValidElement)(o)||o.type!==ree)return o;let a=`${String(s+1).padStart(i)}.`,l=`${t}${a}`;return Hg.default.createElement(vve.Provider,{value:{marker:l}},Hg.default.createElement(tee.Provider,{value:{marker:l}},o))}))}qg.Item=ree;var rcn=ee(Ee(),1);var xve=ee(Ee(),1);var tcn=ee(Ee(),1);var OBi=ar.inverse(" ");var ncn=ee(Ee(),1);var icn=ee(Ee(),1);var scn=ee(Ee(),1);var nee=ee(Ee(),1);var ocn=ee(Ee(),1);var n2i=ar.inverse(" ");var zi=ee(Ee(),1);var wve=ee(Ee(),1),Dve=ee(Ee(),1);$5();ds();Fi();Pv();lr();var Syt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function Kv(){let e=[...Syt,...[...Syt].reverse()],{frame:t}=pR({interval:120});return wve.createElement(N,{flexWrap:"nowrap",height:1,width:2},wve.createElement(v,{color:Pe().claude},e[t%e.length]))}var see=ee(Ee(),1);var oee=null,g_=null,iee=new Set;function Nve(e){let{columns:t,rows:r}=e;if(t&&r)return{columns:t,rows:r};let n=Cpe();return{columns:t||n.columns||80,rows:r||n.rows||24}}function Rve(){g_&&(oee=Nve(g_),iee.forEach(e=>e(oee)))}function acn(e,t){return g_!==e&&(g_&&g_.off("resize",Rve),g_=e,oee=Nve(e),e.on("resize",Rve)),iee.add(t),()=>{iee.delete(t),iee.size===0&&g_&&(g_.off("resize",Rve),g_=null,oee=null)}}function Bve(){let{stdout:e}=fR(),[t,r]=(0,see.useState)(()=>Nve(e));return(0,see.useEffect)(()=>acn(e,r),[e]),t}function hO(){return Bve()}qe();bf();Me();oh();Me();var jOi=ee(Xve(),1);import{homedir as M9}from"os";import{join as yO}from"path";import{existsSync as Q9,mkdirSync as fCt,appendFileSync as dCt,readFileSync as pCt,constants as ifn,writeFileSync as ofn,unlinkSync as mCt,statSync as sfn}from"fs";import{platform as gCt}from"process";import{accessSync as afn}from"fs";var nfn="2.2.3",k9={VERSION:nfn,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"};qe();var Zv=yO(R0,".update.lock"),lfn=300*1e3;function ACt(){try{if(Q9(R0)||fCt(R0,{recursive:!0}),Q9(Zv)){let e=sfn(Zv);if(Date.now()-e.mtimeMs<lfn)return!1;try{mCt(Zv)}catch(r){return Te(`Failed to remove stale lock file: ${r}`),!1}}return ofn(Zv,`${process.pid}`,"utf8"),!0}catch(e){return Te(`Failed to acquire lock: ${e}`),!1}}function hCt(){try{Q9(Zv)&&pCt(Zv,"utf8")===`${process.pid}`&&mCt(Zv)}catch(e){Te(`Failed to release lock: ${e}`)}}async function exe(){try{let e=await ai("npm -g config get prefix");if(e.code!==0)return Te("Failed to check npm permissions"),{hasPermissions:!1,npmPrefix:null};let t=e.stdout.trim(),r=!1;try{afn(t,ifn.W_OK),r=!0}catch{r=!1}return r?{hasPermissions:!0,npmPrefix:t}:(Te("Insufficient permissions for global npm install."),{hasPermissions:!1,npmPrefix:t})}catch(e){return Te(`Failed to verify npm global install permissions: ${e}`),{hasPermissions:!1,npmPrefix:null}}}async function ECt(e){if(!ACt())throw gt("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:k9.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{Q9(e)||fCt(e,{recursive:!0});let t=await ai(`npm -g config set prefix ${e}`);if(t.code!==0)throw new Error(`Failed to set npm prefix: ${t.stderr}`);let r=`
1133
1133
  # npm global path
1134
1134
  export PATH="${e}/bin:$PATH"
1135
1135
  `;if(gCt==="win32"){let n=await ai(`setx PATH "${process.env.PATH};${e}"`);if(n.code!==0)throw new Error(`Failed to update PATH on Windows: ${n.stderr}`)}else{let n=[yO(M9(),".bashrc"),yO(M9(),".bash_profile"),yO(M9(),".zshrc"),yO(M9(),".config","fish","config.fish")];for(let i of n)if(Q9(i))try{if(!pCt(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.2.2",
3
+ "version": "2.2.3",
4
4
  "bin": {
5
5
  "hcode": "hawa.js"
6
6
  },