@dahawa/hawa-code 2.4.8 → 2.4.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.js +5 -4
- package/hands.js +5 -4
- package/package.json +1 -1
package/cli.js
CHANGED
|
@@ -488,7 +488,7 @@ ${c}. Members must communicate with each other using the ${jh} tool`;if(n){l+=`
|
|
|
488
488
|
Warning: Team "${r}" has ${d.length} active ${p}, so it cannot be deleted.`}l+=`
|
|
489
489
|
|
|
490
490
|
You don't need to keep checking on the team's tool progress\u2014members will notify you when they complete their tasks. Continue with other work or respond to the user instead`}return[this.createReminderMessage("agent_team","task","medium",l,s,!0)]}getContextOptimizationReminder(t,r,n){let o=ct.isMessageArchivingEnable(),i=ct.isMemoEnable();if(!o&&!i)return null;let s=r??t,a=o&&s?.some(S=>S.name===ed),c=i&&s?.some(S=>S.name===iy);if(!a&&!c)return null;let l=t?.some(S=>S.name===ed),u=t?.some(S=>S.name===iy),d=Date.now(),p=n?.percentUsed,f=.92*100,A=[];a&&(mgo()?A.push(l?`use ${ed} 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 ${ed} with ${Su} 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 ${ed} 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 ${ed} with ${Su} 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 ${iy} to persist long analysis conclusions, plans, or error records to keep them out of the context window while remaining retrievable later`:`load ${iy} with ${Su} 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(`${ed} and ${iy} 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
|
-
`)}`;return this.createReminderMessage("message_archiving_context","performance","medium",E,d,!0)}async getToolLazy(t,r,n,o){if(!(ct.isLazyToolEnable()&&o===!0))return null;let i=n??await Rn.getTools(!1),s=r?.map(b=>b.name)??[],a=new Set(s),c=i.filter(b=>!t0.includes(b.name)&&!a.has(b.name)).map(b=>b.name),l=i.some(b=>b.name===Su),u=i.some(b=>b.name===yu),d=!process.env.HAWA_CODE_SHOW_LAZY_TOOL_METHOD||(process.env.HAWA_CODE_SHOW_LAZY_TOOL_METHOD+"").toLowerCase()==="true",p=l?`Load them with ${Su} if needed; call it in parallel with other tools when possible.`:"",f=l
|
|
491
|
+
`)}`;return this.createReminderMessage("message_archiving_context","performance","medium",E,d,!0)}async getToolLazy(t,r,n,o){if(!(ct.isLazyToolEnable()&&o===!0))return null;let i=n??await Rn.getTools(!1),s=r?.map(b=>b.name)??[],a=new Set(s),c=i.filter(b=>!t0.includes(b.name)&&!a.has(b.name)).map(b=>b.name),l=i.some(b=>b.name===Su),u=i.some(b=>b.name===yu),d=!process.env.HAWA_CODE_SHOW_LAZY_TOOL_METHOD||(process.env.HAWA_CODE_SHOW_LAZY_TOOL_METHOD+"").toLowerCase()==="true",p=l?`Load them with ${Su} if needed; call it in parallel with other tools when possible.`:"",f=l?`\u5982\u679C\u5DE5\u5177\u4E0D\u5728 <loaded_tools> \u548C <defalut_tools> \u4EE5\u5185\uFF0C\u4E0D\u8981\u76F4\u63A5\u4F7F\u7528\uFF0C\u5E94\u8BE5\u53BB\u52A0\u8F7D\uFF0C Load tools with ${Su} if needed; call it in parallel with other tools when possible.`:"",A=u?`Unload tools you no longer need with ${yu}; call it in parallel with other tools when possible. You do not need to unload if you are returning results to the user.`:"",h=`Not yet loaded tools : ${c.length?c.join(", ")+". "+p:"none."} Loaded tools: ${s.length?s.join(", ")+". "+A:"none."}.`,E=`${c.length>0?f:""} ${s.length>0?A:""}.`,S=d?h:E;return[this.createReminderMessage("tool","general","high",S,Date.now(),d)]}getRecalledMemories(t){let n=Ke.getQueryContext(t).recalledMemories;if(!n||n.length===0)return null;let o=Date.now(),s=`The following memories were recalled and may be relevant to the current task. Use them only if they are helpful:
|
|
492
492
|
|
|
493
493
|
${n.map(a=>`## ${a.path.split(/[\\/]/).pop()||a.path}
|
|
494
494
|
${a.content}`).join(`
|
|
@@ -675,7 +675,7 @@ globstar while`,t,p,r,f,A),this.matchOne(t.slice(p),r.slice(f),n))return this.de
|
|
|
675
675
|
`)),KUn(e,o,{encoding:r,flush:!0})}var zHt=new gde.default({fetchMethod:e=>nFn(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});async function rGt(e){let t=bV(e);return zHt.get(t)||zHt.fetchMethod?.(t)}async function nFn(e){let t=new AbortController;setTimeout(()=>{t.abort()},1e3);let r=await S2t(e,t.signal,15),n=0;for(let o of r)gB(o)==="CRLF"&&n++;return n>3?"CRLF":"LF"}function nGt(e,t,r){if(e.has(t))return e.get(t);let n=r();return e.set(t,n),n}var oFn=new gde.default({fetchMethod:e=>oGt(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});function zm(e){let t=bV(e);return nGt(oFn,t,()=>oGt(t))}function oGt(e){let r=Buffer.alloc(4096),n;try{n=WHt(e,"r");let o=KHt(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&&JHt(n)}}var iFn=new gde.default({fetchMethod:e=>iGt(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});function gB(e){let t=bV(e);return nGt(iFn,t,()=>iGt(t))}function iGt(e,t="utf8"){try{if(!ZHt(e).isFile())return"LF";let n=Buffer.alloc(4096),o=WHt(e,"r"),i=KHt(o,n,0,4096,0);JHt(o);let s=n.toString(t,0,i),a=0,c=0;for(let l=0;l<s.length;l++)s[l]===`
|
|
676
676
|
`&&(l>0&&s[l-1]==="\r"?a++:c++);return a>c?"CRLF":"LF"}catch(r){return Se(`Error detecting line endings for file ${e}: ${r}`),"LF"}}function jF(e){let t=XHt(e)?e:bV(Be(),e);return t.endsWith(" AM.png")?t.replace(" AM.png","\u202FAM.png"):t.endsWith(" PM.png")?t.replace(" PM.png","\u202FPM.png"):t}function xPe(e){return e?XHt(e)?e:bV(Be(),e):void 0}function sGt(e){try{let t=xPe(e),r=t?eFn(Be(),t):void 0;return{absolutePath:t,relativePath:r}}catch(t){return X("getAbsoluteAndRelativePaths error ",t),{absolutePath:null,relativePath:null}}}function hde(e){try{let t=tFn(e),r=VHt(e,YHt(e));if(!JUn(t))return;let i=ZUn(t).filter(s=>VHt(s,YHt(s))===r&&rFn(t,s)!==e)[0];return i||void 0}catch(t){Se(`Error finding similar file for ${e}: ${t}`);return}}function wPe(){let e=process.env.HAWA_CODE_COMPACT_LINE_PREFIX;return!(e==="0"||e==="false")}function rw({content:e,startLine:t}){if(!e)return"";let r=e.split(/\r?\n/);return wPe()?r.map((n,o)=>`${o+t} ${n}`).join(`
|
|
677
677
|
`):r.map((n,o)=>{let i=String(o+t);return i.length>=6?`${i}\u2192${n}`:`${i.padStart(6," ")}\u2192${n}`}).join(`
|
|
678
|
-
`)}function aGt(e){try{let t=XUn(e),r=t.readSync();return t.closeSync(),r===null}catch(t){return Se(`Error checking directory: ${t}`),!1}}Ge();function Zx(){let e=Xn();e.hasCompletedProjectOnboarding||ps({...e,hasCompletedProjectOnboarding:!0})}function lFn(){let e=hr();To({...e,lastReleaseNotesSeen:MACRO.VERSION})}function RPe({workspaceDir:e}){let r=!Xn().hasCompletedProjectOnboarding,o=hr().lastReleaseNotesSeen,i=[];(!o||(0,cGt.gt)(MACRO.VERSION,o))&&(i=kue[MACRO.VERSION]||[]);let s=i.length>0;if(Ki.useEffect(()=>{s&&!r&&lFn()},[s,r]),!r&&!s)return null;let a=sFn(aFn(e,Ci)),c=aGt(e),l=!a&&!c,u=OF.isEnabled&&!hr().shiftEnterKeyBindingInstalled,d=ee();return Ki.createElement(x,{flexDirection:"column",gap:1,padding:1,paddingBottom:0},r&&Ki.createElement(Ki.Fragment,null,Ki.createElement(C,{color:d.secondaryText},"Tips for getting started:"),Ki.createElement(Ud,{children:[]},(()=>{let p=[];return c&&p.push(Ki.createElement(Ud.Item,{key:"workspace"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," to create a new app or clone a repository."))),l&&p.push(Ki.createElement(Ud.Item,{key:"claudemd"},Ki.createElement(C,{color:d.secondaryText},"Run ",Ki.createElement(C,{color:d.text},"/init")," to create a",Ci," file with instructions for Hawa code."))),u&&p.push(Ki.createElement(Ud.Item,{key:"terminal"},Ki.createElement(C,{color:d.secondaryText},"Run ",Ki.createElement(C,{color:d.text},"/terminal-setup"),Ki.createElement(C,{bold:!1}," to set up terminal integration")))),p.push(Ki.createElement(Ud.Item,{key:"questions"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," questions about your codebase."))),p.push(Ki.createElement(Ud.Item,{key:"changes"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," to implement changes to your codebase."))),p})())),!r&&s&&Ki.createElement(x,{borderColor:ee().secondaryBorder,flexDirection:"column",marginRight:1},Ki.createElement(x,{flexDirection:"column",gap:0},Ki.createElement(x,{marginBottom:1},Ki.createElement(C,null,"\u{1F195} What's new in v",MACRO.VERSION,":")),Ki.createElement(x,{flexDirection:"column",marginLeft:1},i.map((p,f)=>Ki.createElement(C,{key:f,color:ee().secondaryText},"\u2022 ",p))))),e===cFn()&&Ki.createElement(C,{color:ee().warning},"Note: You have launched ",Ki.createElement(C,{bold:!0},et)," in your home directory. For the best experience, launch it in a project directory instead."))}var WF=F(ne(),1);var zF=F(ne(),1);var CV=F(ne(),1);function NPe({isFocused:e,isSelected:t,smallPointer:r,children:n}){let{styles:o}=ms("Select");return CV.default.createElement(x,{...o.option({isFocused:e})},e&&CV.default.createElement(C,{...o.focusIndicator()},r?Jr.triangleDownSmall:Jr.pointer),CV.default.createElement(C,{...o.label({isFocused:e,isSelected:t})},n),t&&CV.default.createElement(C,{...o.selectedIndicator()},Jr.tick))}var Wm=F(ne(),1);import{isDeepStrictEqual as uFn}from"node:util";var IV=class extends Map{first;constructor(t){let r=[],n,o,i=0;for(let s of t){let a={...s,previous:o,next:void 0,index:i};o&&(o.next=a),n||=a;let c="value"in s?s.value:DPe(s);r.push([c,a]),i++,o=a}super(r),this.first=n}};var dFn=(e,t)=>{switch(t.type){case"focus-next-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.next;for(;n&&!("value"in n);)n=n.next;if(!n)return e;if(!(n.index>=e.visibleToIndex))return{...e,focusedValue:n.value};let i=Math.min(e.optionMap.size,e.visibleToIndex+1),s=i-e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:s,visibleToIndex:i}}case"focus-previous-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.previous;for(;n&&!("value"in n);)n=n.previous;if(!n)return e;if(!(n.index<=e.visibleFromIndex))return{...e,focusedValue:n.value};let i=Math.max(0,e.visibleFromIndex-1),s=i+e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:i,visibleToIndex:s}}case"select-focused-option":return{...e,previousValue:e.value,value:e.focusedValue};case"reset":return t.state;case"set-focus":return{...e,focusedValue:t.value}}},OPe=e=>e.flatMap(t=>{if("options"in t){let r=OPe(t.options),n=r.flatMap(i=>"value"in i?i.value:[]);return[...t.header!==void 0?[{header:t.header,optionValues:n}]:[],...r]}return t}),lGt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=OPe(r),o=typeof e=="number"?Math.min(e,n.length):n.length,i=new IV(n),s=i.first,a=s&&"value"in s?s.value:void 0;return{optionMap:i,visibleOptionCount:o,focusedValue:a,visibleFromIndex:0,visibleToIndex:o,previousValue:t,value:t}},BPe=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n,onFocus:o,focusValue:i})=>{let s=OPe(t),[a,c]=(0,Wm.useReducer)(dFn,{visibleOptionCount:e,defaultValue:r,options:t},lGt),[l,u]=(0,Wm.useState)(s);s!==l&&!uFn(s,l)&&(c({type:"reset",state:lGt({visibleOptionCount:e,defaultValue:r,options:t})}),u(s));let d=(0,Wm.useCallback)(()=>{c({type:"focus-next-option"})},[]),p=(0,Wm.useCallback)(()=>{c({type:"focus-previous-option"})},[]),f=(0,Wm.useCallback)(()=>{c({type:"select-focused-option"})},[]),A=(0,Wm.useMemo)(()=>s.map((h,E)=>({...h,index:E})).slice(a.visibleFromIndex,a.visibleToIndex),[s,a.visibleFromIndex,a.visibleToIndex]);return(0,Wm.useEffect)(()=>{a.value&&a.previousValue!==a.value&&n?.(a.value)},[a.previousValue,a.value,t,n]),(0,Wm.useEffect)(()=>{a.focusedValue&&o?.(a.focusedValue)},[a.focusedValue,o]),(0,Wm.useEffect)(()=>{i&&c({type:"set-focus",value:i})},[i]),{focusedValue:a.focusedValue,visibleFromIndex:a.visibleFromIndex,visibleToIndex:a.visibleToIndex,value:a.value,visibleOptions:A,focusNextOption:d,focusPreviousOption:p,selectFocusedOption:f}};var MPe=({isDisabled:e=!1,state:t})=>{Ct((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};var DPe=e=>`HEADER-${e.optionValues.join(",")}`;function vC({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a}){let c=BPe({visibleOptionCount:t,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a});MPe({isDisabled:e,state:c});let{styles:l}=ms("Select");return zF.default.createElement(x,{...l.container()},c.visibleOptions.map(u=>{let d="value"in u?u.value:DPe(u),p=!e&&c.focusedValue!==void 0&&("value"in u?c.focusedValue===u.value:u.optionValues.includes(c.focusedValue)),f=!!c.value&&("value"in u?c.value===u.value:u.optionValues.includes(c.value)),A="header"in u,h="label"in u?u.label:u.header,E=h;if(r&&h.includes(r)){let S=h.indexOf(r);E=zF.default.createElement(zF.default.Fragment,null,h.slice(0,S),zF.default.createElement(C,{...l.highlightedText()},r),h.slice(S+r.length))}return zF.default.createElement(NPe,{key:d,isFocused:p,isSelected:f,smallPointer:A},E)}))}function uGt({onDone:e}){return Ct((t,r)=>{(r.ctrl&&(t==="c"||t==="d")||r.escape)&&e()}),WF.default.createElement(x,{flexDirection:"column",borderStyle:"round",padding:1,borderColor:ee().secondaryBorder},WF.default.createElement(x,{marginBottom:1,flexDirection:"column"},WF.default.createElement(C,{bold:!0},"You've spent $5 this session.")),WF.default.createElement(x,null,WF.default.createElement(vC,{options:[{value:"ok",label:"Got it, thanks!"}],onChange:e})))}var An=F(ne(),1),Kt=F(ne(),1);var Lp=F(ne(),1);Ge();sr();Cy();var mFn="2.4.8",Iy={VERSION:mFn,PACKAGE_URL:"@dahawa/hawa-code",README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var LPe=46,pGt=["(\u2740\u2579\u25E1\u2579)","(\u25D5\u072B\u25D5)","\u239D(\u25D5u\u25D5)\u23A0","\u10DA(\u25C9\u25DE\u0C6A\u25DF\u25C9 )\u10DA","(\xB4\u25C9\u203F\u25C9\uFF40)","\u0E01\u0E47\u0295\u2022\u0361\u1D25\u2022\u0294 \u0E01\u0E49","\uFF0F/( \u25D5\u203F\u203F\u25D5 )\uFF3C"];function Ede({isDefaultModel:e=!1}){let t=Math.max(LPe,Be().length+12),r=ee(),n=pGt[Math.floor(Math.random()*pGt.length)];return Lp.createElement(x,{flexDirection:"column"},Lp.createElement(x,{flexDirection:"column",gap:1,paddingLeft:1,width:"100%"},Lp.createElement(C,null,Lp.createElement(C,null,n)," Welcome to"," ",Lp.createElement(C,{bold:!0},et),Lp.createElement(C,{color:r.secondaryText}," v",Iy.VERSION)),Lp.createElement(Lp.Fragment,null,Lp.createElement(x,{paddingLeft:2,flexDirection:"column",gap:1},Lp.createElement(C,{color:r.secondaryText,italic:!0},"/help for help"),Lp.createElement(C,{color:r.secondaryText},"cwd: ",Be()),Lp.createElement(C,{color:r.secondaryText},"model: ",bo.getConfig().routing.MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A"),Lp.createElement(C,{color:r.secondaryText},"small fast model: ",bo.getConfig().routing.SMALL_FAST_MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A")))))}var _S=F(ne(),1);Re();var LJ=F(ne(),1);import{randomUUID as gS}from"crypto";$s();Re();nr();sr();Re();Ge();import{existsSync as RC,readdirSync as L4n,statSync as Q4n}from"fs";import{join as sw,relative as U4n}from"path";import{homedir as F$t}from"os";import{platform as F4n}from"process";import{readFile as aw}from"fs/promises";sr();AE();Ar();import{join as SFn,sep as yFn}from"path";function Qp(){if(!Km())return!1;try{let e=nt();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Jm(){return(SFn(Be(),".hcode","team-memory")+yFn).normalize("NFC")}function hE(e){let t=e.normalize("NFC"),r=Jm();return t.startsWith(r)}var H$t=F(MV(),1);Xo();var P$t=F(MV(),1);sr();Ge();Re();Bp();import{readFile as M$t}from"fs/promises";import{existsSync as tLe,readdirSync as B4n,statSync as M4n}from"fs";import{join as rLe,relative as L$t}from"path";import{homedir as k4n}from"os";function k$t(e){try{let t=(0,P$t.default)(e),r=t.data.paths,n=[];return typeof r=="string"?n=r.split(",").map(o=>o.trim()).filter(Boolean):Array.isArray(r)&&(n=r.filter(o=>typeof o=="string")),{paths:n,content:t.content.trim()}}catch(t){return Se(t),{paths:[],content:e.trim()}}}function P4n(e,t){return t.length===0?!0:t.some(r=>{try{return Hd(e,r,{matchBase:!0,dot:!0})}catch(n){return Se(n),!1}})}function nLe(e){let t=[];try{if(!tLe(e))return t;let r=B4n(e);for(let n of r){let o=rLe(e,n),i=M4n(o);i.isDirectory()?t.push(...nLe(o)):i.isFile()&&n.endsWith(".md")&&t.push(o)}}catch(r){Se(r)}return t}async function Q$t(){let e=[];try{let t=rLe(k4n(),Fn,"rules");if(tLe(t)){let r=nLe(t);for(let n of r)try{let o=await M$t(n,"utf-8"),{paths:i,content:s}=k$t(o);i.length>0&&e.push({filePath:n,content:s,paths:i,isProjectRule:!1})}catch(o){Se(o)}}}catch(t){Se(t)}try{let t=rLe(Be(),Fn,"rules");if(tLe(t)){let r=nLe(t);for(let n of r)try{let o=await M$t(n,"utf-8"),{paths:i,content:s}=k$t(o);i.length>0&&e.push({filePath:L$t(Be(),n),content:s,paths:i,isProjectRule:!0})}catch(o){Se(o)}}}catch(t){Se(t)}return e}function U$t(e,t){e=tle(e);let r=tle(Be()),n=e.startsWith(r)?L$t(r,e):e;return t.filter(o=>P4n(n,o.paths))}var H4n=`# hawaCodeMd
|
|
678
|
+
`)}function aGt(e){try{let t=XUn(e),r=t.readSync();return t.closeSync(),r===null}catch(t){return Se(`Error checking directory: ${t}`),!1}}Ge();function Zx(){let e=Xn();e.hasCompletedProjectOnboarding||ps({...e,hasCompletedProjectOnboarding:!0})}function lFn(){let e=hr();To({...e,lastReleaseNotesSeen:MACRO.VERSION})}function RPe({workspaceDir:e}){let r=!Xn().hasCompletedProjectOnboarding,o=hr().lastReleaseNotesSeen,i=[];(!o||(0,cGt.gt)(MACRO.VERSION,o))&&(i=kue[MACRO.VERSION]||[]);let s=i.length>0;if(Ki.useEffect(()=>{s&&!r&&lFn()},[s,r]),!r&&!s)return null;let a=sFn(aFn(e,Ci)),c=aGt(e),l=!a&&!c,u=OF.isEnabled&&!hr().shiftEnterKeyBindingInstalled,d=ee();return Ki.createElement(x,{flexDirection:"column",gap:1,padding:1,paddingBottom:0},r&&Ki.createElement(Ki.Fragment,null,Ki.createElement(C,{color:d.secondaryText},"Tips for getting started:"),Ki.createElement(Ud,{children:[]},(()=>{let p=[];return c&&p.push(Ki.createElement(Ud.Item,{key:"workspace"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," to create a new app or clone a repository."))),l&&p.push(Ki.createElement(Ud.Item,{key:"claudemd"},Ki.createElement(C,{color:d.secondaryText},"Run ",Ki.createElement(C,{color:d.text},"/init")," to create a",Ci," file with instructions for Hawa code."))),u&&p.push(Ki.createElement(Ud.Item,{key:"terminal"},Ki.createElement(C,{color:d.secondaryText},"Run ",Ki.createElement(C,{color:d.text},"/terminal-setup"),Ki.createElement(C,{bold:!1}," to set up terminal integration")))),p.push(Ki.createElement(Ud.Item,{key:"questions"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," questions about your codebase."))),p.push(Ki.createElement(Ud.Item,{key:"changes"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," to implement changes to your codebase."))),p})())),!r&&s&&Ki.createElement(x,{borderColor:ee().secondaryBorder,flexDirection:"column",marginRight:1},Ki.createElement(x,{flexDirection:"column",gap:0},Ki.createElement(x,{marginBottom:1},Ki.createElement(C,null,"\u{1F195} What's new in v",MACRO.VERSION,":")),Ki.createElement(x,{flexDirection:"column",marginLeft:1},i.map((p,f)=>Ki.createElement(C,{key:f,color:ee().secondaryText},"\u2022 ",p))))),e===cFn()&&Ki.createElement(C,{color:ee().warning},"Note: You have launched ",Ki.createElement(C,{bold:!0},et)," in your home directory. For the best experience, launch it in a project directory instead."))}var WF=F(ne(),1);var zF=F(ne(),1);var CV=F(ne(),1);function NPe({isFocused:e,isSelected:t,smallPointer:r,children:n}){let{styles:o}=ms("Select");return CV.default.createElement(x,{...o.option({isFocused:e})},e&&CV.default.createElement(C,{...o.focusIndicator()},r?Jr.triangleDownSmall:Jr.pointer),CV.default.createElement(C,{...o.label({isFocused:e,isSelected:t})},n),t&&CV.default.createElement(C,{...o.selectedIndicator()},Jr.tick))}var Wm=F(ne(),1);import{isDeepStrictEqual as uFn}from"node:util";var IV=class extends Map{first;constructor(t){let r=[],n,o,i=0;for(let s of t){let a={...s,previous:o,next:void 0,index:i};o&&(o.next=a),n||=a;let c="value"in s?s.value:DPe(s);r.push([c,a]),i++,o=a}super(r),this.first=n}};var dFn=(e,t)=>{switch(t.type){case"focus-next-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.next;for(;n&&!("value"in n);)n=n.next;if(!n)return e;if(!(n.index>=e.visibleToIndex))return{...e,focusedValue:n.value};let i=Math.min(e.optionMap.size,e.visibleToIndex+1),s=i-e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:s,visibleToIndex:i}}case"focus-previous-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.previous;for(;n&&!("value"in n);)n=n.previous;if(!n)return e;if(!(n.index<=e.visibleFromIndex))return{...e,focusedValue:n.value};let i=Math.max(0,e.visibleFromIndex-1),s=i+e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:i,visibleToIndex:s}}case"select-focused-option":return{...e,previousValue:e.value,value:e.focusedValue};case"reset":return t.state;case"set-focus":return{...e,focusedValue:t.value}}},OPe=e=>e.flatMap(t=>{if("options"in t){let r=OPe(t.options),n=r.flatMap(i=>"value"in i?i.value:[]);return[...t.header!==void 0?[{header:t.header,optionValues:n}]:[],...r]}return t}),lGt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=OPe(r),o=typeof e=="number"?Math.min(e,n.length):n.length,i=new IV(n),s=i.first,a=s&&"value"in s?s.value:void 0;return{optionMap:i,visibleOptionCount:o,focusedValue:a,visibleFromIndex:0,visibleToIndex:o,previousValue:t,value:t}},BPe=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n,onFocus:o,focusValue:i})=>{let s=OPe(t),[a,c]=(0,Wm.useReducer)(dFn,{visibleOptionCount:e,defaultValue:r,options:t},lGt),[l,u]=(0,Wm.useState)(s);s!==l&&!uFn(s,l)&&(c({type:"reset",state:lGt({visibleOptionCount:e,defaultValue:r,options:t})}),u(s));let d=(0,Wm.useCallback)(()=>{c({type:"focus-next-option"})},[]),p=(0,Wm.useCallback)(()=>{c({type:"focus-previous-option"})},[]),f=(0,Wm.useCallback)(()=>{c({type:"select-focused-option"})},[]),A=(0,Wm.useMemo)(()=>s.map((h,E)=>({...h,index:E})).slice(a.visibleFromIndex,a.visibleToIndex),[s,a.visibleFromIndex,a.visibleToIndex]);return(0,Wm.useEffect)(()=>{a.value&&a.previousValue!==a.value&&n?.(a.value)},[a.previousValue,a.value,t,n]),(0,Wm.useEffect)(()=>{a.focusedValue&&o?.(a.focusedValue)},[a.focusedValue,o]),(0,Wm.useEffect)(()=>{i&&c({type:"set-focus",value:i})},[i]),{focusedValue:a.focusedValue,visibleFromIndex:a.visibleFromIndex,visibleToIndex:a.visibleToIndex,value:a.value,visibleOptions:A,focusNextOption:d,focusPreviousOption:p,selectFocusedOption:f}};var MPe=({isDisabled:e=!1,state:t})=>{Ct((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};var DPe=e=>`HEADER-${e.optionValues.join(",")}`;function vC({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a}){let c=BPe({visibleOptionCount:t,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a});MPe({isDisabled:e,state:c});let{styles:l}=ms("Select");return zF.default.createElement(x,{...l.container()},c.visibleOptions.map(u=>{let d="value"in u?u.value:DPe(u),p=!e&&c.focusedValue!==void 0&&("value"in u?c.focusedValue===u.value:u.optionValues.includes(c.focusedValue)),f=!!c.value&&("value"in u?c.value===u.value:u.optionValues.includes(c.value)),A="header"in u,h="label"in u?u.label:u.header,E=h;if(r&&h.includes(r)){let S=h.indexOf(r);E=zF.default.createElement(zF.default.Fragment,null,h.slice(0,S),zF.default.createElement(C,{...l.highlightedText()},r),h.slice(S+r.length))}return zF.default.createElement(NPe,{key:d,isFocused:p,isSelected:f,smallPointer:A},E)}))}function uGt({onDone:e}){return Ct((t,r)=>{(r.ctrl&&(t==="c"||t==="d")||r.escape)&&e()}),WF.default.createElement(x,{flexDirection:"column",borderStyle:"round",padding:1,borderColor:ee().secondaryBorder},WF.default.createElement(x,{marginBottom:1,flexDirection:"column"},WF.default.createElement(C,{bold:!0},"You've spent $5 this session.")),WF.default.createElement(x,null,WF.default.createElement(vC,{options:[{value:"ok",label:"Got it, thanks!"}],onChange:e})))}var An=F(ne(),1),Kt=F(ne(),1);var Lp=F(ne(),1);Ge();sr();Cy();var mFn="2.4.10",Iy={VERSION:mFn,PACKAGE_URL:"@dahawa/hawa-code",README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var LPe=46,pGt=["(\u2740\u2579\u25E1\u2579)","(\u25D5\u072B\u25D5)","\u239D(\u25D5u\u25D5)\u23A0","\u10DA(\u25C9\u25DE\u0C6A\u25DF\u25C9 )\u10DA","(\xB4\u25C9\u203F\u25C9\uFF40)","\u0E01\u0E47\u0295\u2022\u0361\u1D25\u2022\u0294 \u0E01\u0E49","\uFF0F/( \u25D5\u203F\u203F\u25D5 )\uFF3C"];function Ede({isDefaultModel:e=!1}){let t=Math.max(LPe,Be().length+12),r=ee(),n=pGt[Math.floor(Math.random()*pGt.length)];return Lp.createElement(x,{flexDirection:"column"},Lp.createElement(x,{flexDirection:"column",gap:1,paddingLeft:1,width:"100%"},Lp.createElement(C,null,Lp.createElement(C,null,n)," Welcome to"," ",Lp.createElement(C,{bold:!0},et),Lp.createElement(C,{color:r.secondaryText}," v",Iy.VERSION)),Lp.createElement(Lp.Fragment,null,Lp.createElement(x,{paddingLeft:2,flexDirection:"column",gap:1},Lp.createElement(C,{color:r.secondaryText,italic:!0},"/help for help"),Lp.createElement(C,{color:r.secondaryText},"cwd: ",Be()),Lp.createElement(C,{color:r.secondaryText},"model: ",bo.getConfig().routing.MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A"),Lp.createElement(C,{color:r.secondaryText},"small fast model: ",bo.getConfig().routing.SMALL_FAST_MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A")))))}var _S=F(ne(),1);Re();var LJ=F(ne(),1);import{randomUUID as gS}from"crypto";$s();Re();nr();sr();Re();Ge();import{existsSync as RC,readdirSync as L4n,statSync as Q4n}from"fs";import{join as sw,relative as U4n}from"path";import{homedir as F$t}from"os";import{platform as F4n}from"process";import{readFile as aw}from"fs/promises";sr();AE();Ar();import{join as SFn,sep as yFn}from"path";function Qp(){if(!Km())return!1;try{let e=nt();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Jm(){return(SFn(Be(),".hcode","team-memory")+yFn).normalize("NFC")}function hE(e){let t=e.normalize("NFC"),r=Jm();return t.startsWith(r)}var H$t=F(MV(),1);Xo();var P$t=F(MV(),1);sr();Ge();Re();Bp();import{readFile as M$t}from"fs/promises";import{existsSync as tLe,readdirSync as B4n,statSync as M4n}from"fs";import{join as rLe,relative as L$t}from"path";import{homedir as k4n}from"os";function k$t(e){try{let t=(0,P$t.default)(e),r=t.data.paths,n=[];return typeof r=="string"?n=r.split(",").map(o=>o.trim()).filter(Boolean):Array.isArray(r)&&(n=r.filter(o=>typeof o=="string")),{paths:n,content:t.content.trim()}}catch(t){return Se(t),{paths:[],content:e.trim()}}}function P4n(e,t){return t.length===0?!0:t.some(r=>{try{return Hd(e,r,{matchBase:!0,dot:!0})}catch(n){return Se(n),!1}})}function nLe(e){let t=[];try{if(!tLe(e))return t;let r=B4n(e);for(let n of r){let o=rLe(e,n),i=M4n(o);i.isDirectory()?t.push(...nLe(o)):i.isFile()&&n.endsWith(".md")&&t.push(o)}}catch(r){Se(r)}return t}async function Q$t(){let e=[];try{let t=rLe(k4n(),Fn,"rules");if(tLe(t)){let r=nLe(t);for(let n of r)try{let o=await M$t(n,"utf-8"),{paths:i,content:s}=k$t(o);i.length>0&&e.push({filePath:n,content:s,paths:i,isProjectRule:!1})}catch(o){Se(o)}}}catch(t){Se(t)}try{let t=rLe(Be(),Fn,"rules");if(tLe(t)){let r=nLe(t);for(let n of r)try{let o=await M$t(n,"utf-8"),{paths:i,content:s}=k$t(o);i.length>0&&e.push({filePath:L$t(Be(),n),content:s,paths:i,isProjectRule:!0})}catch(o){Se(o)}}}catch(t){Se(t)}return e}function U$t(e,t){e=tle(e);let r=tle(Be()),n=e.startsWith(r)?L$t(r,e):e;return t.filter(o=>P4n(n,o.paths))}var H4n=`# hawaCodeMd
|
|
679
679
|
Codebase and user instructions are shown below. Be sure to adhere to these instructions. IMPORTANT: These instructions OVERRIDE any default behavior and you MUST follow them exactly as written.`;function G4n(e="default"){let r=Ke.getSessionContext(e).getData("matchedPathRules");return!r||r.length===0?"":r.map(o=>{let i=o.isProjectRule?"project instructions, checked into the codebase":"user's private global instructions for all projects";return`Contents of ${o.filePath} (${i}):
|
|
680
680
|
|
|
681
681
|
${o.content}`}).join(`
|
|
@@ -773,7 +773,7 @@ data: ${JSON.stringify(H)}
|
|
|
773
773
|
Stack trace: `+d.stack)),new Response(c.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var lge=null,Q4e=!1;function Coo(){lge=null,Q4e=!1}kt.on("proxy:changed",Coo);function Ioo(){if(Q4e)return lge;if(Q4e=!0,nt().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(lge=new KZt.ProxyAgent({uri:e}),zt(`[proxy] using proxy: ${e}`)),lge}function voo(){let e=Ioo();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function dge(e){let t=e||process.env.API_TYPE,r=voo();switch(t){case"openai":return Soo(r);case"openai-responses":return yoo(r);case"gemini":return Too(r);default:return boo(r)}}Cy();var ZZt=F(ne(),1);function JZt(e,t){let r=[],n=Math.max(1,Math.floor(t)),o="",i=0;for(let s of e){let a=xoo(s);o&&i+a>n?(r.push(o),o=s,i=a):(o+=s,i+=a)}return o&&r.push(o),r}function xoo(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||woo(t)?0:Roo(t)?2:1}function woo(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function Roo(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 w0(e){if(e<6e4)return`${(e/1e3).toFixed(1)}s`;let t=Math.floor(e/36e5),r=Math.floor(e%36e5/6e4),n=(e%6e4/1e3).toFixed(1);return t>0?`${t}h ${r}m ${n}s`:r>0?`${r}m ${n}s`:`${n}s`}function H4e(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let r=Math.floor(t/3600),n=Math.floor(t%3600/60),o=t%60;return r>0?`${r}h ${n}m ${o}s`:`${n}m ${o}s`}function KC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}function fge(e,t,r){let n=[];return typeof e=="number"&&n.push(H4e(e)),typeof t=="number"&&n.push(`${t} ${t===1?"turn":"turns"}`),typeof r=="number"&&n.push(`${KC(r)} tokens`),n.length>0?` (${n.join(" \xB7 ")})`:""}Re();$s();var eu={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function pge(e,t){eu.totalCost+=e,eu.totalAPIDuration+=t}function mge(e,t){eu.inputTokens+=e,eu.outputTokens+=t,kt.emit("token:change",{inputTokens:eu.inputTokens,outputTokens:eu.outputTokens})}function gge(e,t){eu.cacheCreationTokens+=e,eu.cacheReadTokens+=t}function dM(){return{inputTokens:eu.inputTokens,outputTokens:eu.outputTokens,cacheCreationTokens:eu.cacheCreationTokens,cacheReadTokens:eu.cacheReadTokens}}function A9(){return eu.totalCost}function Age(){return Date.now()-eu.startTime}function XZt(){return eu.totalAPIDuration}function eXt(e){eu.currentContextTokens=e}function tXt(){return eu.currentContextTokens}function Noo(){return St.grey(`Total duration (API): ${w0(eu.totalAPIDuration)}
|
|
774
774
|
Total duration (wall): ${w0(Age())}`)}function rXt(){(0,ZZt.useEffect)(()=>{let e=()=>{process.stdout.write(`
|
|
775
775
|
`+Noo()+`
|
|
776
|
-
`);let t=Xn();ps({...t,lastCost:eu.totalCost,lastAPIDuration:eu.totalAPIDuration,lastDuration:Age(),lastSessionId:r0})};return process.on("exit",e),()=>{process.off("exit",e)}},[])}Re();Ge();Ge();var G4e="2.4.
|
|
776
|
+
`);let t=Xn();ps({...t,lastCost:eu.totalCost,lastAPIDuration:eu.totalAPIDuration,lastDuration:Age(),lastSessionId:r0})};return process.on("exit",e),()=>{process.off("exit",e)}},[])}Re();Ge();Ge();var G4e="2.4.10";globalThis.MACRO={VERSION:G4e,PACKAGE_URL:`@dahawa/${Ii}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var hge=process.env.HAWA_CODE_USER_AGENT||`${Ii}/${G4e} (${process.env.USER_TYPE})`;Re();Re();nr();function jf(e){let t=[];return e.filter(r=>r.type!=="progress"&&r.type!=="reminder").forEach(r=>{switch(r.type){case"user":{let n=Nf(t);if(n?.type==="user"){t[t.length-1]=Moo(n,r);return}t.push(r);return}case"assistant":t.push(r);return;case"insert":{let n=Nf(t);n?.type==="user"&&(t[t.length-1]=Doo(n,r));return}}}),t}function Doo(e,t){return{...e,message:{...e.message,content:Boo(e.message.content,Ooo(t.content.content))}}}function Ooo(e){return`
|
|
777
777
|
<system-reminder>
|
|
778
778
|
The user sent the following message:
|
|
779
779
|
${e}
|
|
@@ -2938,7 +2938,8 @@ Remember: DO NOT write or edit any files yet. This is a read-only exploration an
|
|
|
2938
2938
|
- ${Su} \u5E94\u8BE5\u5C3D\u91CF\u548C\u5176\u5B83\u5DE5\u5177\u540C\u65F6\u6267\u884C\uFF0C\u4ECE\u800C\u51CF\u5C11\u8BF7\u6C42\u6B21\u6570
|
|
2939
2939
|
- \u53EA\u80FD\u52A0\u8F7D <available_tools> \u63D0\u4F9B\u7684\u5DE5\u5177\u3002
|
|
2940
2940
|
- <loaded_tools> \u5DF2\u7ECF\u52A0\u8F7D\u7684\u5DE5\u5177\uFF0C\u5982\u679C\u5F53\u524D\u4EFB\u52A1\u4E0D\u9700\u8981\u53EF\u4EE5\u901A\u8FC7 ${yu} \u5378\u8F7D\u3002
|
|
2941
|
-
- <defalut_tools> \u65E0\u9700\u52A0\u8F7D\u76F4\u63A5\u53EF\u4EE5\u4F7F\u7528\u7684\u5DE5\u5177\uFF0C\u8FD9\u4E9B\u5DE5\u5177\u4E0D\u80FD\u5378\u8F7D
|
|
2941
|
+
- <defalut_tools> \u65E0\u9700\u52A0\u8F7D\u76F4\u63A5\u53EF\u4EE5\u4F7F\u7528\u7684\u5DE5\u5177\uFF0C\u8FD9\u4E9B\u5DE5\u5177\u4E0D\u80FD\u5378\u8F7D\u3002
|
|
2942
|
+
- \uFF01\u91CD\u8981 \u5982\u679C\u5DE5\u5177\u4E0D\u5728 <loaded_tools> \u548C <defalut_tools> \u4EE5\u5185\uFF0C\u4E0D\u8981\u76F4\u63A5\u4F7F\u7528\uFF0C\u5E94\u8BE5\u53BB\u52A0\u8F7D\u3002
|
|
2942
2943
|
`;Np();Xo();Ge();Ar();var mGo=Ye(()=>Q.strictObject({toolNames:Q.array(Q.string()).describe("Array of tool names to be loaded")})),Lkr={name:ert,async description(){return kkr},async prompt({dangerouslySkipPermissions:e}={},t){let r=t?.options?._tools??await Rn.getTools(!1),n=r?r.filter(s=>s.name!==ert):[],o=Ke.getInQueryContext(t?.agentId)[qh];n=n.filter(s=>!(o?.has(s.name)||t0.includes(s.name)));let i=await Promise.all(n.map(async s=>`<tool><name>${s.name}</name><description>${s.isMcp?.()?s_e.getSimpleDescription(s.name):await s.description()}</description></tool>`)).then(s=>s.join(`
|
|
2943
2944
|
`));return`${Pkr}
|
|
2944
2945
|
<available_tools>
|
package/hands.js
CHANGED
|
@@ -484,7 +484,7 @@ ${l}. Members must communicate with each other using the ${Lp} tool`;if(n){c+=`
|
|
|
484
484
|
Warning: Team "${r}" has ${f.length} active ${g}, so it cannot be deleted.`}c+=`
|
|
485
485
|
|
|
486
486
|
You don't need to keep checking on the team's tool progress\u2014members will notify you when they complete their tasks. Continue with other work or respond to the user instead`}return[this.createReminderMessage("agent_team","task","medium",c,s,!0)]}getContextOptimizationReminder(t,r,n){let i=ct.isMessageArchivingEnable(),o=ct.isMemoEnable();if(!i&&!o)return null;let s=r??t,a=i&&s?.some(b=>b.name===tc),l=o&&s?.some(b=>b.name===ZA);if(!a&&!l)return null;let c=t?.some(b=>b.name===tc),u=t?.some(b=>b.name===ZA),f=Date.now(),g=n?.percentUsed,m=.92*100,A=[];a&&($on()?A.push(c?`use ${tc} 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 ${tc} with ${gl} 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 ${tc} 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 ${tc} with ${gl} 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 ${ZA} to persist long analysis conclusions, plans, or error records to keep them out of the context window while remaining retrievable later`:`load ${ZA} with ${gl} 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(`${tc} and ${ZA} 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(b=>`- ${b}`).join(`
|
|
487
|
-
`)}`;return this.createReminderMessage("message_archiving_context","performance","medium",_,f,!0)}async getToolLazy(t,r,n,i){if(!(ct.isLazyToolEnable()&&i===!0))return null;let o=n??await an.getTools(!1),s=r?.map(S=>S.name)??[],a=new Set(s),l=o.filter(S=>!_g.includes(S.name)&&!a.has(S.name)).map(S=>S.name),c=o.some(S=>S.name===gl),u=o.some(S=>S.name===Al),f=!process.env.HAWA_CODE_SHOW_LAZY_TOOL_METHOD||(process.env.HAWA_CODE_SHOW_LAZY_TOOL_METHOD+"").toLowerCase()==="true",g=c?`Load them with ${gl} if needed; call it in parallel with other tools when possible.`:"",m=c
|
|
487
|
+
`)}`;return this.createReminderMessage("message_archiving_context","performance","medium",_,f,!0)}async getToolLazy(t,r,n,i){if(!(ct.isLazyToolEnable()&&i===!0))return null;let o=n??await an.getTools(!1),s=r?.map(S=>S.name)??[],a=new Set(s),l=o.filter(S=>!_g.includes(S.name)&&!a.has(S.name)).map(S=>S.name),c=o.some(S=>S.name===gl),u=o.some(S=>S.name===Al),f=!process.env.HAWA_CODE_SHOW_LAZY_TOOL_METHOD||(process.env.HAWA_CODE_SHOW_LAZY_TOOL_METHOD+"").toLowerCase()==="true",g=c?`Load them with ${gl} if needed; call it in parallel with other tools when possible.`:"",m=c?`\u5982\u679C\u5DE5\u5177\u4E0D\u5728 <loaded_tools> \u548C <defalut_tools> \u4EE5\u5185\uFF0C\u4E0D\u8981\u76F4\u63A5\u4F7F\u7528\uFF0C\u5E94\u8BE5\u53BB\u52A0\u8F7D\uFF0C Load tools with ${gl} if needed; call it in parallel with other tools when possible.`:"",A=u?`Unload tools you no longer need with ${Al}; call it in parallel with other tools when possible. You do not need to unload if you are returning results to the user.`:"",E=`Not yet loaded tools : ${l.length?l.join(", ")+". "+g:"none."} Loaded tools: ${s.length?s.join(", ")+". "+A:"none."}.`,_=`${l.length>0?m:""} ${s.length>0?A:""}.`,b=f?E:_;return[this.createReminderMessage("tool","general","high",b,Date.now(),f)]}getRecalledMemories(t){let n=Je.getQueryContext(t).recalledMemories;if(!n||n.length===0)return null;let i=Date.now(),s=`The following memories were recalled and may be relevant to the current task. Use them only if they are helpful:
|
|
488
488
|
|
|
489
489
|
${n.map(a=>`## ${a.path.split(/[\\/]/).pop()||a.path}
|
|
490
490
|
${a.content}`).join(`
|
|
@@ -756,7 +756,7 @@ data: ${JSON.stringify(z)}
|
|
|
756
756
|
`);a=P.pop()||"";for(let z of P){let Y=z.trim();if(!(!Y||Y==="data: [DONE]"))if(Y.startsWith("data: ")){let Q=Y.slice(6);try{let G=JSON.parse(Q);w(G)}catch(G){this.logger&&this.logger.error({err:G,line:Y},"Failed to parse Gemini SSE chunk")}}else try{let Q=JSON.parse(Y);w(Q)}catch{}}};(async()=>{try{for(;;){let{value:P,done:z}=await s.read();if(z)break;a+=n.decode(P,{stream:!0}),O()}I()}catch(P){o.error(P)}})()}})}convertGeminiResponseToAnthropic(t){this.logger&&this.logger.debug({response:t},"Original Gemini response");try{if(!t.candidates||!t.candidates[0])throw new Error("No candidates found in Gemini response");let r=t.candidates[0],n=[];r.content&&r.content.parts&&r.content.parts.forEach(o=>{if(o.text&&n.push({type:"text",text:o.text}),o.functionCall){let s=`toolu_${LB()}`,a=o.functionCall.thoughtSignature||o.functionCall.thought_signature||null;n.push({type:"tool_use",id:s,name:o.functionCall.name,input:o.functionCall.args||{},thought_signature:a})}}),r.groundingMetadata&&(this.logger&&this.logger.debug({groundingMetadata:r.groundingMetadata},"Processing grounding metadata"),r.groundingMetadata.webSearchQueries&&n.push({type:"text",text:`
|
|
757
757
|
|
|
758
758
|
[Search queries used: ${r.groundingMetadata.webSearchQueries.join(", ")}]`}));let i={id:`msg_${Math.random().toString(36).slice(2)}`,type:"message",role:"assistant",model:t.modelVersion||"gemini",content:n,stop_reason:r.finishReason?r.finishReason==="STOP"&&n.some(o=>o.type==="tool_use")?"tool_use":this.mapGeminiFinishReason(r.finishReason):"end_turn",stop_sequence:null,usage:{input_tokens:t.usageMetadata?.promptTokenCount||0,output_tokens:t.usageMetadata?.candidatesTokenCount||0}};return this.logger&&this.logger.debug({result:i},"Conversion complete, final Anthropic response"),i}catch{throw E6r(`Provider error: ${JSON.stringify(t)}`,500,"provider_error")}}mapGeminiFinishReason(t){switch(t){case"STOP":return"end_turn";case"MAX_TOKENS":return"max_tokens";case"SAFETY":case"RECITATION":return"stop_sequence";default:return"end_turn"}}},sbe=new obe;var Qmt=X(Omt(),1);ar();us();function Pg(e){return e?typeof e.entries=="function"?Object.fromEntries(e.entries()):{...e}:{}}function kmt(e){let t=String(e?.["x-thinking-level"]??"medium").toLowerCase();return["off","low","medium","high"].includes(t)?t:"medium"}function Ben(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t}}function Oen(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t,summary:"auto"}}function ken(e,t="chat"){let r={request:{},response:{},openai:{request:{},response:{}}};return r.request.model=e.request.body.model,r.request.messages=e.request.body.messages,r.request.system=e.request.body.system,r.response.content=e.response.body.content,t==="responses"?(r.openai.request.model=e.openai.request.body.model,r.openai.request.input=e.openai.request.body.input,r.openai.response.output=e.openai.response.body?.output):(r.openai.request.model=e.openai.request.body.model,r.openai.request.messages=e.openai.request.body.messages,r.openai.response.choices=e.openai.response.body.choices),r}function M5(e,t,r){Iz(t,e),Tz(t,ken(e,r),r)}function v2(e){let t=[],r=e.getReader(),n,i=new Promise(l=>n=l),o=!1,s=()=>{o||(o=!0,n(Buffer.concat(t).toString("utf8")))};return{stream:new ReadableStream({async pull(l){try{let{done:c,value:u}=await r.read();if(c){l.close(),s();return}t.push(u),l.enqueue(u)}catch(c){l.error(c),s()}},cancel(l){r.cancel(l).catch(()=>{}),s()}}),done:i}}function Q5(e){let t=new Headers(e);return t.delete("content-encoding"),t.delete("content-length"),t.delete("transfer-encoding"),t}function kIe(e,t,r,n,i){let o;try{o={type:"error",error:{type:"api_error",message:JSON.parse(i).error?.message??`${e}: ${n}`,code:`${t}_${r}_ERROR`}}}catch{o={type:"error",error:{type:"api_error",message:`${e}: ${n}`,code:`${t}_${r}_ERROR`}}}return new Response(JSON.stringify(o),{status:r,statusText:n,headers:{"Content-Type":"application/json"}})}var Mmt=["/v1/messages"];function MIe(e){let t;try{typeof e=="string"?t=new Ev(e):e instanceof Ev?t=e:t=new Ev(e.url)}catch{return""}let r=t.pathname;for(let n of Mmt){let i=r.indexOf(n);if(i!==-1)return t.origin+r.slice(0,i)}return t.origin}function PZ(e,t){let r=typeof e=="string"?e:e instanceof Ev?e.toString():e.url,n;try{n=new Ev(r).pathname}catch{return!1}return Mmt.some(i=>n.includes(i))&&(t.method==="POST"||t.method==="post")}function Men(e){return async(t,r)=>{if(!PZ(t,r))return e(t,r);let n=JSON.parse(r.body),i=await LK.transformRequestOut(n),o=MIe(t)+"/chat/completions",s=Pg(r.headers),a=s.authorization??s.Authorization??"";Ben(i,kmt(s));let l=await e(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:a},body:JSON.stringify(i),signal:r.signal});if(!l.ok){let _=await l.text();return J(`OpenAI Chat Completions API error: ${l.status}`,{url:o,errorResponse:_}),kIe("OpenAI Chat Completions API error","OPENROUTER",l.status,l.statusText,_)}let c=n.stream===!0,u=s["x-agent-id"],f={request:{url:o,method:r.method,headers:s,body:n},response:{status:l.status,statusText:l.statusText,headers:Pg(l.headers)},openai:{request:{body:i},response:{}}};if(!c){let _=await l.text(),b=new Response(_,{status:l.status,statusText:l.statusText,headers:Q5(l.headers)}),S=await LK.transformResponseIn(b,n),I=await S.text();try{M5({...f,openai:{...f.openai,response:{body:JSON.parse(_)}},response:{...f.response,body:JSON.parse(I)}},u)}catch(w){J("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Chat \u975E\u6D41\u5F0F):",w)}return new Response(I,{status:S.status,statusText:S.statusText,headers:S.headers})}let g=v2(l.body),m=new Response(g.stream,{status:l.status,statusText:l.statusText,headers:Q5(l.headers)}),A=await LK.transformResponseIn(m,n),E=v2(A.body);return Promise.all([g.done,E.done]).then(async([_,b])=>{try{M5({...f,openai:{...f.openai,response:{body:await cot(_)}},response:{...f.response,body:await xU(b)}},u)}catch(S){J("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Chat \u6D41\u5F0F):"+S?.stack)}}).catch(_=>J("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Chat):"+_)),new Response(E.stream,{status:A.status,statusText:A.statusText,headers:A.headers})}}function Qen(e){return async(t,r)=>{if(!PZ(t,r))return e(t,r);let n=JSON.parse(r.body),i=await FK.transformRequestOut(n),o=Pg(r.headers);Oen(i,kmt(o));let s=JSON.stringify(i),l=MIe(t)+"/responses",c=o.authorization??o.Authorization??"";if(!c)return new Response(JSON.stringify({type:"error",error:{type:"api_error",message:"Missing Authorization header",code:"RESPONSES_AUTH_MISSING"}}),{status:401,headers:{"Content-Type":"application/json"}});let u=await e(l,{method:"POST",headers:{"Content-Type":"application/json",Authorization:c,"x-api-key":c.replace(/^Bearer\s+/i,"").trim()},body:s,signal:r.signal});if(!u.ok){let S=await u.text();return J(`OpenAI Responses API error: ${u.status} ${u.statusText}`,{url:l,status:u.status,errorResponse:S}),kIe("OpenAI Responses API error","RESPONSES",u.status,u.statusText,S)}let f=n.stream===!0,g=o["x-agent-id"],m={request:{url:l,method:r.method,headers:o,body:n},response:{status:u.status,statusText:u.statusText,headers:Pg(u.headers)},openai:{request:{body:i},response:{}}};if(!f){let S=await u.text(),I=new Response(S,{status:u.status,statusText:u.statusText,headers:Q5(u.headers)}),w=await FK.transformResponseIn(I,n),O=await w.text();try{M5({...m,openai:{...m.openai,response:{body:JSON.parse(S)}},response:{...m.response,body:JSON.parse(O)}},g,"responses")}catch(P){J("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u975E\u6D41\u5F0F):",P)}return new Response(O,{status:w.status,statusText:w.statusText,headers:w.headers})}let A=v2(u.body),E=new Response(A.stream,{status:u.status,statusText:u.statusText,headers:Q5(u.headers)}),_=await FK.transformResponseIn(E,n),b=v2(_.body);return Promise.all([A.done,b.done]).then(async([S,I])=>{try{M5({...m,openai:{...m.openai,response:{body:await lot(S)}},response:{...m.response,body:await xU(I)}},g,"responses")}catch(w){J("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u6D41\u5F0F):"+w?.stack)}}).catch(S=>J("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Responses):"+S)),new Response(b.stream,{status:_.status,statusText:_.statusText,headers:_.headers})}}function Pen(e){return async(t,r)=>{if(!PZ(t,r))return e(t,r);let n=JSON.parse(r.body),i=Pg(r.headers),o=await sbe.transformRequestOut(n),s=JSON.stringify(o),a=MIe(t)+`/models/${n.model}:streamGenerateContent?alt=sse`,l=i.authorization??i.Authorization??"",c;try{c=await e(a,{method:"POST",headers:{"Content-Type":"application/json","x-goog-api-key":String(l).replace(/^Bearer\s+/i,"").trim()},body:s,signal:r.signal})}catch(b){throw J("gemini request error:",b),b}if(!c.ok){let b=await c.text();return J(`Gemini API error response: ${c.status} ${c.statusText}`,{url:a,status:c.status,errorResponse:b}),kIe("Gemini API error","Gemini",c.status,c.statusText,b)}let u=n.stream===!0,f=i["x-agent-id"],g={request:{url:a,method:r.method,headers:Pg(r.headers),body:n},response:{status:c.status,statusText:c.statusText,headers:Pg(c.headers)},openai:{request:{body:o},response:{}}},m=v2(c.body),A=new Response(m.stream,{status:c.status,statusText:c.statusText,headers:Q5(c.headers)}),E=await sbe.transformResponseIn(A),_=v2(E.body);return Promise.all([m.done,_.done]).then(async([b,S])=>{try{let I=u?uot(b):JSON.parse(b),w=u?await xU(S):JSON.parse(S);M5({...g,openai:{...g.openai,response:{body:I}},response:{...g.response,body:w}},f)}catch(I){J("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Gemini):"+I?.stack)}}).catch(b=>J("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Gemini):"+b)),new Response(_.stream,{status:E.status,statusText:E.statusText,headers:E.headers})}}function Len(e){return async(t,r)=>{if(!PZ(t,r))return e(t,r);let n=r.body;if(r.body)try{let f=JSON.parse(r.body);n=JSON.stringify(f)}catch{}let i=Pg(r.headers);["1","true"].includes(String(process.env.HAWA_CODE_X_API_KEY_DISABLED??"").toLowerCase())&&(delete i["x-api-key"],delete i["X-API-Key"]),["1","true"].includes(String(process.env.HAWA_CODE_AUTH_DISABLED??"").toLowerCase())&&(delete i.authorization,delete i.Authorization),delete i["content-length"];let a=await e(t,{method:r.method,headers:i,body:n,signal:r.signal});if(!a.ok){let f=await a.text();J(`API error response: ${a.status} ${a.statusText}`,{url:typeof t=="string"?t:t instanceof Ev?t.toString():t.url,status:a.status,errorResponse:f});let g;try{let m=JSON.parse(f);g={type:"error",error:{type:"api_error",message:m.error?.message||m.message||`API error: ${a.statusText}`,code:m.error?.code||m.code||`API_${a.status}_ERROR`}},m.error?.details&&(g.error.details=m.error.details)}catch{g={type:"error",error:{type:"api_error",message:`API error: ${a.statusText}`,code:`API_${a.status}_ERROR`}}}return new Response(JSON.stringify(g),{status:a.status,statusText:a.statusText,headers:{"Content-Type":"application/json"}})}let l=a.clone(),c=!(Object.hasOwn(JSON.parse(n),"stream")&&!JSON.parse(n).stream),u={request:{url:typeof t=="string"?t:t instanceof Ev?t.toString():t.url,method:r.method,headers:Pg(r.headers),body:JSON.parse(n)},response:{status:a.status,statusText:a.statusText,headers:Pg(a.headers)}};return(async()=>{if(c){let m=await a.text();u.response.body=await xU(m)}else u.response.body=await a.json();let g=Pg(r.headers)["x-agent-id"];Iz(g,u),Tz(g,{request:u.request.body.messages,response:u.response.body.content})})().catch(f=>J(`\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF:
|
|
759
|
-
Stack trace: `+f.stack)),new Response(l.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var QZ=null,OIe=!1;function Fen(){QZ=null,OIe=!1}pr.on("proxy:changed",Fen);function Uen(){if(OIe)return QZ;if(OIe=!0,lt().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(QZ=new Qmt.ProxyAgent({uri:e}),Kt(`[proxy] using proxy: ${e}`)),QZ}function Hen(){let e=Uen();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function LZ(e){let t=e||process.env.API_TYPE,r=Hen();switch(t){case"openai":return Men(r);case"openai-responses":return Qen(r);case"gemini":return Pen(r);default:return Len(r)}}ph();var zen=X(Ae(),1);function Pmt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=$en(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function $en(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||qen(t)?0:Gen(t)?2:1}function qen(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function Gen(e){return e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=128591||e>=129280&&e<=129535||e>=131072&&e<=262141)}function l_(e){if(e<6e4)return`${(e/1e3).toFixed(1)}s`;let t=Math.floor(e/36e5),r=Math.floor(e%36e5/6e4),n=(e%6e4/1e3).toFixed(1);return t>0?`${t}h ${r}m ${n}s`:r>0?`${r}m ${n}s`:`${n}s`}function YC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}ke();us();var fc={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function FZ(e,t){fc.totalCost+=e,fc.totalAPIDuration+=t}function UZ(e,t){fc.inputTokens+=e,fc.outputTokens+=t,pr.emit("token:change",{inputTokens:fc.inputTokens,outputTokens:fc.outputTokens})}function HZ(e,t){fc.cacheCreationTokens+=e,fc.cacheReadTokens+=t}function QIe(){return{inputTokens:fc.inputTokens,outputTokens:fc.outputTokens,cacheCreationTokens:fc.cacheCreationTokens,cacheReadTokens:fc.cacheReadTokens}}function Lmt(){return fc.totalCost}function Fmt(){return Date.now()-fc.startTime}function Umt(){return fc.totalAPIDuration}function Hmt(e){fc.currentContextTokens=e}function $mt(){return fc.currentContextTokens}ke();$e();$e();var PIe="2.4.
|
|
759
|
+
Stack trace: `+f.stack)),new Response(l.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var QZ=null,OIe=!1;function Fen(){QZ=null,OIe=!1}pr.on("proxy:changed",Fen);function Uen(){if(OIe)return QZ;if(OIe=!0,lt().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(QZ=new Qmt.ProxyAgent({uri:e}),Kt(`[proxy] using proxy: ${e}`)),QZ}function Hen(){let e=Uen();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function LZ(e){let t=e||process.env.API_TYPE,r=Hen();switch(t){case"openai":return Men(r);case"openai-responses":return Qen(r);case"gemini":return Pen(r);default:return Len(r)}}ph();var zen=X(Ae(),1);function Pmt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=$en(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function $en(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||qen(t)?0:Gen(t)?2:1}function qen(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function Gen(e){return e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=128591||e>=129280&&e<=129535||e>=131072&&e<=262141)}function l_(e){if(e<6e4)return`${(e/1e3).toFixed(1)}s`;let t=Math.floor(e/36e5),r=Math.floor(e%36e5/6e4),n=(e%6e4/1e3).toFixed(1);return t>0?`${t}h ${r}m ${n}s`:r>0?`${r}m ${n}s`:`${n}s`}function YC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}ke();us();var fc={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function FZ(e,t){fc.totalCost+=e,fc.totalAPIDuration+=t}function UZ(e,t){fc.inputTokens+=e,fc.outputTokens+=t,pr.emit("token:change",{inputTokens:fc.inputTokens,outputTokens:fc.outputTokens})}function HZ(e,t){fc.cacheCreationTokens+=e,fc.cacheReadTokens+=t}function QIe(){return{inputTokens:fc.inputTokens,outputTokens:fc.outputTokens,cacheCreationTokens:fc.cacheCreationTokens,cacheReadTokens:fc.cacheReadTokens}}function Lmt(){return fc.totalCost}function Fmt(){return Date.now()-fc.startTime}function Umt(){return fc.totalAPIDuration}function Hmt(e){fc.currentContextTokens=e}function $mt(){return fc.currentContextTokens}ke();$e();$e();var PIe="2.4.10";globalThis.MACRO={VERSION:PIe,PACKAGE_URL:`@dahawa/${Ki}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var $Z=process.env.HAWA_CODE_USER_AGENT||`${Ki}/${PIe} (${process.env.USER_TYPE})`;import{randomUUID as hy}from"crypto";us();ke();Zt();_r();ke();$e();import{existsSync as p_,readdirSync as pin,statSync as min}from"fs";import{join as KC,relative as gin}from"path";import{homedir as pht}from"os";import{platform as Ain}from"process";import{readFile as JC}from"fs/promises";_r();Lg();ar();import{join as Ken,sep as Jen}from"path";function mm(){if(!pm())return!1;try{let e=lt();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function jf(){return(Ken(Be(),".hcode","team-memory")+Jen).normalize("NFC")}function u_(e){let t=e.normalize("NFC"),r=jf();return t.startsWith(r)}var mht=X(z5(),1);Qi();var cht=X(z5(),1);_r();$e();ke();Su();import{readFile as aht}from"fs/promises";import{existsSync as eTe,readdirSync as cin,statSync as uin}from"fs";import{join as tTe,relative as uht}from"path";import{homedir as din}from"os";function lht(e){try{let t=(0,cht.default)(e),r=t.data.paths,n=[];return typeof r=="string"?n=r.split(",").map(i=>i.trim()).filter(Boolean):Array.isArray(r)&&(n=r.filter(i=>typeof i=="string")),{paths:n,content:t.content.trim()}}catch(t){return ve(t),{paths:[],content:e.trim()}}}function fin(e,t){return t.length===0?!0:t.some(r=>{try{return lc(e,r,{matchBase:!0,dot:!0})}catch(n){return ve(n),!1}})}function rTe(e){let t=[];try{if(!eTe(e))return t;let r=cin(e);for(let n of r){let i=tTe(e,n),o=uin(i);o.isDirectory()?t.push(...rTe(i)):o.isFile()&&n.endsWith(".md")&&t.push(i)}}catch(r){ve(r)}return t}async function dht(){let e=[];try{let t=tTe(din(),Xr,"rules");if(eTe(t)){let r=rTe(t);for(let n of r)try{let i=await aht(n,"utf-8"),{paths:o,content:s}=lht(i);o.length>0&&e.push({filePath:n,content:s,paths:o,isProjectRule:!1})}catch(i){ve(i)}}}catch(t){ve(t)}try{let t=tTe(Be(),Xr,"rules");if(eTe(t)){let r=rTe(t);for(let n of r)try{let i=await aht(n,"utf-8"),{paths:o,content:s}=lht(i);o.length>0&&e.push({filePath:uht(Be(),n),content:s,paths:o,isProjectRule:!0})}catch(i){ve(i)}}}catch(t){ve(t)}return e}function fht(e,t){e=bV(e);let r=bV(Be()),n=e.startsWith(r)?uht(r,e):e;return t.filter(i=>fin(n,i.paths))}var hin=`# hawaCodeMd
|
|
760
760
|
Codebase and user instructions are shown below. Be sure to adhere to these instructions. IMPORTANT: These instructions OVERRIDE any default behavior and you MUST follow them exactly as written.`;function Ein(e="default"){let r=Je.getSessionContext(e).getData("matchedPathRules");return!r||r.length===0?"":r.map(i=>{let o=i.isProjectRule?"project instructions, checked into the codebase":"user's private global instructions for all projects";return`Contents of ${i.filePath} (${o}):
|
|
761
761
|
|
|
762
762
|
${i.content}`}).join(`
|
|
@@ -1128,7 +1128,7 @@ You are powered by the model ${e}.`}async function Jv(){return j5()?`gitStatus:
|
|
|
1128
1128
|
<context name="${c}">${u}</context>`;let s=i.map(c=>{let u=c.prompt({},t),f=JSON.stringify("inputJSONSchema"in c&&c.inputJSONSchema?c.inputJSONSchema:hI(c.inputSchema));return{name:c.name,description:`${u}
|
|
1129
1129
|
|
|
1130
1130
|
Schema:
|
|
1131
|
-
${f}`}}),{messages:a}=t,l=qln(o);return Gln(o,l,s,a)}},uyt=zln;Hg();var Mu=X(Ae(),1),fO=X(Ae(),1);ke();ke();import{existsSync as jln,readdirSync as Yln,statSync as Vln}from"fs";import{join as Wln}from"path";function Kln(){let e=Ji.plan();if(!jln(e))return[];try{return Yln(e).filter(r=>r.endsWith(".md")).map(r=>{let n=Wln(e,r),i=Vln(n);return{name:r,path:n,modified:i.mtime}}).sort((r,n)=>n.modified.getTime()-r.modified.getTime())}catch{return[]}}var dyt=({onSelect:e})=>{let[t,r]=(0,fO.useState)([]),[n,i]=(0,fO.useState)(0),[o,s]=(0,fO.useState)(!1);(0,fO.useEffect)(()=>{let c=Kln();r(c),s(!0)},[]);let a=[{label:"New plan",value:"__NEW_PLAN__",isNew:!0},...t.map(c=>({label:c.name,value:c.path,isNew:!1,modified:c.modified}))];vr((c,u)=>{if(u.upArrow)i(f=>f>0?f-1:a.length-1);else if(u.downArrow)i(f=>f<a.length-1?f+1:0);else if(u.return){let f=a[n];f&&e(f.value)}else u.escape&&e("__CANCELLED__")});let l=Pe();return o?Mu.createElement(N,{flexDirection:"column",marginY:1},Mu.createElement(N,{marginBottom:1},Mu.createElement(v,{bold:!0,color:l.claude},"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")),Mu.createElement(N,{marginBottom:1},Mu.createElement(v,{bold:!0,color:l.claude}," Select a plan to continue, or create a new one")),a.map((c,u)=>{let f=u===n;return Mu.createElement(N,{key:c.isNew?"new":c.value,flexDirection:"row",marginLeft:2},Mu.createElement(v,{color:f?l.claude:l.text},f?"\u276F":" "),Mu.createElement(v,{color:f?l.claude:l.text}," "),Mu.createElement(v,{color:f?l.claude:l.text,bold:c.isNew},c.isNew?c.label:c.label.replace(".md","")),!c.isNew&&c.modified&&Mu.createElement(v,{dimColor:!0}," ","(",Vge(c.modified),")"))}),Mu.createElement(N,{marginTop:1,marginLeft:2},Mu.createElement(v,{dimColor:!0},"\u2191/\u2193 to select \xB7 Enter to confirm \xB7 Esc to cancel"))):Mu.createElement(N,{flexDirection:"column",marginY:1},Mu.createElement(v,null,"Loading plan history..."))};var fyt=X(Ae(),1),Jln={type:"local-jsx",name:"plan",description:()=>"Enable plan mode",isEnabled:!0,isHidden:!1,disableCancel:!0,async call(e){return Ti.isPlanMode()?(e("Already in plan mode."),null):fyt.createElement(dyt,{onSelect:t=>{if(t==="__CANCELLED__"){e("Cancelled.");return}t&&t!=="__NEW_PLAN__"?Ti.setCurrentPlanFilePath(t):Ti.generatePlanFilePath(),Ti.setMode("plan",!0,!1),e("Enabled plan mode")}})},userFacingName(){return"plan"}},pyt=Jln;Hg();var Zln={type:"local",name:"auto",description:()=>"Enable auto mode",isEnabled:!0,isHidden:!1,async call(){return Ti.isAutoMode()?"Already in auto mode.":(Ti.setMode("auto",!0),"Enabled auto mode")},userFacingName(){return"auto"}},myt=Zln;_r();import{resolve as Xln}from"path";var ecn={type:"local",name:"cd",description:()=>"Move this session to a new working directory",isEnabled:!0,isHidden:!1,argNames:["path"],async call(e){let t=e.trim();if(t==="")throw new Error("Missing directory path. Usage: /cd <path>");let r=Be(),n=Xln(r,t);la(n);let i=Be();return i===r?`Already in ${i}.`:`Changed directory to ${i}/`},userFacingName(){return"cd"}},gyt=ecn;var jCt=X(Ae(),1);var Hn=X(Ae(),1);var Bcn=X(Ae(),1);var D9=X(Ae(),1),Dcn=X(_yt(),1);var yyt={info:"blue",success:"green",error:"red",warning:"yellow"},mcn={styles:{container:({variant:e})=>({flexGrow:1,borderStyle:"round",borderColor:yyt[e],gap:1,paddingX:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:yyt[e]}),content:()=>({flexShrink:1,flexGrow:1,minWidth:0,flexDirection:"column",gap:1}),title:()=>({bold:!0}),message:()=>({})},config({variant:e}){let t;return e==="info"&&(t=Qr.info),e==="success"&&(t=Qr.tick),e==="error"&&(t=Qr.cross),e==="warning"&&(t=Qr.warning),{icon:t}}},byt=mcn;var gcn={styles:{container:({color:e})=>({backgroundColor:e}),label:()=>({color:"black"})}},Cyt=gcn;var Acn={styles:{input:({isFocused:e})=>({dimColor:!e})}},Syt=Acn;var hcn={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})}},Iyt=hcn;var Ecn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})}},Tyt=Ecn;var _cn={styles:{container:()=>({flexGrow:1,minWidth:0}),completed:()=>({color:"magenta"}),remaining:()=>({dimColor:!0})},config:()=>({completedCharacter:Qr.square,remainingCharacter:Qr.squareLightShade})},vyt=_cn;var ycn={styles:{container:()=>({flexDirection:"column"}),option:({isFocused:e})=>({gap:1,paddingLeft:e?0:2}),selectedIndicator:()=>({color:"green"}),focusIndicator:()=>({color:"blue"}),label({isFocused:e,isSelected:t}){let r;return t&&(r="green"),e&&(r="blue"),{color:r}},highlightedText:()=>({bold:!0})}},xyt=ycn;var bcn={styles:{container:()=>({gap:1}),frame:()=>({color:"blue"}),label:()=>({})}},wyt=bcn;var Ccn={success:"green",error:"red",warning:"yellow",info:"blue"},Scn={success:Qr.tick,error:Qr.cross,warning:Qr.warning,info:Qr.info},Icn={styles:{container:()=>({gap:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:Ccn[e]}),message:()=>({})},config:({variant:e})=>({icon:Scn[e]})},Dyt=Icn;var Tcn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})},config:()=>({marker:Qr.line})},Ryt=Tcn;var vcn={styles:{value:()=>({})}},Nyt=vcn;var xcn={styles:{value:()=>({})}},Byt=xcn;var wcn={styles:{value:()=>({})}},Oyt=wcn;var Rcn={components:{Alert:byt,Badge:Cyt,ConfirmInput:Syt,MultiSelect:Iyt,OrderedList:Tyt,ProgressBar:vyt,Select:xyt,Spinner:wyt,StatusMessage:Dyt,UnorderedList:Ryt,TextInput:Nyt,EmailInput:Byt,PasswordInput:Oyt}},Ncn=(0,D9.createContext)(Rcn);var po=e=>(0,D9.useContext)(Ncn).components[e];var Ocn=X(Ae(),1);var C_=X(Ae(),1);var mO=X(Ae(),1);var kyt=X(Ae(),1);var R9=Qr.line;var iee=(0,kyt.createContext)({marker:R9});function Myt({children:e}){let{marker:t}=(0,mO.useContext)(iee),{styles:r}=po("UnorderedList");return mO.default.createElement(N,{...r.listItem()},mO.default.createElement(v,{...r.marker()},t),mO.default.createElement(N,{...r.content()},e))}var Qyt=X(Ae(),1),Uve=(0,Qyt.createContext)({depth:0});function kcn({children:e}){let{depth:t}=(0,C_.useContext)(Uve),{styles:r,config:n}=po("UnorderedList"),i=(0,C_.useMemo)(()=>({depth:t+1}),[t]),o=(0,C_.useMemo)(()=>{let{marker:s}=n();return typeof s=="string"?{marker:s}:Array.isArray(s)?{marker:s[t]??s.at(-1)??R9}:{marker:R9}},[n,t]);return C_.default.createElement(Uve.Provider,{value:i},C_.default.createElement(iee.Provider,{value:o},C_.default.createElement(N,{...r.list()},e)))}kcn.Item=Myt;var Qcn=X(Ae(),1);var Mcn=X(Ae(),1);var N9=X(Ae(),1);var gO=class extends Map{first;constructor(t){let r=[],n,i,o=0;for(let s of t){let a={...s,previous:i,next:void 0,index:o};i&&(i.next=a),n||=a,r.push([s.value,a]),o++,i=a}super(r),this.first=n}};var Pyt=X(Ae(),1);var AO=X(Ae(),1);var B9=X(Ae(),1);function Lyt({isFocused:e,isSelected:t,children:r}){let{styles:n}=po("Select");return B9.default.createElement(N,{...n.option({isFocused:e})},e&&B9.default.createElement(v,{...n.focusIndicator()},Qr.pointer),B9.default.createElement(v,{...n.label({isFocused:e,isSelected:t})},r),t&&B9.default.createElement(v,{...n.selectedIndicator()},Qr.tick))}var ym=X(Ae(),1);import{isDeepStrictEqual as Pcn}from"node:util";var Lcn=(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}},Fyt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=typeof e=="number"?Math.min(e,r.length):r.length,i=new gO(r);return{optionMap:i,visibleOptionCount:n,focusedValue:i.first?.value,visibleFromIndex:0,visibleToIndex:n,previousValue:t,value:t}},Uyt=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n})=>{let[i,o]=(0,ym.useReducer)(Lcn,{visibleOptionCount:e,defaultValue:r,options:t},Fyt),[s,a]=(0,ym.useState)(t);t!==s&&!Pcn(t,s)&&(o({type:"reset",state:Fyt({visibleOptionCount:e,defaultValue:r,options:t})}),a(t));let l=(0,ym.useCallback)(()=>{o({type:"focus-next-option"})},[]),c=(0,ym.useCallback)(()=>{o({type:"focus-previous-option"})},[]),u=(0,ym.useCallback)(()=>{o({type:"select-focused-option"})},[]),f=(0,ym.useMemo)(()=>t.map((g,m)=>({...g,index:m})).slice(i.visibleFromIndex,i.visibleToIndex),[t,i.visibleFromIndex,i.visibleToIndex]);return(0,ym.useEffect)(()=>{i.value&&i.previousValue!==i.value&&n?.(i.value)},[i.previousValue,i.value,t,n]),{focusedValue:i.focusedValue,visibleFromIndex:i.visibleFromIndex,visibleToIndex:i.visibleToIndex,value:i.value,visibleOptions:f,focusNextOption:l,focusPreviousOption:c,selectFocusedOption:u}};var Hyt=({isDisabled:e=!1,state:t})=>{vr((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};function hO({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:i,onChange:o}){let s=Uyt({visibleOptionCount:t,options:n,defaultValue:i,onChange:o});Hyt({isDisabled:e,state:s});let{styles:a}=po("Select");return AO.default.createElement(N,{...a.container()},s.visibleOptions.map(l=>{let c=l.label;if(r&&l.label.includes(r)){let u=l.label.indexOf(r);c=AO.default.createElement(AO.default.Fragment,null,l.label.slice(0,u),AO.default.createElement(v,{...a.highlightedText()},r),l.label.slice(u+r.length))}return AO.default.createElement(Lyt,{key:l.value,isFocused:!e&&s.focusedValue===l.value,isSelected:s.value===l.value},c)}))}var Fcn=X(Ae(),1);var $yt=X(Ae(),1);var Hcn=X(Ae(),1);var oee=X(Ae(),1);var Ucn=X(Ae(),1);var I2i=sr.inverse(" ");var jg=X(Ae(),1);var EO=X(Ae(),1);var qyt=X(Ae(),1);var see=(0,qyt.createContext)({marker:Qr.line});function aee({children:e}){let{marker:t}=(0,EO.useContext)(see),{styles:r}=po("OrderedList");return EO.default.createElement(N,{...r.listItem()},EO.default.createElement(v,{...r.marker()},t),EO.default.createElement(N,{...r.content()},e))}var Gyt=X(Ae(),1),Hve=(0,Gyt.createContext)({marker:""});function Yg({children:e}){let{marker:t}=(0,jg.useContext)(Hve),{styles:r}=po("OrderedList"),n=0;for(let o of jg.default.Children.toArray(e))!(0,jg.isValidElement)(o)||o.type!==aee||n++;let i=String(n).length;return jg.default.createElement(N,{...r.list()},jg.default.Children.map(e,(o,s)=>{if(!(0,jg.isValidElement)(o)||o.type!==aee)return o;let a=`${String(s+1).padStart(i)}.`,l=`${t}${a}`;return jg.default.createElement(Hve.Provider,{value:{marker:l}},jg.default.createElement(see.Provider,{value:{marker:l}},o))}))}Yg.Item=aee;var qcn=X(Ae(),1);var $ve=X(Ae(),1);var $cn=X(Ae(),1);var X2i=sr.inverse(" ");var Gcn=X(Ae(),1);var zcn=X(Ae(),1);var Ycn=X(Ae(),1);var lee=X(Ae(),1);var jcn=X(Ae(),1);var SOi=sr.inverse(" ");var $i=X(Ae(),1);var qve=X(Ae(),1),Gve=X(Ae(),1);V5();us();Qi();Fv();ar();var zyt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function Zv(){let e=[...zyt,...[...zyt].reverse()],{frame:t}=gR({interval:120});return qve.createElement(N,{flexWrap:"nowrap",height:1,width:2},qve.createElement(v,{color:Pe().claude},e[t%e.length]))}var dee=X(Ae(),1);var uee=null,S_=null,cee=new Set;function jve(e){let{columns:t,rows:r}=e;if(t&&r)return{columns:t,rows:r};let n=Qpe();return{columns:t||n.columns||80,rows:r||n.rows||24}}function zve(){S_&&(uee=jve(S_),cee.forEach(e=>e(uee)))}function Vcn(e,t){return S_!==e&&(S_&&S_.off("resize",zve),S_=e,uee=jve(e),e.on("resize",zve)),cee.add(t),()=>{cee.delete(t),cee.size===0&&S_&&(S_.off("resize",zve),S_=null,uee=null)}}function Yve(){let{stdout:e}=mR(),[t,r]=(0,dee.useState)(()=>jve(e));return(0,dee.useEffect)(()=>Vcn(e,r),[e]),t}function _O(){return Yve()}$e();If();ke();lh();ke();var fMi=X(mxe(),1);import{homedir as H9}from"os";import{join as CO}from"path";import{existsSync as $9,mkdirSync as kCt,appendFileSync as OCt,readFileSync as MCt,constants as zfn,writeFileSync as jfn,unlinkSync as QCt,statSync as Yfn}from"fs";import{platform as PCt}from"process";import{accessSync as Vfn}from"fs";var Gfn="2.4.8",U9={VERSION:Gfn,PACKAGE_URL:"@dahawa/hawa-code",README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};$e();var ex=CO(Q0,".update.lock"),Wfn=300*1e3;function LCt(){try{if($9(Q0)||kCt(Q0,{recursive:!0}),$9(ex)){let e=Yfn(ex);if(Date.now()-e.mtimeMs<Wfn)return!1;try{QCt(ex)}catch(r){return ve(`Failed to remove stale lock file: ${r}`),!1}}return jfn(ex,`${process.pid}`,"utf8"),!0}catch(e){return ve(`Failed to acquire lock: ${e}`),!1}}function FCt(){try{$9(ex)&&MCt(ex,"utf8")===`${process.pid}`&&QCt(ex)}catch(e){ve(`Failed to release lock: ${e}`)}}async function gxe(){try{let e=await si("npm -g config get prefix");if(e.code!==0)return ve("Failed to check npm permissions"),{hasPermissions:!1,npmPrefix:null};let t=e.stdout.trim(),r=!1;try{Vfn(t,zfn.W_OK),r=!0}catch{r=!1}return r?{hasPermissions:!0,npmPrefix:t}:(ve("Insufficient permissions for global npm install."),{hasPermissions:!1,npmPrefix:t})}catch(e){return ve(`Failed to verify npm global install permissions: ${e}`),{hasPermissions:!1,npmPrefix:null}}}async function UCt(e){if(!LCt())throw Et("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:U9.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{$9(e)||kCt(e,{recursive:!0});let t=await si(`npm -g config set prefix ${e}`);if(t.code!==0)throw new Error(`Failed to set npm prefix: ${t.stderr}`);let r=`
|
|
1131
|
+
${f}`}}),{messages:a}=t,l=qln(o);return Gln(o,l,s,a)}},uyt=zln;Hg();var Mu=X(Ae(),1),fO=X(Ae(),1);ke();ke();import{existsSync as jln,readdirSync as Yln,statSync as Vln}from"fs";import{join as Wln}from"path";function Kln(){let e=Ji.plan();if(!jln(e))return[];try{return Yln(e).filter(r=>r.endsWith(".md")).map(r=>{let n=Wln(e,r),i=Vln(n);return{name:r,path:n,modified:i.mtime}}).sort((r,n)=>n.modified.getTime()-r.modified.getTime())}catch{return[]}}var dyt=({onSelect:e})=>{let[t,r]=(0,fO.useState)([]),[n,i]=(0,fO.useState)(0),[o,s]=(0,fO.useState)(!1);(0,fO.useEffect)(()=>{let c=Kln();r(c),s(!0)},[]);let a=[{label:"New plan",value:"__NEW_PLAN__",isNew:!0},...t.map(c=>({label:c.name,value:c.path,isNew:!1,modified:c.modified}))];vr((c,u)=>{if(u.upArrow)i(f=>f>0?f-1:a.length-1);else if(u.downArrow)i(f=>f<a.length-1?f+1:0);else if(u.return){let f=a[n];f&&e(f.value)}else u.escape&&e("__CANCELLED__")});let l=Pe();return o?Mu.createElement(N,{flexDirection:"column",marginY:1},Mu.createElement(N,{marginBottom:1},Mu.createElement(v,{bold:!0,color:l.claude},"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")),Mu.createElement(N,{marginBottom:1},Mu.createElement(v,{bold:!0,color:l.claude}," Select a plan to continue, or create a new one")),a.map((c,u)=>{let f=u===n;return Mu.createElement(N,{key:c.isNew?"new":c.value,flexDirection:"row",marginLeft:2},Mu.createElement(v,{color:f?l.claude:l.text},f?"\u276F":" "),Mu.createElement(v,{color:f?l.claude:l.text}," "),Mu.createElement(v,{color:f?l.claude:l.text,bold:c.isNew},c.isNew?c.label:c.label.replace(".md","")),!c.isNew&&c.modified&&Mu.createElement(v,{dimColor:!0}," ","(",Vge(c.modified),")"))}),Mu.createElement(N,{marginTop:1,marginLeft:2},Mu.createElement(v,{dimColor:!0},"\u2191/\u2193 to select \xB7 Enter to confirm \xB7 Esc to cancel"))):Mu.createElement(N,{flexDirection:"column",marginY:1},Mu.createElement(v,null,"Loading plan history..."))};var fyt=X(Ae(),1),Jln={type:"local-jsx",name:"plan",description:()=>"Enable plan mode",isEnabled:!0,isHidden:!1,disableCancel:!0,async call(e){return Ti.isPlanMode()?(e("Already in plan mode."),null):fyt.createElement(dyt,{onSelect:t=>{if(t==="__CANCELLED__"){e("Cancelled.");return}t&&t!=="__NEW_PLAN__"?Ti.setCurrentPlanFilePath(t):Ti.generatePlanFilePath(),Ti.setMode("plan",!0,!1),e("Enabled plan mode")}})},userFacingName(){return"plan"}},pyt=Jln;Hg();var Zln={type:"local",name:"auto",description:()=>"Enable auto mode",isEnabled:!0,isHidden:!1,async call(){return Ti.isAutoMode()?"Already in auto mode.":(Ti.setMode("auto",!0),"Enabled auto mode")},userFacingName(){return"auto"}},myt=Zln;_r();import{resolve as Xln}from"path";var ecn={type:"local",name:"cd",description:()=>"Move this session to a new working directory",isEnabled:!0,isHidden:!1,argNames:["path"],async call(e){let t=e.trim();if(t==="")throw new Error("Missing directory path. Usage: /cd <path>");let r=Be(),n=Xln(r,t);la(n);let i=Be();return i===r?`Already in ${i}.`:`Changed directory to ${i}/`},userFacingName(){return"cd"}},gyt=ecn;var jCt=X(Ae(),1);var Hn=X(Ae(),1);var Bcn=X(Ae(),1);var D9=X(Ae(),1),Dcn=X(_yt(),1);var yyt={info:"blue",success:"green",error:"red",warning:"yellow"},mcn={styles:{container:({variant:e})=>({flexGrow:1,borderStyle:"round",borderColor:yyt[e],gap:1,paddingX:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:yyt[e]}),content:()=>({flexShrink:1,flexGrow:1,minWidth:0,flexDirection:"column",gap:1}),title:()=>({bold:!0}),message:()=>({})},config({variant:e}){let t;return e==="info"&&(t=Qr.info),e==="success"&&(t=Qr.tick),e==="error"&&(t=Qr.cross),e==="warning"&&(t=Qr.warning),{icon:t}}},byt=mcn;var gcn={styles:{container:({color:e})=>({backgroundColor:e}),label:()=>({color:"black"})}},Cyt=gcn;var Acn={styles:{input:({isFocused:e})=>({dimColor:!e})}},Syt=Acn;var hcn={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})}},Iyt=hcn;var Ecn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})}},Tyt=Ecn;var _cn={styles:{container:()=>({flexGrow:1,minWidth:0}),completed:()=>({color:"magenta"}),remaining:()=>({dimColor:!0})},config:()=>({completedCharacter:Qr.square,remainingCharacter:Qr.squareLightShade})},vyt=_cn;var ycn={styles:{container:()=>({flexDirection:"column"}),option:({isFocused:e})=>({gap:1,paddingLeft:e?0:2}),selectedIndicator:()=>({color:"green"}),focusIndicator:()=>({color:"blue"}),label({isFocused:e,isSelected:t}){let r;return t&&(r="green"),e&&(r="blue"),{color:r}},highlightedText:()=>({bold:!0})}},xyt=ycn;var bcn={styles:{container:()=>({gap:1}),frame:()=>({color:"blue"}),label:()=>({})}},wyt=bcn;var Ccn={success:"green",error:"red",warning:"yellow",info:"blue"},Scn={success:Qr.tick,error:Qr.cross,warning:Qr.warning,info:Qr.info},Icn={styles:{container:()=>({gap:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:Ccn[e]}),message:()=>({})},config:({variant:e})=>({icon:Scn[e]})},Dyt=Icn;var Tcn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})},config:()=>({marker:Qr.line})},Ryt=Tcn;var vcn={styles:{value:()=>({})}},Nyt=vcn;var xcn={styles:{value:()=>({})}},Byt=xcn;var wcn={styles:{value:()=>({})}},Oyt=wcn;var Rcn={components:{Alert:byt,Badge:Cyt,ConfirmInput:Syt,MultiSelect:Iyt,OrderedList:Tyt,ProgressBar:vyt,Select:xyt,Spinner:wyt,StatusMessage:Dyt,UnorderedList:Ryt,TextInput:Nyt,EmailInput:Byt,PasswordInput:Oyt}},Ncn=(0,D9.createContext)(Rcn);var po=e=>(0,D9.useContext)(Ncn).components[e];var Ocn=X(Ae(),1);var C_=X(Ae(),1);var mO=X(Ae(),1);var kyt=X(Ae(),1);var R9=Qr.line;var iee=(0,kyt.createContext)({marker:R9});function Myt({children:e}){let{marker:t}=(0,mO.useContext)(iee),{styles:r}=po("UnorderedList");return mO.default.createElement(N,{...r.listItem()},mO.default.createElement(v,{...r.marker()},t),mO.default.createElement(N,{...r.content()},e))}var Qyt=X(Ae(),1),Uve=(0,Qyt.createContext)({depth:0});function kcn({children:e}){let{depth:t}=(0,C_.useContext)(Uve),{styles:r,config:n}=po("UnorderedList"),i=(0,C_.useMemo)(()=>({depth:t+1}),[t]),o=(0,C_.useMemo)(()=>{let{marker:s}=n();return typeof s=="string"?{marker:s}:Array.isArray(s)?{marker:s[t]??s.at(-1)??R9}:{marker:R9}},[n,t]);return C_.default.createElement(Uve.Provider,{value:i},C_.default.createElement(iee.Provider,{value:o},C_.default.createElement(N,{...r.list()},e)))}kcn.Item=Myt;var Qcn=X(Ae(),1);var Mcn=X(Ae(),1);var N9=X(Ae(),1);var gO=class extends Map{first;constructor(t){let r=[],n,i,o=0;for(let s of t){let a={...s,previous:i,next:void 0,index:o};i&&(i.next=a),n||=a,r.push([s.value,a]),o++,i=a}super(r),this.first=n}};var Pyt=X(Ae(),1);var AO=X(Ae(),1);var B9=X(Ae(),1);function Lyt({isFocused:e,isSelected:t,children:r}){let{styles:n}=po("Select");return B9.default.createElement(N,{...n.option({isFocused:e})},e&&B9.default.createElement(v,{...n.focusIndicator()},Qr.pointer),B9.default.createElement(v,{...n.label({isFocused:e,isSelected:t})},r),t&&B9.default.createElement(v,{...n.selectedIndicator()},Qr.tick))}var ym=X(Ae(),1);import{isDeepStrictEqual as Pcn}from"node:util";var Lcn=(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}},Fyt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=typeof e=="number"?Math.min(e,r.length):r.length,i=new gO(r);return{optionMap:i,visibleOptionCount:n,focusedValue:i.first?.value,visibleFromIndex:0,visibleToIndex:n,previousValue:t,value:t}},Uyt=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n})=>{let[i,o]=(0,ym.useReducer)(Lcn,{visibleOptionCount:e,defaultValue:r,options:t},Fyt),[s,a]=(0,ym.useState)(t);t!==s&&!Pcn(t,s)&&(o({type:"reset",state:Fyt({visibleOptionCount:e,defaultValue:r,options:t})}),a(t));let l=(0,ym.useCallback)(()=>{o({type:"focus-next-option"})},[]),c=(0,ym.useCallback)(()=>{o({type:"focus-previous-option"})},[]),u=(0,ym.useCallback)(()=>{o({type:"select-focused-option"})},[]),f=(0,ym.useMemo)(()=>t.map((g,m)=>({...g,index:m})).slice(i.visibleFromIndex,i.visibleToIndex),[t,i.visibleFromIndex,i.visibleToIndex]);return(0,ym.useEffect)(()=>{i.value&&i.previousValue!==i.value&&n?.(i.value)},[i.previousValue,i.value,t,n]),{focusedValue:i.focusedValue,visibleFromIndex:i.visibleFromIndex,visibleToIndex:i.visibleToIndex,value:i.value,visibleOptions:f,focusNextOption:l,focusPreviousOption:c,selectFocusedOption:u}};var Hyt=({isDisabled:e=!1,state:t})=>{vr((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};function hO({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:i,onChange:o}){let s=Uyt({visibleOptionCount:t,options:n,defaultValue:i,onChange:o});Hyt({isDisabled:e,state:s});let{styles:a}=po("Select");return AO.default.createElement(N,{...a.container()},s.visibleOptions.map(l=>{let c=l.label;if(r&&l.label.includes(r)){let u=l.label.indexOf(r);c=AO.default.createElement(AO.default.Fragment,null,l.label.slice(0,u),AO.default.createElement(v,{...a.highlightedText()},r),l.label.slice(u+r.length))}return AO.default.createElement(Lyt,{key:l.value,isFocused:!e&&s.focusedValue===l.value,isSelected:s.value===l.value},c)}))}var Fcn=X(Ae(),1);var $yt=X(Ae(),1);var Hcn=X(Ae(),1);var oee=X(Ae(),1);var Ucn=X(Ae(),1);var I2i=sr.inverse(" ");var jg=X(Ae(),1);var EO=X(Ae(),1);var qyt=X(Ae(),1);var see=(0,qyt.createContext)({marker:Qr.line});function aee({children:e}){let{marker:t}=(0,EO.useContext)(see),{styles:r}=po("OrderedList");return EO.default.createElement(N,{...r.listItem()},EO.default.createElement(v,{...r.marker()},t),EO.default.createElement(N,{...r.content()},e))}var Gyt=X(Ae(),1),Hve=(0,Gyt.createContext)({marker:""});function Yg({children:e}){let{marker:t}=(0,jg.useContext)(Hve),{styles:r}=po("OrderedList"),n=0;for(let o of jg.default.Children.toArray(e))!(0,jg.isValidElement)(o)||o.type!==aee||n++;let i=String(n).length;return jg.default.createElement(N,{...r.list()},jg.default.Children.map(e,(o,s)=>{if(!(0,jg.isValidElement)(o)||o.type!==aee)return o;let a=`${String(s+1).padStart(i)}.`,l=`${t}${a}`;return jg.default.createElement(Hve.Provider,{value:{marker:l}},jg.default.createElement(see.Provider,{value:{marker:l}},o))}))}Yg.Item=aee;var qcn=X(Ae(),1);var $ve=X(Ae(),1);var $cn=X(Ae(),1);var X2i=sr.inverse(" ");var Gcn=X(Ae(),1);var zcn=X(Ae(),1);var Ycn=X(Ae(),1);var lee=X(Ae(),1);var jcn=X(Ae(),1);var SOi=sr.inverse(" ");var $i=X(Ae(),1);var qve=X(Ae(),1),Gve=X(Ae(),1);V5();us();Qi();Fv();ar();var zyt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function Zv(){let e=[...zyt,...[...zyt].reverse()],{frame:t}=gR({interval:120});return qve.createElement(N,{flexWrap:"nowrap",height:1,width:2},qve.createElement(v,{color:Pe().claude},e[t%e.length]))}var dee=X(Ae(),1);var uee=null,S_=null,cee=new Set;function jve(e){let{columns:t,rows:r}=e;if(t&&r)return{columns:t,rows:r};let n=Qpe();return{columns:t||n.columns||80,rows:r||n.rows||24}}function zve(){S_&&(uee=jve(S_),cee.forEach(e=>e(uee)))}function Vcn(e,t){return S_!==e&&(S_&&S_.off("resize",zve),S_=e,uee=jve(e),e.on("resize",zve)),cee.add(t),()=>{cee.delete(t),cee.size===0&&S_&&(S_.off("resize",zve),S_=null,uee=null)}}function Yve(){let{stdout:e}=mR(),[t,r]=(0,dee.useState)(()=>jve(e));return(0,dee.useEffect)(()=>Vcn(e,r),[e]),t}function _O(){return Yve()}$e();If();ke();lh();ke();var fMi=X(mxe(),1);import{homedir as H9}from"os";import{join as CO}from"path";import{existsSync as $9,mkdirSync as kCt,appendFileSync as OCt,readFileSync as MCt,constants as zfn,writeFileSync as jfn,unlinkSync as QCt,statSync as Yfn}from"fs";import{platform as PCt}from"process";import{accessSync as Vfn}from"fs";var Gfn="2.4.10",U9={VERSION:Gfn,PACKAGE_URL:"@dahawa/hawa-code",README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};$e();var ex=CO(Q0,".update.lock"),Wfn=300*1e3;function LCt(){try{if($9(Q0)||kCt(Q0,{recursive:!0}),$9(ex)){let e=Yfn(ex);if(Date.now()-e.mtimeMs<Wfn)return!1;try{QCt(ex)}catch(r){return ve(`Failed to remove stale lock file: ${r}`),!1}}return jfn(ex,`${process.pid}`,"utf8"),!0}catch(e){return ve(`Failed to acquire lock: ${e}`),!1}}function FCt(){try{$9(ex)&&MCt(ex,"utf8")===`${process.pid}`&&QCt(ex)}catch(e){ve(`Failed to release lock: ${e}`)}}async function gxe(){try{let e=await si("npm -g config get prefix");if(e.code!==0)return ve("Failed to check npm permissions"),{hasPermissions:!1,npmPrefix:null};let t=e.stdout.trim(),r=!1;try{Vfn(t,zfn.W_OK),r=!0}catch{r=!1}return r?{hasPermissions:!0,npmPrefix:t}:(ve("Insufficient permissions for global npm install."),{hasPermissions:!1,npmPrefix:t})}catch(e){return ve(`Failed to verify npm global install permissions: ${e}`),{hasPermissions:!1,npmPrefix:null}}}async function UCt(e){if(!LCt())throw Et("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:U9.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{$9(e)||kCt(e,{recursive:!0});let t=await si(`npm -g config set prefix ${e}`);if(t.code!==0)throw new Error(`Failed to set npm prefix: ${t.stderr}`);let r=`
|
|
1132
1132
|
# npm global path
|
|
1133
1133
|
export PATH="${e}/bin:$PATH"
|
|
1134
1134
|
`;if(PCt==="win32"){let n=await si(`setx PATH "${process.env.PATH};${e}"`);if(n.code!==0)throw new Error(`Failed to update PATH on Windows: ${n.stderr}`)}else{let n=[CO(H9(),".bashrc"),CO(H9(),".bash_profile"),CO(H9(),".zshrc"),CO(H9(),".config","fish","config.fish")];for(let i of n)if($9(i))try{if(!MCt(i,"utf8").includes(e)){if(i.includes("fish")){let s=`
|
|
@@ -2773,7 +2773,8 @@ Remember: DO NOT write or edit any files yet. This is a read-only exploration an
|
|
|
2773
2773
|
- ${gl} \u5E94\u8BE5\u5C3D\u91CF\u548C\u5176\u5B83\u5DE5\u5177\u540C\u65F6\u6267\u884C\uFF0C\u4ECE\u800C\u51CF\u5C11\u8BF7\u6C42\u6B21\u6570
|
|
2774
2774
|
- \u53EA\u80FD\u52A0\u8F7D <available_tools> \u63D0\u4F9B\u7684\u5DE5\u5177\u3002
|
|
2775
2775
|
- <loaded_tools> \u5DF2\u7ECF\u52A0\u8F7D\u7684\u5DE5\u5177\uFF0C\u5982\u679C\u5F53\u524D\u4EFB\u52A1\u4E0D\u9700\u8981\u53EF\u4EE5\u901A\u8FC7 ${Al} \u5378\u8F7D\u3002
|
|
2776
|
-
- <defalut_tools> \u65E0\u9700\u52A0\u8F7D\u76F4\u63A5\u53EF\u4EE5\u4F7F\u7528\u7684\u5DE5\u5177\uFF0C\u8FD9\u4E9B\u5DE5\u5177\u4E0D\u80FD\u5378\u8F7D
|
|
2776
|
+
- <defalut_tools> \u65E0\u9700\u52A0\u8F7D\u76F4\u63A5\u53EF\u4EE5\u4F7F\u7528\u7684\u5DE5\u5177\uFF0C\u8FD9\u4E9B\u5DE5\u5177\u4E0D\u80FD\u5378\u8F7D\u3002
|
|
2777
|
+
- \uFF01\u91CD\u8981 \u5982\u679C\u5DE5\u5177\u4E0D\u5728 <loaded_tools> \u548C <defalut_tools> \u4EE5\u5185\uFF0C\u4E0D\u8981\u76F4\u63A5\u4F7F\u7528\uFF0C\u5E94\u8BE5\u53BB\u52A0\u8F7D\u3002
|
|
2777
2778
|
`;_f();Qi();$e();ar();var vLn=Fe(()=>k.strictObject({toolNames:k.array(k.string()).describe("Array of tool names to be loaded")})),zHt={name:jPe,async description(){return qHt},async prompt({dangerouslySkipPermissions:e}={},t){let r=t?.options?._tools??await an.getTools(!1),n=r?r.filter(s=>s.name!==jPe):[],i=Je.getInQueryContext(t?.agentId)[Eg];n=n.filter(s=>!(i?.has(s.name)||_g.includes(s.name)));let o=await Promise.all(n.map(async s=>`<tool><name>${s.name}</name><description>${s.isMcp?.()?zee.getSimpleDescription(s.name):await s.description()}</description></tool>`)).then(s=>s.join(`
|
|
2778
2779
|
`));return`${GHt}
|
|
2779
2780
|
<available_tools>
|