@dahawa/hawa-code 2.4.22 → 2.4.23
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 +4 -4
- package/hands.js +4 -4
- package/package.json +1 -1
- package/webServer/app.js +81 -75
- package/webServer/style.css +59 -0
package/cli.js
CHANGED
|
@@ -675,7 +675,7 @@ globstar while`,t,p,r,f,A),this.matchOne(t.slice(p),r.slice(f),n))return this.de
|
|
|
675
675
|
`)),cFn(e,o,{encoding:r,flush:!0})}var XHt=new Cde.default({fetchMethod:e=>gFn(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});async function aGt(e){let t=wV(e);return XHt.get(t)||XHt.fetchMethod?.(t)}async function gFn(e){let t=new AbortController;setTimeout(()=>{t.abort()},1e3);let r=await I2t(e,t.signal,15),n=0;for(let o of r)_B(o)==="CRLF"&&n++;return n>3?"CRLF":"LF"}function cGt(e,t,r){if(e.has(t))return e.get(t);let n=r();return e.set(t,n),n}var AFn=new Cde.default({fetchMethod:e=>lGt(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});function Wm(e){let t=wV(e);return cGt(AFn,t,()=>lGt(t))}function lGt(e){let r=Buffer.alloc(4096),n;try{n=eGt(e,"r");let o=tGt(n,r,0,4096,0);return o===0?"utf8":o>=2&&r[0]===255&&r[1]===254?"utf16le":o>=3&&r[0]===239&&r[1]===187&&r[2]===191||r.slice(0,o).toString("utf8").length>0?"utf8":"ascii"}catch(o){return Se(`Error detecting encoding for file ${e}: ${o}`),"utf8"}finally{n&&rGt(n)}}var hFn=new Cde.default({fetchMethod:e=>uGt(e),ttl:300*1e3,ttlAutopurge:!1,max:1e3});function _B(e){let t=wV(e);return cGt(hFn,t,()=>uGt(t))}function uGt(e,t="utf8"){try{if(!nGt(e).isFile())return"LF";let n=Buffer.alloc(4096),o=eGt(e,"r"),i=tGt(o,n,0,4096,0);rGt(o);let s=n.toString(t,0,i),a=0,c=0;for(let l=0;l<s.length;l++)s[l]===`
|
|
676
676
|
`&&(l>0&&s[l-1]==="\r"?a++:c++);return a>c?"CRLF":"LF"}catch(r){return Se(`Error detecting line endings for file ${e}: ${r}`),"LF"}}function WF(e){let t=oGt(e)?e:wV(Be(),e);return t.endsWith(" AM.png")?t.replace(" AM.png","\u202FAM.png"):t.endsWith(" PM.png")?t.replace(" PM.png","\u202FPM.png"):t}function OPe(e){return e?oGt(e)?e:wV(Be(),e):void 0}function dGt(e){try{let t=OPe(e),r=t?fFn(Be(),t):void 0;return{absolutePath:t,relativePath:r}}catch(t){return X("getAbsoluteAndRelativePaths error ",t),{absolutePath:null,relativePath:null}}}function vde(e){try{let t=pFn(e),r=KHt(e,JHt(e));if(!lFn(t))return;let i=uFn(t).filter(s=>KHt(s,JHt(s))===r&&mFn(t,s)!==e)[0];return i||void 0}catch(t){Se(`Error finding similar file for ${e}: ${t}`);return}}function BPe(){let e=process.env.HAWA_CODE_COMPACT_LINE_PREFIX;return!(e==="0"||e==="false")}function ow({content:e,startLine:t}){if(!e)return"";let r=e.split(/\r?\n/);return BPe()?r.map((n,o)=>`${o+t} ${n}`).join(`
|
|
677
677
|
`):r.map((n,o)=>{let i=String(o+t);return i.length>=6?`${i}\u2192${n}`:`${i.padStart(6," ")}\u2192${n}`}).join(`
|
|
678
|
-
`)}function fGt(e){try{let t=dFn(e),r=t.readSync();return t.closeSync(),r===null}catch(t){return Se(`Error checking directory: ${t}`),!1}}Ge();function ew(){let e=Xn();e.hasCompletedProjectOnboarding||ps({...e,hasCompletedProjectOnboarding:!0})}function yFn(){let e=hr();To({...e,lastReleaseNotesSeen:MACRO.VERSION})}function MPe({workspaceDir:e}){let r=!Xn().hasCompletedProjectOnboarding,o=hr().lastReleaseNotesSeen,i=[];(!o||(0,pGt.gt)(MACRO.VERSION,o))&&(i=que[MACRO.VERSION]||[]);let s=i.length>0;if(Ki.useEffect(()=>{s&&!r&&yFn()},[s,r]),!r&&!s)return null;let a=EFn(_Fn(e,Ci)),c=fGt(e),l=!a&&!c,u=MF.isEnabled&&!hr().shiftEnterKeyBindingInstalled,d=ee();return Ki.createElement(x,{flexDirection:"column",gap:1,padding:1,paddingBottom:0},r&&Ki.createElement(Ki.Fragment,null,Ki.createElement(C,{color:d.secondaryText},"Tips for getting started:"),Ki.createElement(Ud,{children:[]},(()=>{let p=[];return c&&p.push(Ki.createElement(Ud.Item,{key:"workspace"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," to create a new app or clone a repository."))),l&&p.push(Ki.createElement(Ud.Item,{key:"claudemd"},Ki.createElement(C,{color:d.secondaryText},"Run ",Ki.createElement(C,{color:d.text},"/init")," to create a",Ci," file with instructions for Hawa code."))),u&&p.push(Ki.createElement(Ud.Item,{key:"terminal"},Ki.createElement(C,{color:d.secondaryText},"Run ",Ki.createElement(C,{color:d.text},"/terminal-setup"),Ki.createElement(C,{bold:!1}," to set up terminal integration")))),p.push(Ki.createElement(Ud.Item,{key:"questions"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," questions about your codebase."))),p.push(Ki.createElement(Ud.Item,{key:"changes"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," to implement changes to your codebase."))),p})())),!r&&s&&Ki.createElement(x,{borderColor:ee().secondaryBorder,flexDirection:"column",marginRight:1},Ki.createElement(x,{flexDirection:"column",gap:0},Ki.createElement(x,{marginBottom:1},Ki.createElement(C,null,"\u{1F195} What's new in v",MACRO.VERSION,":")),Ki.createElement(x,{flexDirection:"column",marginLeft:1},i.map((p,f)=>Ki.createElement(C,{key:f,color:ee().secondaryText},"\u2022 ",p))))),e===SFn()&&Ki.createElement(C,{color:ee().warning},"Note: You have launched ",Ki.createElement(C,{bold:!0},et)," in your home directory. For the best experience, launch it in a project directory instead."))}var JF=F(ne(),1);var KF=F(ne(),1);var RV=F(ne(),1);function kPe({isFocused:e,isSelected:t,smallPointer:r,children:n}){let{styles:o}=ms("Select");return RV.default.createElement(x,{...o.option({isFocused:e})},e&&RV.default.createElement(C,{...o.focusIndicator()},r?Jr.triangleDownSmall:Jr.pointer),RV.default.createElement(C,{...o.label({isFocused:e,isSelected:t})},n),t&&RV.default.createElement(C,{...o.selectedIndicator()},Jr.tick))}var Km=F(ne(),1);import{isDeepStrictEqual as TFn}from"node:util";var NV=class extends Map{first;constructor(t){let r=[],n,o,i=0;for(let s of t){let a={...s,previous:o,next:void 0,index:i};o&&(o.next=a),n||=a;let c="value"in s?s.value:PPe(s);r.push([c,a]),i++,o=a}super(r),this.first=n}};var bFn=(e,t)=>{switch(t.type){case"focus-next-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.next;for(;n&&!("value"in n);)n=n.next;if(!n)return e;if(!(n.index>=e.visibleToIndex))return{...e,focusedValue:n.value};let i=Math.min(e.optionMap.size,e.visibleToIndex+1),s=i-e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:s,visibleToIndex:i}}case"focus-previous-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.previous;for(;n&&!("value"in n);)n=n.previous;if(!n)return e;if(!(n.index<=e.visibleFromIndex))return{...e,focusedValue:n.value};let i=Math.max(0,e.visibleFromIndex-1),s=i+e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:i,visibleToIndex:s}}case"select-focused-option":return{...e,previousValue:e.value,value:e.focusedValue};case"reset":return t.state;case"set-focus":return{...e,focusedValue:t.value}}},LPe=e=>e.flatMap(t=>{if("options"in t){let r=LPe(t.options),n=r.flatMap(i=>"value"in i?i.value:[]);return[...t.header!==void 0?[{header:t.header,optionValues:n}]:[],...r]}return t}),mGt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=LPe(r),o=typeof e=="number"?Math.min(e,n.length):n.length,i=new NV(n),s=i.first,a=s&&"value"in s?s.value:void 0;return{optionMap:i,visibleOptionCount:o,focusedValue:a,visibleFromIndex:0,visibleToIndex:o,previousValue:t,value:t}},QPe=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n,onFocus:o,focusValue:i})=>{let s=LPe(t),[a,c]=(0,Km.useReducer)(bFn,{visibleOptionCount:e,defaultValue:r,options:t},mGt),[l,u]=(0,Km.useState)(s);s!==l&&!TFn(s,l)&&(c({type:"reset",state:mGt({visibleOptionCount:e,defaultValue:r,options:t})}),u(s));let d=(0,Km.useCallback)(()=>{c({type:"focus-next-option"})},[]),p=(0,Km.useCallback)(()=>{c({type:"focus-previous-option"})},[]),f=(0,Km.useCallback)(()=>{c({type:"select-focused-option"})},[]),A=(0,Km.useMemo)(()=>s.map((h,E)=>({...h,index:E})).slice(a.visibleFromIndex,a.visibleToIndex),[s,a.visibleFromIndex,a.visibleToIndex]);return(0,Km.useEffect)(()=>{a.value&&a.previousValue!==a.value&&n?.(a.value)},[a.previousValue,a.value,t,n]),(0,Km.useEffect)(()=>{a.focusedValue&&o?.(a.focusedValue)},[a.focusedValue,o]),(0,Km.useEffect)(()=>{i&&c({type:"set-focus",value:i})},[i]),{focusedValue:a.focusedValue,visibleFromIndex:a.visibleFromIndex,visibleToIndex:a.visibleToIndex,value:a.value,visibleOptions:A,focusNextOption:d,focusPreviousOption:p,selectFocusedOption:f}};var UPe=({isDisabled:e=!1,state:t})=>{Ct((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};var PPe=e=>`HEADER-${e.optionValues.join(",")}`;function xC({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a}){let c=QPe({visibleOptionCount:t,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a});UPe({isDisabled:e,state:c});let{styles:l}=ms("Select");return KF.default.createElement(x,{...l.container()},c.visibleOptions.map(u=>{let d="value"in u?u.value:PPe(u),p=!e&&c.focusedValue!==void 0&&("value"in u?c.focusedValue===u.value:u.optionValues.includes(c.focusedValue)),f=!!c.value&&("value"in u?c.value===u.value:u.optionValues.includes(c.value)),A="header"in u,h="label"in u?u.label:u.header,E=h;if(r&&h.includes(r)){let S=h.indexOf(r);E=KF.default.createElement(KF.default.Fragment,null,h.slice(0,S),KF.default.createElement(C,{...l.highlightedText()},r),h.slice(S+r.length))}return KF.default.createElement(kPe,{key:d,isFocused:p,isSelected:f,smallPointer:A},E)}))}function gGt({onDone:e}){return Ct((t,r)=>{(r.ctrl&&(t==="c"||t==="d")||r.escape)&&e()}),JF.default.createElement(x,{flexDirection:"column",borderStyle:"round",padding:1,borderColor:ee().secondaryBorder},JF.default.createElement(x,{marginBottom:1,flexDirection:"column"},JF.default.createElement(C,{bold:!0},"You've spent $5 this session.")),JF.default.createElement(x,null,JF.default.createElement(xC,{options:[{value:"ok",label:"Got it, thanks!"}],onChange:e})))}var An=F(ne(),1),Kt=F(ne(),1);var Qp=F(ne(),1);Ge();sr();Cy();var vFn="2.4.22",Iy={VERSION:vFn,PACKAGE_URL:"@dahawa/hawa-code",README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var GPe=46,EGt=["(\u2740\u2579\u25E1\u2579)","(\u25D5\u072B\u25D5)","\u239D(\u25D5u\u25D5)\u23A0","\u10DA(\u25C9\u25DE\u0C6A\u25DF\u25C9 )\u10DA","(\xB4\u25C9\u203F\u25C9\uFF40)","\u0E01\u0E47\u0295\u2022\u0361\u1D25\u2022\u0294 \u0E01\u0E49","\uFF0F/( \u25D5\u203F\u203F\u25D5 )\uFF3C"];function xde({isDefaultModel:e=!1}){let t=Math.max(GPe,Be().length+12),r=ee(),n=EGt[Math.floor(Math.random()*EGt.length)];return Qp.createElement(x,{flexDirection:"column"},Qp.createElement(x,{flexDirection:"column",gap:1,paddingLeft:1,width:"100%"},Qp.createElement(C,null,Qp.createElement(C,null,n)," Welcome to"," ",Qp.createElement(C,{bold:!0},et),Qp.createElement(C,{color:r.secondaryText}," v",Iy.VERSION)),Qp.createElement(Qp.Fragment,null,Qp.createElement(x,{paddingLeft:2,flexDirection:"column",gap:1},Qp.createElement(C,{color:r.secondaryText,italic:!0},"/help for help"),Qp.createElement(C,{color:r.secondaryText},"cwd: ",Be()),Qp.createElement(C,{color:r.secondaryText},"model: ",bo.getConfig().routing.MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A"),Qp.createElement(C,{color:r.secondaryText},"small fast model: ",bo.getConfig().routing.SMALL_FAST_MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A")))))}var SS=F(ne(),1);Re();var VJ=F(ne(),1);import{randomUUID as AS}from"crypto";$s();Re();Zt();sr();Re();Ge();import{existsSync as NC,readdirSync as W4n,statSync as K4n}from"fs";import{join as cw,relative as J4n}from"path";import{homedir as V$t}from"os";import{platform as Z4n}from"process";import{readFile as lw}from"fs/promises";sr();EE();gr();import{join as OFn,sep as BFn}from"path";function Up(){if(!Jm())return!1;try{let e=ot();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Zm(){return(OFn(Be(),".hcode","team-memory")+BFn).normalize("NFC")}function _E(e){let t=e.normalize("NFC"),r=Zm();return t.startsWith(r)}var j$t=F(UV(),1);Xo();var H$t=F(UV(),1);sr();Ge();Re();Mp();import{readFile as U$t}from"fs/promises";import{existsSync as sLe,readdirSync as V4n,statSync as j4n}from"fs";import{join as aLe,relative as G$t}from"path";import{homedir as Y4n}from"os";function F$t(e){try{let t=(0,H$t.default)(e),r=t.data.paths,n=[];return typeof r=="string"?n=r.split(",").map(o=>o.trim()).filter(Boolean):Array.isArray(r)&&(n=r.filter(o=>typeof o=="string")),{paths:n,content:t.content.trim()}}catch(t){return Se(t),{paths:[],content:e.trim()}}}function z4n(e,t){return t.length===0?!0:t.some(r=>{try{return Hd(e,r,{matchBase:!0,dot:!0})}catch(n){return Se(n),!1}})}function cLe(e){let t=[];try{if(!sLe(e))return t;let r=V4n(e);for(let n of r){let o=aLe(e,n),i=j4n(o);i.isDirectory()?t.push(...cLe(o)):i.isFile()&&n.endsWith(".md")&&t.push(o)}}catch(r){Se(r)}return t}async function $$t(){let e=[];try{let t=aLe(Y4n(),Fn,"rules");if(sLe(t)){let r=cLe(t);for(let n of r)try{let o=await U$t(n,"utf-8"),{paths:i,content:s}=F$t(o);i.length>0&&e.push({filePath:n,content:s,paths:i,isProjectRule:!1})}catch(o){Se(o)}}}catch(t){Se(t)}try{let t=aLe(Be(),Fn,"rules");if(sLe(t)){let r=cLe(t);for(let n of r)try{let o=await U$t(n,"utf-8"),{paths:i,content:s}=F$t(o);i.length>0&&e.push({filePath:G$t(Be(),n),content:s,paths:i,isProjectRule:!0})}catch(o){Se(o)}}}catch(t){Se(t)}return e}function q$t(e,t){e=ule(e);let r=ule(Be()),n=e.startsWith(r)?G$t(r,e):e;return t.filter(o=>z4n(n,o.paths))}var X4n=`# hawaCodeMd
|
|
678
|
+
`)}function fGt(e){try{let t=dFn(e),r=t.readSync();return t.closeSync(),r===null}catch(t){return Se(`Error checking directory: ${t}`),!1}}Ge();function ew(){let e=Xn();e.hasCompletedProjectOnboarding||ps({...e,hasCompletedProjectOnboarding:!0})}function yFn(){let e=hr();To({...e,lastReleaseNotesSeen:MACRO.VERSION})}function MPe({workspaceDir:e}){let r=!Xn().hasCompletedProjectOnboarding,o=hr().lastReleaseNotesSeen,i=[];(!o||(0,pGt.gt)(MACRO.VERSION,o))&&(i=que[MACRO.VERSION]||[]);let s=i.length>0;if(Ki.useEffect(()=>{s&&!r&&yFn()},[s,r]),!r&&!s)return null;let a=EFn(_Fn(e,Ci)),c=fGt(e),l=!a&&!c,u=MF.isEnabled&&!hr().shiftEnterKeyBindingInstalled,d=ee();return Ki.createElement(x,{flexDirection:"column",gap:1,padding:1,paddingBottom:0},r&&Ki.createElement(Ki.Fragment,null,Ki.createElement(C,{color:d.secondaryText},"Tips for getting started:"),Ki.createElement(Ud,{children:[]},(()=>{let p=[];return c&&p.push(Ki.createElement(Ud.Item,{key:"workspace"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," to create a new app or clone a repository."))),l&&p.push(Ki.createElement(Ud.Item,{key:"claudemd"},Ki.createElement(C,{color:d.secondaryText},"Run ",Ki.createElement(C,{color:d.text},"/init")," to create a",Ci," file with instructions for Hawa code."))),u&&p.push(Ki.createElement(Ud.Item,{key:"terminal"},Ki.createElement(C,{color:d.secondaryText},"Run ",Ki.createElement(C,{color:d.text},"/terminal-setup"),Ki.createElement(C,{bold:!1}," to set up terminal integration")))),p.push(Ki.createElement(Ud.Item,{key:"questions"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," questions about your codebase."))),p.push(Ki.createElement(Ud.Item,{key:"changes"},Ki.createElement(C,{color:d.secondaryText},"Ask ",et," to implement changes to your codebase."))),p})())),!r&&s&&Ki.createElement(x,{borderColor:ee().secondaryBorder,flexDirection:"column",marginRight:1},Ki.createElement(x,{flexDirection:"column",gap:0},Ki.createElement(x,{marginBottom:1},Ki.createElement(C,null,"\u{1F195} What's new in v",MACRO.VERSION,":")),Ki.createElement(x,{flexDirection:"column",marginLeft:1},i.map((p,f)=>Ki.createElement(C,{key:f,color:ee().secondaryText},"\u2022 ",p))))),e===SFn()&&Ki.createElement(C,{color:ee().warning},"Note: You have launched ",Ki.createElement(C,{bold:!0},et)," in your home directory. For the best experience, launch it in a project directory instead."))}var JF=F(ne(),1);var KF=F(ne(),1);var RV=F(ne(),1);function kPe({isFocused:e,isSelected:t,smallPointer:r,children:n}){let{styles:o}=ms("Select");return RV.default.createElement(x,{...o.option({isFocused:e})},e&&RV.default.createElement(C,{...o.focusIndicator()},r?Jr.triangleDownSmall:Jr.pointer),RV.default.createElement(C,{...o.label({isFocused:e,isSelected:t})},n),t&&RV.default.createElement(C,{...o.selectedIndicator()},Jr.tick))}var Km=F(ne(),1);import{isDeepStrictEqual as TFn}from"node:util";var NV=class extends Map{first;constructor(t){let r=[],n,o,i=0;for(let s of t){let a={...s,previous:o,next:void 0,index:i};o&&(o.next=a),n||=a;let c="value"in s?s.value:PPe(s);r.push([c,a]),i++,o=a}super(r),this.first=n}};var bFn=(e,t)=>{switch(t.type){case"focus-next-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.next;for(;n&&!("value"in n);)n=n.next;if(!n)return e;if(!(n.index>=e.visibleToIndex))return{...e,focusedValue:n.value};let i=Math.min(e.optionMap.size,e.visibleToIndex+1),s=i-e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:s,visibleToIndex:i}}case"focus-previous-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.previous;for(;n&&!("value"in n);)n=n.previous;if(!n)return e;if(!(n.index<=e.visibleFromIndex))return{...e,focusedValue:n.value};let i=Math.max(0,e.visibleFromIndex-1),s=i+e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:i,visibleToIndex:s}}case"select-focused-option":return{...e,previousValue:e.value,value:e.focusedValue};case"reset":return t.state;case"set-focus":return{...e,focusedValue:t.value}}},LPe=e=>e.flatMap(t=>{if("options"in t){let r=LPe(t.options),n=r.flatMap(i=>"value"in i?i.value:[]);return[...t.header!==void 0?[{header:t.header,optionValues:n}]:[],...r]}return t}),mGt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=LPe(r),o=typeof e=="number"?Math.min(e,n.length):n.length,i=new NV(n),s=i.first,a=s&&"value"in s?s.value:void 0;return{optionMap:i,visibleOptionCount:o,focusedValue:a,visibleFromIndex:0,visibleToIndex:o,previousValue:t,value:t}},QPe=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n,onFocus:o,focusValue:i})=>{let s=LPe(t),[a,c]=(0,Km.useReducer)(bFn,{visibleOptionCount:e,defaultValue:r,options:t},mGt),[l,u]=(0,Km.useState)(s);s!==l&&!TFn(s,l)&&(c({type:"reset",state:mGt({visibleOptionCount:e,defaultValue:r,options:t})}),u(s));let d=(0,Km.useCallback)(()=>{c({type:"focus-next-option"})},[]),p=(0,Km.useCallback)(()=>{c({type:"focus-previous-option"})},[]),f=(0,Km.useCallback)(()=>{c({type:"select-focused-option"})},[]),A=(0,Km.useMemo)(()=>s.map((h,E)=>({...h,index:E})).slice(a.visibleFromIndex,a.visibleToIndex),[s,a.visibleFromIndex,a.visibleToIndex]);return(0,Km.useEffect)(()=>{a.value&&a.previousValue!==a.value&&n?.(a.value)},[a.previousValue,a.value,t,n]),(0,Km.useEffect)(()=>{a.focusedValue&&o?.(a.focusedValue)},[a.focusedValue,o]),(0,Km.useEffect)(()=>{i&&c({type:"set-focus",value:i})},[i]),{focusedValue:a.focusedValue,visibleFromIndex:a.visibleFromIndex,visibleToIndex:a.visibleToIndex,value:a.value,visibleOptions:A,focusNextOption:d,focusPreviousOption:p,selectFocusedOption:f}};var UPe=({isDisabled:e=!1,state:t})=>{Ct((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};var PPe=e=>`HEADER-${e.optionValues.join(",")}`;function xC({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a}){let c=QPe({visibleOptionCount:t,options:n,defaultValue:o,onChange:i,onFocus:s,focusValue:a});UPe({isDisabled:e,state:c});let{styles:l}=ms("Select");return KF.default.createElement(x,{...l.container()},c.visibleOptions.map(u=>{let d="value"in u?u.value:PPe(u),p=!e&&c.focusedValue!==void 0&&("value"in u?c.focusedValue===u.value:u.optionValues.includes(c.focusedValue)),f=!!c.value&&("value"in u?c.value===u.value:u.optionValues.includes(c.value)),A="header"in u,h="label"in u?u.label:u.header,E=h;if(r&&h.includes(r)){let S=h.indexOf(r);E=KF.default.createElement(KF.default.Fragment,null,h.slice(0,S),KF.default.createElement(C,{...l.highlightedText()},r),h.slice(S+r.length))}return KF.default.createElement(kPe,{key:d,isFocused:p,isSelected:f,smallPointer:A},E)}))}function gGt({onDone:e}){return Ct((t,r)=>{(r.ctrl&&(t==="c"||t==="d")||r.escape)&&e()}),JF.default.createElement(x,{flexDirection:"column",borderStyle:"round",padding:1,borderColor:ee().secondaryBorder},JF.default.createElement(x,{marginBottom:1,flexDirection:"column"},JF.default.createElement(C,{bold:!0},"You've spent $5 this session.")),JF.default.createElement(x,null,JF.default.createElement(xC,{options:[{value:"ok",label:"Got it, thanks!"}],onChange:e})))}var An=F(ne(),1),Kt=F(ne(),1);var Qp=F(ne(),1);Ge();sr();Cy();var vFn="2.4.23",Iy={VERSION:vFn,PACKAGE_URL:"@dahawa/hawa-code",README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var GPe=46,EGt=["(\u2740\u2579\u25E1\u2579)","(\u25D5\u072B\u25D5)","\u239D(\u25D5u\u25D5)\u23A0","\u10DA(\u25C9\u25DE\u0C6A\u25DF\u25C9 )\u10DA","(\xB4\u25C9\u203F\u25C9\uFF40)","\u0E01\u0E47\u0295\u2022\u0361\u1D25\u2022\u0294 \u0E01\u0E49","\uFF0F/( \u25D5\u203F\u203F\u25D5 )\uFF3C"];function xde({isDefaultModel:e=!1}){let t=Math.max(GPe,Be().length+12),r=ee(),n=EGt[Math.floor(Math.random()*EGt.length)];return Qp.createElement(x,{flexDirection:"column"},Qp.createElement(x,{flexDirection:"column",gap:1,paddingLeft:1,width:"100%"},Qp.createElement(C,null,Qp.createElement(C,null,n)," Welcome to"," ",Qp.createElement(C,{bold:!0},et),Qp.createElement(C,{color:r.secondaryText}," v",Iy.VERSION)),Qp.createElement(Qp.Fragment,null,Qp.createElement(x,{paddingLeft:2,flexDirection:"column",gap:1},Qp.createElement(C,{color:r.secondaryText,italic:!0},"/help for help"),Qp.createElement(C,{color:r.secondaryText},"cwd: ",Be()),Qp.createElement(C,{color:r.secondaryText},"model: ",bo.getConfig().routing.MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A"),Qp.createElement(C,{color:r.secondaryText},"small fast model: ",bo.getConfig().routing.SMALL_FAST_MODEL?.map(o=>`${o.source}__${o.model}`).join(", ")??"N/A")))))}var SS=F(ne(),1);Re();var VJ=F(ne(),1);import{randomUUID as AS}from"crypto";$s();Re();Zt();sr();Re();Ge();import{existsSync as NC,readdirSync as W4n,statSync as K4n}from"fs";import{join as cw,relative as J4n}from"path";import{homedir as V$t}from"os";import{platform as Z4n}from"process";import{readFile as lw}from"fs/promises";sr();EE();gr();import{join as OFn,sep as BFn}from"path";function Up(){if(!Jm())return!1;try{let e=ot();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Zm(){return(OFn(Be(),".hcode","team-memory")+BFn).normalize("NFC")}function _E(e){let t=e.normalize("NFC"),r=Zm();return t.startsWith(r)}var j$t=F(UV(),1);Xo();var H$t=F(UV(),1);sr();Ge();Re();Mp();import{readFile as U$t}from"fs/promises";import{existsSync as sLe,readdirSync as V4n,statSync as j4n}from"fs";import{join as aLe,relative as G$t}from"path";import{homedir as Y4n}from"os";function F$t(e){try{let t=(0,H$t.default)(e),r=t.data.paths,n=[];return typeof r=="string"?n=r.split(",").map(o=>o.trim()).filter(Boolean):Array.isArray(r)&&(n=r.filter(o=>typeof o=="string")),{paths:n,content:t.content.trim()}}catch(t){return Se(t),{paths:[],content:e.trim()}}}function z4n(e,t){return t.length===0?!0:t.some(r=>{try{return Hd(e,r,{matchBase:!0,dot:!0})}catch(n){return Se(n),!1}})}function cLe(e){let t=[];try{if(!sLe(e))return t;let r=V4n(e);for(let n of r){let o=aLe(e,n),i=j4n(o);i.isDirectory()?t.push(...cLe(o)):i.isFile()&&n.endsWith(".md")&&t.push(o)}}catch(r){Se(r)}return t}async function $$t(){let e=[];try{let t=aLe(Y4n(),Fn,"rules");if(sLe(t)){let r=cLe(t);for(let n of r)try{let o=await U$t(n,"utf-8"),{paths:i,content:s}=F$t(o);i.length>0&&e.push({filePath:n,content:s,paths:i,isProjectRule:!1})}catch(o){Se(o)}}}catch(t){Se(t)}try{let t=aLe(Be(),Fn,"rules");if(sLe(t)){let r=cLe(t);for(let n of r)try{let o=await U$t(n,"utf-8"),{paths:i,content:s}=F$t(o);i.length>0&&e.push({filePath:G$t(Be(),n),content:s,paths:i,isProjectRule:!0})}catch(o){Se(o)}}}catch(t){Se(t)}return e}function q$t(e,t){e=ule(e);let r=ule(Be()),n=e.startsWith(r)?G$t(r,e):e;return t.filter(o=>z4n(n,o.paths))}var X4n=`# hawaCodeMd
|
|
679
679
|
Codebase and user instructions are shown below. Be sure to adhere to these instructions. IMPORTANT: These instructions OVERRIDE any default behavior and you MUST follow them exactly as written.`;function e3n(e="default"){let r=Ke.getSessionContext(e).getData("matchedPathRules");return!r||r.length===0?"":r.map(o=>{let i=o.isProjectRule?"project instructions, checked into the codebase":"user's private global instructions for all projects";return`Contents of ${o.filePath} (${i}):
|
|
680
680
|
|
|
681
681
|
${o.content}`}).join(`
|
|
@@ -773,7 +773,7 @@ data: ${JSON.stringify(H)}
|
|
|
773
773
|
Stack trace: `+d.stack)),new Response(c.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var Ege=null,$4e=!1;function Poo(){Ege=null,$4e=!1}kt.on("proxy:changed",Poo);function Loo(){if($4e)return Ege;if($4e=!0,ot().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(Ege=new tXt.ProxyAgent({uri:e}),zt(`[proxy] using proxy: ${e}`)),Ege}function Qoo(){let e=Loo();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function Sge(e){let t=e||process.env.API_TYPE,r=Qoo();switch(t){case"openai":return Ooo(r);case"openai-responses":return Boo(r);case"gemini":return Moo(r);default:return koo(r)}}Cy();var nXt=F(ne(),1);function rXt(e,t){let r=[],n=Math.max(1,Math.floor(t)),o="",i=0;for(let s of e){let a=Uoo(s);o&&i+a>n?(r.push(o),o=s,i=a):(o+=s,i+=a)}return o&&r.push(o),r}function Uoo(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||Foo(t)?0:Hoo(t)?2:1}function Foo(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function Hoo(e){return e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=128591||e>=129280&&e<=129535||e>=131072&&e<=262141)}function R0(e){if(e<6e4)return`${(e/1e3).toFixed(1)}s`;let t=Math.floor(e/36e5),r=Math.floor(e%36e5/6e4),n=(e%6e4/1e3).toFixed(1);return t>0?`${t}h ${r}m ${n}s`:r>0?`${r}m ${n}s`:`${n}s`}function j4e(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let r=Math.floor(t/3600),n=Math.floor(t%3600/60),o=t%60;return r>0?`${r}h ${n}m ${o}s`:`${n}m ${o}s`}function JC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}function yge(e,t,r){let n=[];return typeof e=="number"&&n.push(j4e(e)),typeof t=="number"&&n.push(`${t} ${t===1?"turn":"turns"}`),typeof r=="number"&&n.push(`${JC(r)} tokens`),n.length>0?` (${n.join(" \xB7 ")})`:""}Re();$s();var tu={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function Tge(e,t){tu.totalCost+=e,tu.totalAPIDuration+=t}function bge(e,t){tu.inputTokens+=e,tu.outputTokens+=t,kt.emit("token:change",{inputTokens:tu.inputTokens,outputTokens:tu.outputTokens})}function Cge(e,t){tu.cacheCreationTokens+=e,tu.cacheReadTokens+=t}function gM(){return{inputTokens:tu.inputTokens,outputTokens:tu.outputTokens,cacheCreationTokens:tu.cacheCreationTokens,cacheReadTokens:tu.cacheReadTokens}}function E9(){return tu.totalCost}function Ige(){return Date.now()-tu.startTime}function oXt(){return tu.totalAPIDuration}function iXt(e){tu.currentContextTokens=e}function sXt(){return tu.currentContextTokens}function Goo(){return St.grey(`Total duration (API): ${R0(tu.totalAPIDuration)}
|
|
774
774
|
Total duration (wall): ${R0(Ige())}`)}function aXt(){(0,nXt.useEffect)(()=>{let e=()=>{process.stdout.write(`
|
|
775
775
|
`+Goo()+`
|
|
776
|
-
`);let t=Xn();ps({...t,lastCost:tu.totalCost,lastAPIDuration:tu.totalAPIDuration,lastDuration:Ige(),lastSessionId:n0})};return process.on("exit",e),()=>{process.off("exit",e)}},[])}Re();Ge();Ge();var Y4e="2.4.
|
|
776
|
+
`);let t=Xn();ps({...t,lastCost:tu.totalCost,lastAPIDuration:tu.totalAPIDuration,lastDuration:Ige(),lastSessionId:n0})};return process.on("exit",e),()=>{process.off("exit",e)}},[])}Re();Ge();Ge();var Y4e="2.4.23";globalThis.MACRO={VERSION:Y4e,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 vge=process.env.HAWA_CODE_USER_AGENT||`${Ii}/${Y4e} (${process.env.USER_TYPE})`;Re();Re();Zt();function Jf(e){let t=[];return e.filter(r=>r.type!=="progress"&&r.type!=="reminder").forEach(r=>{switch(r.type){case"user":{let n=Of(t);if(n?.type==="user"){t[t.length-1]=joo(n,r);return}t.push(r);return}case"assistant":t.push(r);return;case"insert":{let n=Of(t);n?.type==="user"&&(t[t.length-1]=$oo(n,r));return}}}),t}function $oo(e,t){return{...e,message:{...e.message,content:Voo(e.message.content,qoo(t.content.content))}}}function qoo(e){return`
|
|
777
777
|
<system-reminder>
|
|
778
778
|
The user sent the following message:
|
|
779
779
|
${e}
|
|
@@ -3514,7 +3514,7 @@ async () => {
|
|
|
3514
3514
|
`).replace(/\n+/g,"\\n").trim(),c=s.length>0?s.join(" "):"(no methods available)";return`- ${i}:${a??""}
|
|
3515
3515
|
- ${c}`}).join(`
|
|
3516
3516
|
`)}async function aQr(){return cqo.replace("{{providers}}",await lqo())}async function uqo(e){let t=[];for(let r of e){if("error"in r)continue;let n={};try{let{tools:o}=await r.client.listTools();for(let i of o)n[i.name]=async s=>sQr(r.client,i.name,s)}catch(o){console.warn(`Failed to list tools for codemode client ${r.name}:`,o);continue}t.push({name:r.name,fns:n})}return t}function cQr(){let e=new Mbe;return{name:"codemode",inputSchema:aqo,inputJSONSchema:{type:"object",properties:{code:{type:"string",description:"JavaScript async arrow function to execute"}},required:["code"]},async description(t){return t?.code?"Execute JavaScript code":aQr()},async prompt(){return aQr()},userFacingName(){return"codemode"},async isEnabled(){return!0},isReadOnly(){return!1},isMcp(){return!1},needsPermissions(){return!0},async validateInput(t){return!t.code||typeof t.code!="string"?{result:!1,message:"code is required"}:{result:!0}},renderResultForAssistant(t){return t.error?`Error: ${t.error}`:tnt(t.result)},renderToolUseMessage(t){return t.code.split(`
|
|
3517
|
-
`)[0]??"codemode"},renderToolResultMessage(t){let r=zLr(t.result);return xN.createElement(x,{flexDirection:"column"},t.error?xN.createElement(x,{flexDirection:"row",key:"error"},xN.createElement(C,null," \u23BF "),xN.createElement(C,{color:"red",key:"error-text"},`Error: ${t.error}`)):null,xN.createElement(x,{flexDirection:"row",key:"result"},xN.createElement(C,null," \u23BF "),xN.createElement(C,{key:"result-text"},r)))},async*call(t,r,n){let o=r??{abortController:new AbortController,readFileTimestamps:{}},i=OJ(),s=Object.keys(i),[a,c]=await Promise.all([Hbe(),Gbe().catch(()=>[])]),l=await uqo(a),u=ont(),d={search:async f=>nQr(f,c,u,s),describe:async f=>iQr(f,c,u),saveSnippet:async(f,A,h)=>{let E={name:f,description:h,code:A,savedAt:Date.now(),connectors:s};return tQr(E),{saved:!0,name:f}}},p=await e.execute(XLr(t.code),l,d);yield{type:"result",data:p,resultForAssistant:p.error?`Error: ${p.error}`:tnt(p.result)}}}}var dqo=L.object({code:L.string().describe("JavaScript async arrow function to execute")}),XH=cQr(),lQr={...XH,name:"codemode",inputSchema:dqo,async description(e){return XH.description(e)},async prompt(){return XH.description()},userFacingName(){return"
|
|
3517
|
+
`)[0]??"codemode"},renderToolResultMessage(t){let r=zLr(t.result);return xN.createElement(x,{flexDirection:"column"},t.error?xN.createElement(x,{flexDirection:"row",key:"error"},xN.createElement(C,null," \u23BF "),xN.createElement(C,{color:"red",key:"error-text"},`Error: ${t.error}`)):null,xN.createElement(x,{flexDirection:"row",key:"result"},xN.createElement(C,null," \u23BF "),xN.createElement(C,{key:"result-text"},r)))},async*call(t,r,n){let o=r??{abortController:new AbortController,readFileTimestamps:{}},i=OJ(),s=Object.keys(i),[a,c]=await Promise.all([Hbe(),Gbe().catch(()=>[])]),l=await uqo(a),u=ont(),d={search:async f=>nQr(f,c,u,s),describe:async f=>iQr(f,c,u),saveSnippet:async(f,A,h)=>{let E={name:f,description:h,code:A,savedAt:Date.now(),connectors:s};return tQr(E),{saved:!0,name:f}}},p=await e.execute(XLr(t.code),l,d);yield{type:"result",data:p,resultForAssistant:p.error?`Error: ${p.error}`:tnt(p.result)}}}}var dqo=L.object({code:L.string().describe("JavaScript async arrow function to execute")}),XH=cQr(),lQr={...XH,name:"codemode",inputSchema:dqo,async description(e){return XH.description(e)},async prompt(){return XH.description()},userFacingName(){return"Code"},async isEnabled(){try{return(await Gbe()).length>0}catch{return!1}},isReadOnly(){return!1},isMcp(){return!1},needsPermissions(){return!0},async validateInput(e){return!e.code||typeof e.code!="string"?{result:!1,message:"code is required"}:{result:!0}},renderResultForAssistant(e){return e.error?`Error: ${e.error}`:XH.renderResultForAssistant(e)},renderToolUseMessage(e){return e.code},renderToolResultMessage(e){return XH.renderToolResultMessage(e)},async*call(e,t,r){yield*XH.call(e,t,r)}};var eG=F(ne(),1);hn();Zt();dz();Ge();var uQr=pc,dQr="\u901A\u8FC7\u5DE5\u5177 name \u4EE3\u7406\u8C03\u7528\u6240\u6709\u5176\u4ED6\u5DE5\u5177\uFF0C\u5E76\u63D0\u4F9B\u83B7\u53D6\u5DE5\u5177\u8BE6\u7EC6\u8BF4\u660E\u4E0E\u5165\u53C2\u7ED3\u6784\u7684\u80FD\u529B",fQr=`You are in Proxy mode. Every tool listed under <available_tools> MUST be invoked through ${pc}. Direct calls to any tool in <available_tools> are strictly forbidden.
|
|
3518
3518
|
|
|
3519
3519
|
## Discovery-First Rule
|
|
3520
3520
|
If you have NOT used a tool in this conversation, you MUST run a discovery pass first. Never guess method names, parameter names, types, or structure.
|
|
@@ -3694,7 +3694,7 @@ Return ONLY a JSON object with the following format:
|
|
|
3694
3694
|
|
|
3695
3695
|
> This memory file was truncated (${i?`${fnt} byte limit`:`first ${dnt} lines`}). Use the Read tool to view the complete file at: ${r}`:"";return{path:r,content:s+c}}catch(n){return Se(`[memoryRecall] failed to read memory file ${r}: ${n}`),null}}))).filter(r=>r!==null)}EE();function BQr(e){return typeof e=="string"?{type:"text",text:e}:e}function Yqo(e){if(typeof e=="string")return e;let t=[];if(Array.isArray(e))for(let r of e)t.push(BQr(r));else t.push(BQr(e));return t}async function zqo(e,t,r){if(process.env.USER_TYPE!=="ant"||!r||!await $Dr()){let i=await t();return e.abortController.signal.aborted?{message:null,shouldSkipPermissionCheck:!1}:{message:i,shouldSkipPermissionCheck:!1}}let[n,o]=await Promise.all([t(),t()]);return e.abortController.signal.aborted?{message:null,shouldSkipPermissionCheck:!1}:o.isApiErrorMessage?{message:n,shouldSkipPermissionCheck:!1}:n.isApiErrorMessage?{message:o,shouldSkipPermissionCheck:!1}:qDr(n,o)?await r(n,o):{message:n,shouldSkipPermissionCheck:!1}}async function*QJ(e,t,r,n,o,i){o.hookContext={hooks:ot().hooks},Ke.onQueryStart(),KDr.tryStart();let s=[...e];for(;;){for await(let d of d_([...s],t,r,n,o,i))yield d,s.push(d);let a=[];if(ao.needNotification()&&a.push(...await ao.takeNotificationMessages()),Hi.needNotification()){let d=await Hi.takeNotificationMessages();d&&a.push(...d)}let c=await Os.takeTeamLeadMailInbox();c&&c.length>0&&a.push({type:"text",text:Os.formatMessagesForContext(c)});let u=Ke.getSessionContext(o.agentId).takePendingPrompts();if(u.length>0){let d=u.join(`
|
|
3696
3696
|
`);a.push({type:"text",text:d})}if(a.length>0){let d=yt(a);yield d,s.push(d);continue}for await(let d of WDr.tryStop(s,t,r,n,o))yield d,s.push(d);if(s.length>0&&s[s.length-1].type!=="user")break}!o.abortController.signal.aborted&&!ot().disableSuggestion&&xQr.getSuggestionPrompt(s,o.abortController.signal).then(a=>{a&&kt.emit(Woe,a)}),o.abortController.signal.aborted||Wqo(s,t,r,o).catch(a=>{Se(a)});try{if(at.isLazyToolEnable()){let a=Ke.getInQueryContext()[Vh];a&&a.size>0&&(a=[...a],yield yt(`<system-notification> unload ${a.map(c=>c+" tool").join(", ")} success, must be reloaded before their next use. </system-notification>`))}}catch(a){throw a}Ke.onQueryEnd(null,o.abortController.signal.aborted)}async function Wqo(e,t,r,n){let o=n;n.lazyToolMode==="loading"&&n.options._tools&&(o={...n,options:{...n.options,tools:n.options._tools}});let i={messages:[...e],systemPrompt:t,userContext:r,systemContext:await wi(),toolUseContext:o,querySource:"repl_main_thread"};DQr(i).catch(s=>{Se(s)}),bQr(i).catch(s=>{Se(s)})}async function*d_(e,t,r,n,o,i){o.turns||(o.turns={count:0}),o.turns.count++,ot();let s=o.lazyToolMode==="proxy",a=o.lazyToolMode==="loading";if(s)o.options._tools||(o.options._tools=o.options.tools),o.options.tools=o.options._tools.filter(q=>q.name===pc||q.name===eie);else if(a){o.options._tools||(o.options._tools=o.options.tools);let q=Ke.getInQueryContext(o.agentId)[Vh],G=ye=>ye.name===Dd||ye.name===yu,ae=o.options._tools.filter(ye=>Wh.includes(ye.name)&&!G(ye)),ce=new Map(o.options._tools.map(ye=>[ye.name,ye])),Q=q?[...q].filter(ye=>!Wh.includes(ye)&&ce.has(ye)).map(ye=>ce.get(ye)):[],ge=o.options._tools.filter(G);o.options.tools=[...ae,...Q,...ge]}else o.options._tools&&(o.options.tools=o.options._tools,delete o.options._tools);e=tie(e);let{messages:c,wasCompacted:l}=await nar(e,o);if(l){e=c;for(let q of e)yield q}tf("session:startup",{agentId:o.agentId,messages:e.length,timestamp:Date.now(),context:r||{}});let u=e.filter(q=>q.type==="user").pop();if(u&&u.message.content){let q=u.message.content;typeof q=="string"&&jDr(q).catch(G=>{Se(G)})}nVo(o.agentId,u,o.abortController.signal);let{systemPrompt:d,reminders:p}=await Tar(t,r,{agentId:o.agentId,permissionMode:o.options?.permissionMode,tools:o.options.tools,allTools:o.options._tools??o.options.tools,lazyToolMode:o.lazyToolMode},e),f=Ke.getInQueryContext()[eO];if(f&&f.filePath&&!Ke.getInQueryContext().open_in_ide&&(yield PT("File opened in IDE: "+f.filePath),Ke.getInQueryContext().open_in_ide=!0),!o.agentName){let q=await Os.takeMailInbox(Os.getCurrentTeamName(),o.agentName||ex);if(q&&q.length>0){let G=Os.formatMessagesForContext(q),ae=yt([{type:"text",text:G}]);yield ae,e.push(ae)}}let h=Ke.getSessionContext(o.agentId).takePendingPrompts();if(h&&h.length>0){let q=LQr(h.join(`
|
|
3697
|
-
`));yield q,e.push(q)}let E=tVo(e,p);function S(){return zc(_g.applyToMessages(TOr(Jf(e))),d,o.options.tools,o.abortController.signal,{dangerouslySkipPermissions:o.options.dangerouslySkipPermissions??!1,model:o.options.slowAndCapableModel,prependCLISysprompt:!0,agentId:o.agentId,thinking:o.options.thinking},o)}let b=await zqo(o,S,i);if(b.message===null){yield fr(nl);return}let I=b.message;if(process.env[E8]==="true")try{I.message.content=I.message.content.map(q=>{if(q.type==="tool_use"){let G=o.options.tools.find(ae=>ae.name===q.name);if(G.isMcp?.()){let ae=G.inputSchema.safeParse(q.input);return ae.success?q.input=ae.data:(X("\u6A21\u578B\u8FD4\u56DE\u7684\u5DE5\u5177\u975E\u6CD5\uFF0C\u9700\u8981\u8FDB\u884C\u4FEE\u590D "+q.input),q.input=wQr(q.input)),q}else if(G?.isFixSchema?.()){let ae=G.inputSchema.safeParse(q.input);return ae.success&&(q.input=ae.data),q}}return q})}catch(q){X(`Error in fixing tool input schema: ${q}`)}let w=b.shouldSkipPermissionCheck,O=await wi();XDr([...e,I],t,r,O,o,o.agentId?"subagent":"repl_main_thread").catch(q=>{Se(q)}),yield I;let M=I.message.content.filter(q=>q.type==="tool_use");if(!M.length)return;let H=await z$t(M,o.agentId);if(H)for(let q of H)yield q;o={...o};let z=[];for await(let q of Kqo(M,I,n,o,w,e))yield q,q.type==="user"&&z.push(q);if(o.abortController.signal.aborted){let q=new Set(z.flatMap(G=>G.message.content.filter(ae=>ae.type==="tool_result").map(ae=>ae.tool_use_id)));for(let G of M)if(!q.has(G.id)){let ae=yt([Ybe(G.id)]);yield ae,z.push(ae)}yield fr(rG);return}let U=z.sort((q,G)=>{let ae=M.findIndex(Q=>Q.id===q.message.content[0].id),ce=M.findIndex(Q=>Q.id===G.message.content[0].id);return ae-ce});eVo(e,E),yield*await d_([...e,I,...U],t,r,n,o,i)}async function*Kqo(e,t,r,n,o,i){let s=new Rhe;s.setAbortSignal(n.abortController.signal);for(let a of e){let c=new xhe,{toolName:l,isProxyCall:u}=kQr(a,n),d=PQr(n,l,u);d?(c.sync=!d.isReadOnly(),c.toolName=d.name):c.sync=!0,c.callable=()=>Jqo(a,new Set(e.map(p=>p.id)),t,r,n,o,i),s.addTask(c)}for await(let a of s.getResult())yield a}function kQr(e,t){let r=e.input??{};return t.lazyToolMode==="proxy"&&e.name===pc&&(r.action??"call")==="call"&&r.name?{toolName:String(r.name),toolInput:r.input??{},isProxyCall:!0}:{toolName:e.name,toolInput:r,isProxyCall:!1}}function PQr(e,t,r){return e.options.tools.find(n=>n.name===t)??(r?e.options._tools?.find(n=>n.name===t):void 0)}async function*Jqo(e,t,r,n,o,i,s){try{let{toolName:a,toolInput:c,isProxyCall:l}=kQr(e,o),u=PQr(o,a,l);if(!u){Ue("tengu_tool_use_error",{error:`No such tool available: ${a}`,messageID:r.message.id,toolName:a,toolUseID:e.id});let p=o.lazyToolMode==="proxy",f=o.lazyToolMode==="loading";yield yt([{type:"tool_result",content:p?`Error: No such tool available: ${a}. Use ProxyTool({action:'describe'}) to view available tools.`:f?`Error: No such tool available: ${a}, Use the ToolLoader to load it`:`Error: No such tool available: ${a}`,is_error:!0,tool_use_id:e.id}]);return}let d=c;try{if(o.abortController.signal.aborted){Ue("tengu_tool_use_cancelled",{toolName:u.name,toolUseID:e.id}),yield yt([Ybe(e.id)]);return}for await(let p of Xqo(u,e.id,t,d,o,n,r,i,s))yield p}catch(p){let f=mnt(p);Se(p),yield yt([{type:"tool_result",content:`call tool ${e.id} error ${f} `,is_error:!0,tool_use_id:e.id}])}}catch(a){let c=mnt(a);yield yt([{type:"tool_result",content:`call tool ${e.id} error ${c} `,is_error:!0,tool_use_id:e.id}])}}function Zqo(e,t){switch(e){case mo:{let{command:r,timeout:n,run_in_background:o}=mo.inputSchema.parse(t);return{command:r.replace(`cd ${Be()} && `,""),...n?{timeout:n}:{},...o!==void 0?{run_in_background:o}:{}}}default:return t}}async function*Xqo(e,t,r,n,o,i,s,a,c){let l=e.inputSchema.safeParse(n);if(!l.success){Ue("tengu_tool_use_error",{error:`InputValidationError: ${l.error.message}`,messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200)}),yield yt([{type:"tool_result",content:`InputValidationError: ${l.error.message}`,is_error:!0,tool_use_id:t}]);return}let u=Zqo(e,n),d=await e.validateInput?.(u,c&&c.length>0?{...o,historyMessages:c}:o);if(d?.result===!1){Ue("tengu_tool_use_error",{error:d?.message.slice(0,2e3),messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200),...d?.meta??{}}),yield yt([{type:"tool_result",content:d.message,is_error:!0,tool_use_id:t}]);return}let p=new QK(o.hookContext?.hooks),f=Ke.getSessionContext(o.agentId).getSessionId(),A={session_id:f,transcript_path:yl(),cwd:Be(),permission_mode:o.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PreToolUse",tool_name:e.name,tool_input:u,tool_use_id:t},h={hookWarning:null,forceCheck:!1},E=await p.execute(A);if(E){if(E.systemMessage&&!E.suppressOutput&&(yield DC(t,r,fr(E.systemMessage),[],[],{multiline:!1,freeze:!0})),E.continue===!1){Ue("tengu_tool_use_blocked_by_hook",{toolName:e.name,toolUseID:t,reason:E.stopReason?"Error: "+E.stopReason:"Tool execution blocked by PreToolUse hook"}),yield yt([{type:"tool_result",content:E.stopReason?"Error: "+E.stopReason:"Tool execution blocked by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(E.hookSpecificOutput?.permissionDecision==="deny"){Ue("tengu_tool_use_denied_by_hook",{toolName:e.name,toolUseID:t,reason:E.hookSpecificOutput.permissionDecisionReason||"Denied by PreToolUse hook"}),yield yt([{type:"tool_result",content:E.hookSpecificOutput.permissionDecisionReason||"Tool execution denied by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(E.hookSpecificOutput?.permissionDecision==="ask"?(a=!1,h.forceCheck=!0):E.hookSpecificOutput?.permissionDecision==="allow"&&(yield DC(t,r,fr(E.hookSpecificOutput.permissionDecisionReason||"Tool execution allowed by PreToolUse hook"),[],[],{multiline:!1,freeze:!0})),E.hookSpecificOutput?.updatedInput)for(let b in E.hookSpecificOutput.updatedInput)b in u&&(u[b]=E.hookSpecificOutput.updatedInput[b]);h.hookWarning=`Hook PreToolUse:${e.name} requires confirmation for this command:${E.hookSpecificOutput.permissionDecisionReason}`}let S=a?{result:!0}:await i(e,u,o,s,t,h,c);if(S.result===!1){yield yt([{type:"tool_result",content:S.message,is_error:!0,tool_use_id:t}]);return}try{o.currentToolUseID=t;let b=e.call(u,c&&c.length>0?{...o,historyMessages:c}:o,i);for await(let{value:I,aborted:w}of zDr(b,o.abortController.signal)){if(w){Za.abortResponse(t);let O=new SH(o.hookContext?.hooks),M={session_id:f,transcript_path:yl(),cwd:Be(),permission_mode:o.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUseFailure",tool_name:e.name,tool_input:u,tool_use_id:t,error:"User interrupted the tool execution",is_interrupt:!0};O.execute(M).catch(H=>{X("PostToolUseFailure hook error during interrupt:",H)}),yield yt([Ybe(t)]);return}switch(I.type){case"result":Ue("tengu_tool_use_success",{messageID:s.message.id,toolName:e.name});let O=new UK(o.hookContext?.hooks),M={session_id:f,transcript_path:yl(),cwd:Be(),permission_mode:o.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUse",tool_name:e.name,tool_input:u,tool_response:I.data||{},tool_use_id:t},H=await O.execute(M);H&&H.decision==="block"&&(yield DC(t,r,fr(H.reason?`PostToolUse:Read hook blocking error:${H.reason}`:"Tool execution blocked by PostToolUse hook"),[],[],{multiline:!1,freeze:!0}));let z="";if(H&&H.hookSpecificOutput?.additionalContext&&(z=`<system-reminder>
|
|
3697
|
+
`));yield q,e.push(q)}let E=tVo(e,p);function S(){return zc(_g.applyToMessages(TOr(Jf(e))),d,o.options.tools,o.abortController.signal,{dangerouslySkipPermissions:o.options.dangerouslySkipPermissions??!1,model:o.options.slowAndCapableModel,prependCLISysprompt:!0,agentId:o.agentId,thinking:o.options.thinking},o)}let b=await zqo(o,S,i);if(b.message===null){yield fr(nl);return}let I=b.message;if(process.env[E8]==="true")try{I.message.content=I.message.content.map(q=>{if(q.type==="tool_use"){let G=o.options.tools.find(ae=>ae.name===q.name);if(G.isMcp?.()){let ae=G.inputSchema.safeParse(q.input);return ae.success?q.input=ae.data:(X("\u6A21\u578B\u8FD4\u56DE\u7684\u5DE5\u5177\u975E\u6CD5\uFF0C\u9700\u8981\u8FDB\u884C\u4FEE\u590D "+q.input),q.input=wQr(q.input)),q}else if(G?.isFixSchema?.()){let ae=G.inputSchema.safeParse(q.input);return ae.success&&(q.input=ae.data),q}}return q})}catch(q){X(`Error in fixing tool input schema: ${q}`)}let w=b.shouldSkipPermissionCheck,O=await wi();XDr([...e,I],t,r,O,o,o.agentId?"subagent":"repl_main_thread").catch(q=>{Se(q)}),yield I;let M=I.message.content.filter(q=>q.type==="tool_use");if(!M.length)return;let H=await z$t(M,o.agentId);if(H)for(let q of H)yield q;o={...o};let z=[];for await(let q of Kqo(M,I,n,o,w,e))yield q,q.type==="user"&&z.push(q);if(o.abortController.signal.aborted){let q=new Set(z.flatMap(G=>G.message.content.filter(ae=>ae.type==="tool_result").map(ae=>ae.tool_use_id)));for(let G of M)if(!q.has(G.id)){let ae=yt([Ybe(G.id)]);yield ae,z.push(ae)}yield fr(rG);return}let U=z.sort((q,G)=>{let ae=M.findIndex(Q=>Q.id===q.message.content[0].id),ce=M.findIndex(Q=>Q.id===G.message.content[0].id);return ae-ce});eVo(e,E),yield*await d_([...e,I,...U],t,r,n,o,i)}async function*Kqo(e,t,r,n,o,i){let s=new Rhe;s.setAbortSignal(n.abortController.signal);for(let a of e){let c=new xhe,{toolName:l,isProxyCall:u}=kQr(a,n),d=PQr(n,l,u);d?(c.sync=!d.isReadOnly(),c.toolName=d.name):c.sync=!0,c.callable=()=>Jqo(a,new Set(e.map(p=>p.id)),t,r,n,o,i),s.addTask(c)}for await(let a of s.getResult())yield a}function kQr(e,t){let r=e.input??{};return t.lazyToolMode==="proxy"&&e.name===pc&&(r.action??"call")==="call"&&r.name?{toolName:String(r.name),toolInput:r.input??{},isProxyCall:!0}:{toolName:e.name,toolInput:r,isProxyCall:!1}}function PQr(e,t,r){return e.options.tools.find(n=>n.name===t)??(r?e.options._tools?.find(n=>n.name===t):void 0)}async function*Jqo(e,t,r,n,o,i,s){try{let{toolName:a,toolInput:c,isProxyCall:l}=kQr(e,o),u=PQr(o,a,l);if(!u){Ue("tengu_tool_use_error",{error:`No such tool available: ${a}`,messageID:r.message.id,toolName:a,toolUseID:e.id});let p=o.lazyToolMode==="proxy",f=o.lazyToolMode==="loading";yield yt([{type:"tool_result",content:p?`Error: No such tool available: ${a}. Use ProxyTool({action:'describe'}) to view available tools.`:f?`Error: No such tool available: ${a}, Use the ToolLoader to load it`:`Error: No such tool available: ${a}`,is_error:!0,tool_use_id:e.id}]);return}let d=c;try{if(o.abortController.signal.aborted){Ue("tengu_tool_use_cancelled",{toolName:u.name,toolUseID:e.id}),yield yt([Ybe(e.id)]);return}for await(let p of Xqo(u,e.id,t,d,o,n,r,i,s))yield p}catch(p){let f=mnt(p);Se(p),yield yt([{type:"tool_result",content:`call tool ${e.id} error ${f} `,is_error:!0,tool_use_id:e.id}])}}catch(a){let c=mnt(a);yield yt([{type:"tool_result",content:`call tool ${e.id} error ${c} `,is_error:!0,tool_use_id:e.id}])}}function Zqo(e,t){switch(e){case mo:{let{command:r,timeout:n,run_in_background:o}=mo.inputSchema.parse(t);return{command:r.replace(`cd ${Be()} && `,""),...n?{timeout:n}:{},...o!==void 0?{run_in_background:o}:{}}}default:return t}}async function*Xqo(e,t,r,n,o,i,s,a,c){let l=e.inputSchema.safeParse(n);if(!l.success){Ue("tengu_tool_use_error",{error:`InputValidationError: ${l.error.message}`,messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200)});let b=o.lazyToolMode==="proxy"?` Use ProxyTool({action:'describe', name:'${e.name}'}) to view the correct parameter structure before retrying.`:"";yield yt([{type:"tool_result",content:`InputValidationError: ${l.error.message}${b}`,is_error:!0,tool_use_id:t}]);return}let u=Zqo(e,n),d=await e.validateInput?.(u,c&&c.length>0?{...o,historyMessages:c}:o);if(d?.result===!1){Ue("tengu_tool_use_error",{error:d?.message.slice(0,2e3),messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200),...d?.meta??{}}),yield yt([{type:"tool_result",content:d.message,is_error:!0,tool_use_id:t}]);return}let p=new QK(o.hookContext?.hooks),f=Ke.getSessionContext(o.agentId).getSessionId(),A={session_id:f,transcript_path:yl(),cwd:Be(),permission_mode:o.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PreToolUse",tool_name:e.name,tool_input:u,tool_use_id:t},h={hookWarning:null,forceCheck:!1},E=await p.execute(A);if(E){if(E.systemMessage&&!E.suppressOutput&&(yield DC(t,r,fr(E.systemMessage),[],[],{multiline:!1,freeze:!0})),E.continue===!1){Ue("tengu_tool_use_blocked_by_hook",{toolName:e.name,toolUseID:t,reason:E.stopReason?"Error: "+E.stopReason:"Tool execution blocked by PreToolUse hook"}),yield yt([{type:"tool_result",content:E.stopReason?"Error: "+E.stopReason:"Tool execution blocked by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(E.hookSpecificOutput?.permissionDecision==="deny"){Ue("tengu_tool_use_denied_by_hook",{toolName:e.name,toolUseID:t,reason:E.hookSpecificOutput.permissionDecisionReason||"Denied by PreToolUse hook"}),yield yt([{type:"tool_result",content:E.hookSpecificOutput.permissionDecisionReason||"Tool execution denied by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(E.hookSpecificOutput?.permissionDecision==="ask"?(a=!1,h.forceCheck=!0):E.hookSpecificOutput?.permissionDecision==="allow"&&(yield DC(t,r,fr(E.hookSpecificOutput.permissionDecisionReason||"Tool execution allowed by PreToolUse hook"),[],[],{multiline:!1,freeze:!0})),E.hookSpecificOutput?.updatedInput)for(let b in E.hookSpecificOutput.updatedInput)b in u&&(u[b]=E.hookSpecificOutput.updatedInput[b]);h.hookWarning=`Hook PreToolUse:${e.name} requires confirmation for this command:${E.hookSpecificOutput.permissionDecisionReason}`}let S=a?{result:!0}:await i(e,u,o,s,t,h,c);if(S.result===!1){yield yt([{type:"tool_result",content:S.message,is_error:!0,tool_use_id:t}]);return}try{o.currentToolUseID=t;let b=e.call(u,c&&c.length>0?{...o,historyMessages:c}:o,i);for await(let{value:I,aborted:w}of zDr(b,o.abortController.signal)){if(w){Za.abortResponse(t);let O=new SH(o.hookContext?.hooks),M={session_id:f,transcript_path:yl(),cwd:Be(),permission_mode:o.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUseFailure",tool_name:e.name,tool_input:u,tool_use_id:t,error:"User interrupted the tool execution",is_interrupt:!0};O.execute(M).catch(H=>{X("PostToolUseFailure hook error during interrupt:",H)}),yield yt([Ybe(t)]);return}switch(I.type){case"result":Ue("tengu_tool_use_success",{messageID:s.message.id,toolName:e.name});let O=new UK(o.hookContext?.hooks),M={session_id:f,transcript_path:yl(),cwd:Be(),permission_mode:o.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUse",tool_name:e.name,tool_input:u,tool_response:I.data||{},tool_use_id:t},H=await O.execute(M);H&&H.decision==="block"&&(yield DC(t,r,fr(H.reason?`PostToolUse:Read hook blocking error:${H.reason}`:"Tool execution blocked by PostToolUse hook"),[],[],{multiline:!1,freeze:!0}));let z="";if(H&&H.hookSpecificOutput?.additionalContext&&(z=`<system-reminder>
|
|
3698
3698
|
PostToolUse:${e.name} hook additional context: ${H.hookSpecificOutput.additionalContext}
|
|
3699
3699
|
</system-reminder>`),typeof I.resultForAssistant=="function"){let U=I.resultForAssistant(t);if(z&&Array.isArray(U)){let q=U.find(G=>G.type==="tool_result");q&&(Array.isArray(q.content)||(q.content=[{type:"text",text:q.content}]),q.content.push({type:"text",text:z}))}yield yt(U,{data:I.data,resultForAssistant:I.resultForAssistant})}else{let U=Yqo(I.resultForAssistant),q=[];Array.isArray(U)?q.push(...U):U&&q.push({type:"text",text:U}),z&&q.push({type:"text",text:z}),yield yt([{type:"tool_result",content:q,tool_use_id:t}],{data:I.data,resultForAssistant:I.resultForAssistant})}return;case"progress":Ue("tengu_tool_use_progress",{messageID:s.message.id,toolName:e.name}),yield DC(t,r,I.content,I.normalizedMessages,I.tools,I.meta)}}}catch(b){X("\u5DE5\u5177\u6267\u884C\u9519\u8BEF\uFF1A",b);let I=mnt(b);Ue("tengu_tool_use_error",{error:I.slice(0,2e3),messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,1e3)});let w=new SH(o.hookContext?.hooks),O={session_id:f,transcript_path:yl(),cwd:Be(),permission_mode:o.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUseFailure",tool_name:e.name,tool_input:u,tool_use_id:t,error:I,is_interrupt:!1},M=await w.execute(O),H="";M?.hookSpecificOutput?.additionalContext&&(H=`<system-reminder>
|
|
3700
3700
|
PostToolUseFailure:${e.name} hook additional context: ${M.hookSpecificOutput.additionalContext}
|
package/hands.js
CHANGED
|
@@ -756,7 +756,7 @@ data: ${JSON.stringify(z)}
|
|
|
756
756
|
`);a=Q.pop()||"";for(let z of Q){let Y=z.trim();if(!(!Y||Y==="data: [DONE]"))if(Y.startsWith("data: ")){let q=Y.slice(6);try{let G=JSON.parse(q);w(G)}catch(G){this.logger&&this.logger.error({err:G,line:Y},"Failed to parse Gemini SSE chunk")}}else try{let q=JSON.parse(Y);w(q)}catch{}}};(async()=>{try{for(;;){let{value:Q,done:z}=await s.read();if(z)break;a+=n.decode(Q,{stream:!0}),O()}I()}catch(Q){o.error(Q)}})()}})}convertGeminiResponseToAnthropic(t){this.logger&&this.logger.debug({response:t},"Original Gemini response");try{if(!t.candidates||!t.candidates[0])throw new Error("No candidates found in Gemini response");let r=t.candidates[0],n=[];r.content&&r.content.parts&&r.content.parts.forEach(o=>{if(o.text&&n.push({type:"text",text:o.text}),o.functionCall){let s=`toolu_${UB()}`,a=o.functionCall.thoughtSignature||o.functionCall.thought_signature||null;n.push({type:"tool_use",id:s,name:o.functionCall.name,input:o.functionCall.args||{},thought_signature:a})}}),r.groundingMetadata&&(this.logger&&this.logger.debug({groundingMetadata:r.groundingMetadata},"Processing grounding metadata"),r.groundingMetadata.webSearchQueries&&n.push({type:"text",text:`
|
|
757
757
|
|
|
758
758
|
[Search queries used: ${r.groundingMetadata.webSearchQueries.join(", ")}]`}));let i={id:`msg_${Math.random().toString(36).slice(2)}`,type:"message",role:"assistant",model:t.modelVersion||"gemini",content:n,stop_reason:r.finishReason?r.finishReason==="STOP"&&n.some(o=>o.type==="tool_use")?"tool_use":this.mapGeminiFinishReason(r.finishReason):"end_turn",stop_sequence:null,usage:{input_tokens:t.usageMetadata?.promptTokenCount||0,output_tokens:t.usageMetadata?.candidatesTokenCount||0}};return this.logger&&this.logger.debug({result:i},"Conversion complete, final Anthropic response"),i}catch{throw R6r(`Provider error: ${JSON.stringify(t)}`,500,"provider_error")}}mapGeminiFinishReason(t){switch(t){case"STOP":return"end_turn";case"MAX_TOKENS":return"max_tokens";case"SAFETY":case"RECITATION":return"stop_sequence";default:return"end_turn"}}},cbe=new lbe;var Fmt=X(Qmt(),1);or();us();function Lg(e){return e?typeof e.entries=="function"?Object.fromEntries(e.entries()):{...e}:{}}function Pmt(e){let t=String(e?.["x-thinking-level"]??"medium").toLowerCase();return["off","low","medium","high"].includes(t)?t:"medium"}function Gen(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t}}function zen(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t,summary:"auto"}}function jen(e,t="chat"){let r={request:{},response:{},openai:{request:{},response:{}}};return r.request.model=e.request.body.model,r.request.messages=e.request.body.messages,r.request.system=e.request.body.system,r.response.content=e.response.body.content,r.response.usage=e.response.body?.usage,t==="responses"?(r.openai.request.model=e.openai.request.body.model,r.openai.request.input=e.openai.request.body.input,r.openai.response.output=e.openai.response.body?.output,r.openai.response.usage=e.openai.response.body?.usage):(r.openai.request.model=e.openai.request.body.model,r.openai.request.messages=e.openai.request.body.messages,r.openai.response.choices=e.openai.response.body.choices,r.openai.response.usage=e.openai.response.body?.usage),r}function U5(e,t,r){Rz(t,e),Nz(t,jen(e,r),r)}function w2(e){let t=[],r=e.getReader(),n,i=new Promise(l=>n=l),o=!1,s=()=>{o||(o=!0,n(Buffer.concat(t).toString("utf8")))};return{stream:new ReadableStream({async pull(l){try{let{done:c,value:u}=await r.read();if(c){l.close(),s();return}t.push(u),l.enqueue(u)}catch(c){l.error(c),s()}},cancel(l){r.cancel(l).catch(()=>{}),s()}}),done:i}}function H5(e){let t=new Headers(e);return t.delete("content-encoding"),t.delete("content-length"),t.delete("transfer-encoding"),t}function PIe(e,t,r,n,i){let o;try{o={type:"error",error:{type:"api_error",message:JSON.parse(i).error?.message??`${e}: ${n}`,code:`${t}_${r}_ERROR`}}}catch{o={type:"error",error:{type:"api_error",message:`${e}: ${n}`,code:`${t}_${r}_ERROR`}}}return new Response(JSON.stringify(o),{status:r,statusText:n,headers:{"Content-Type":"application/json"}})}var Lmt=["/v1/messages"];function LIe(e){let t;try{typeof e=="string"?t=new bv(e):e instanceof bv?t=e:t=new bv(e.url)}catch{return""}let r=t.pathname;for(let n of Lmt){let i=r.indexOf(n);if(i!==-1)return t.origin+r.slice(0,i)}return t.origin}function qZ(e,t){let r=typeof e=="string"?e:e instanceof bv?e.toString():e.url,n;try{n=new bv(r).pathname}catch{return!1}return Lmt.some(i=>n.includes(i))&&(t.method==="POST"||t.method==="post")}function Yen(e){return async(t,r)=>{if(!qZ(t,r))return e(t,r);let n=JSON.parse(r.body),i=await GK.transformRequestOut(n),o=LIe(t)+"/chat/completions",s=Lg(r.headers),a=s.authorization??s.Authorization??"";Gen(i,Pmt(s));let l=await e(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:a},body:JSON.stringify(i),signal:r.signal});if(!l.ok){let _=await l.text();return J(`OpenAI Chat Completions API error: ${l.status}`,{url:o,errorResponse:_}),PIe("OpenAI Chat Completions API error","OPENROUTER",l.status,l.statusText,_)}let c=n.stream===!0,u=s["x-agent-id"],f={request:{url:o,method:r.method,headers:s,body:n},response:{status:l.status,statusText:l.statusText,headers:Lg(l.headers)},openai:{request:{body:i},response:{}}};if(!c){let _=await l.text(),C=new Response(_,{status:l.status,statusText:l.statusText,headers:H5(l.headers)}),S=await GK.transformResponseIn(C,n),I=await S.text();try{U5({...f,openai:{...f.openai,response:{body:JSON.parse(_)}},response:{...f.response,body:JSON.parse(I)}},u)}catch(w){J("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Chat \u975E\u6D41\u5F0F):",w)}return new Response(I,{status:S.status,statusText:S.statusText,headers:S.headers})}let g=w2(l.body),m=new Response(g.stream,{status:l.status,statusText:l.statusText,headers:H5(l.headers)}),A=await GK.transformResponseIn(m,n),E=w2(A.body);return Promise.all([g.done,E.done]).then(async([_,C])=>{try{U5({...f,openai:{...f.openai,response:{body:await fot(_)}},response:{...f.response,body:await BU(C)}},u)}catch(S){J("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Chat \u6D41\u5F0F):"+S?.stack)}}).catch(_=>J("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Chat):"+_)),new Response(E.stream,{status:A.status,statusText:A.statusText,headers:A.headers})}}function Ven(e){return async(t,r)=>{if(!qZ(t,r))return e(t,r);let n=JSON.parse(r.body),i=await zK.transformRequestOut(n),o=Lg(r.headers);zen(i,Pmt(o));let s=JSON.stringify(i),l=LIe(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}),PIe("OpenAI Responses API error","RESPONSES",u.status,u.statusText,S)}let f=n.stream===!0,g=o["x-agent-id"],m={request:{url:l,method:r.method,headers:o,body:n},response:{status:u.status,statusText:u.statusText,headers:Lg(u.headers)},openai:{request:{body:i},response:{}}};if(!f){let S=await u.text(),I=new Response(S,{status:u.status,statusText:u.statusText,headers:H5(u.headers)}),w=await zK.transformResponseIn(I,n),O=await w.text();try{U5({...m,openai:{...m.openai,response:{body:JSON.parse(S)}},response:{...m.response,body:JSON.parse(O)}},g,"responses")}catch(Q){J("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u975E\u6D41\u5F0F):",Q)}return new Response(O,{status:w.status,statusText:w.statusText,headers:w.headers})}let A=w2(u.body),E=new Response(A.stream,{status:u.status,statusText:u.statusText,headers:H5(u.headers)}),_=await zK.transformResponseIn(E,n),C=w2(_.body);return Promise.all([A.done,C.done]).then(async([S,I])=>{try{U5({...m,openai:{...m.openai,response:{body:await dot(S)}},response:{...m.response,body:await BU(I)}},g,"responses")}catch(w){J("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u6D41\u5F0F):"+w?.stack)}}).catch(S=>J("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Responses):"+S)),new Response(C.stream,{status:_.status,statusText:_.statusText,headers:_.headers})}}function Wen(e){return async(t,r)=>{if(!qZ(t,r))return e(t,r);let n=JSON.parse(r.body),i=Lg(r.headers),o=await cbe.transformRequestOut(n),s=JSON.stringify(o),a=LIe(t)+`/models/${n.model}:streamGenerateContent?alt=sse`,l=i.authorization??i.Authorization??"",c;try{c=await e(a,{method:"POST",headers:{"Content-Type":"application/json","x-goog-api-key":String(l).replace(/^Bearer\s+/i,"").trim()},body:s,signal:r.signal})}catch(C){throw J("gemini request error:",C),C}if(!c.ok){let C=await c.text();return J(`Gemini API error response: ${c.status} ${c.statusText}`,{url:a,status:c.status,errorResponse:C}),PIe("Gemini API error","Gemini",c.status,c.statusText,C)}let u=n.stream===!0,f=i["x-agent-id"],g={request:{url:a,method:r.method,headers:Lg(r.headers),body:n},response:{status:c.status,statusText:c.statusText,headers:Lg(c.headers)},openai:{request:{body:o},response:{}}},m=w2(c.body),A=new Response(m.stream,{status:c.status,statusText:c.statusText,headers:H5(c.headers)}),E=await cbe.transformResponseIn(A),_=w2(E.body);return Promise.all([m.done,_.done]).then(async([C,S])=>{try{let I=u?pot(C):JSON.parse(C),w=u?await BU(S):JSON.parse(S);U5({...g,openai:{...g.openai,response:{body:I}},response:{...g.response,body:w}},f)}catch(I){J("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Gemini):"+I?.stack)}}).catch(C=>J("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Gemini):"+C)),new Response(_.stream,{status:E.status,statusText:E.statusText,headers:E.headers})}}function Ken(e){return async(t,r)=>{if(!qZ(t,r))return e(t,r);let n=r.body;if(r.body)try{let f=JSON.parse(r.body);n=JSON.stringify(f)}catch{}let i=Lg(r.headers);["1","true"].includes(String(process.env.HAWA_CODE_X_API_KEY_DISABLED??"").toLowerCase())&&(delete i["x-api-key"],delete i["X-API-Key"]),["1","true"].includes(String(process.env.HAWA_CODE_AUTH_DISABLED??"").toLowerCase())&&(delete i.authorization,delete i.Authorization),delete i["content-length"];let a=await e(t,{method:r.method,headers:i,body:n,signal:r.signal});if(!a.ok){let f=await a.text();J(`API error response: ${a.status} ${a.statusText}`,{url:typeof t=="string"?t:t instanceof bv?t.toString():t.url,status:a.status,errorResponse:f});let g;try{let m=JSON.parse(f);g={type:"error",error:{type:"api_error",message:m.error?.message||m.message||`API error: ${a.statusText}`,code:m.error?.code||m.code||`API_${a.status}_ERROR`}},m.error?.details&&(g.error.details=m.error.details)}catch{g={type:"error",error:{type:"api_error",message:`API error: ${a.statusText}`,code:`API_${a.status}_ERROR`}}}return new Response(JSON.stringify(g),{status:a.status,statusText:a.statusText,headers:{"Content-Type":"application/json"}})}let l=a.clone(),c=!(Object.hasOwn(JSON.parse(n),"stream")&&!JSON.parse(n).stream),u={request:{url:typeof t=="string"?t:t instanceof bv?t.toString():t.url,method:r.method,headers:Lg(r.headers),body:JSON.parse(n)},response:{status:a.status,statusText:a.statusText,headers:Lg(a.headers)}};return(async()=>{if(c){let m=await a.text();u.response.body=await BU(m)}else u.response.body=await a.json();let g=Lg(r.headers)["x-agent-id"];Rz(g,u),Nz(g,{request:u.request.body.messages,response:u.response.body.content,usage:u.response.body?.usage})})().catch(f=>J(`\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF:
|
|
759
|
-
Stack trace: `+f.stack)),new Response(l.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var $Z=null,QIe=!1;function Jen(){$Z=null,QIe=!1}pr.on("proxy:changed",Jen);function Zen(){if(QIe)return $Z;if(QIe=!0,ut().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&($Z=new Fmt.ProxyAgent({uri:e}),Jt(`[proxy] using proxy: ${e}`)),$Z}function Xen(){let e=Zen();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function GZ(e){let t=e||process.env.API_TYPE,r=Xen();switch(t){case"openai":return Yen(r);case"openai-responses":return Ven(r);case"gemini":return Wen(r);default:return Ken(r)}}ph();var ntn=X(he(),1);function Umt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=etn(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function etn(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||ttn(t)?0:rtn(t)?2:1}function ttn(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function rtn(e){return e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=128591||e>=129280&&e<=129535||e>=131072&&e<=262141)}function u_(e){if(e<6e4)return`${(e/1e3).toFixed(1)}s`;let t=Math.floor(e/36e5),r=Math.floor(e%36e5/6e4),n=(e%6e4/1e3).toFixed(1);return t>0?`${t}h ${r}m ${n}s`:r>0?`${r}m ${n}s`:`${n}s`}function WC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}ke();us();var dc={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function zZ(e,t){dc.totalCost+=e,dc.totalAPIDuration+=t}function jZ(e,t){dc.inputTokens+=e,dc.outputTokens+=t,pr.emit("token:change",{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens})}function YZ(e,t){dc.cacheCreationTokens+=e,dc.cacheReadTokens+=t}function FIe(){return{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens,cacheCreationTokens:dc.cacheCreationTokens,cacheReadTokens:dc.cacheReadTokens}}function Hmt(){return dc.totalCost}function $mt(){return Date.now()-dc.startTime}function qmt(){return dc.totalAPIDuration}function Gmt(e){dc.currentContextTokens=e}function zmt(){return dc.currentContextTokens}ke();He();He();var UIe="2.4.
|
|
759
|
+
Stack trace: `+f.stack)),new Response(l.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var $Z=null,QIe=!1;function Jen(){$Z=null,QIe=!1}pr.on("proxy:changed",Jen);function Zen(){if(QIe)return $Z;if(QIe=!0,ut().proxy!==!0)return null;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&($Z=new Fmt.ProxyAgent({uri:e}),Jt(`[proxy] using proxy: ${e}`)),$Z}function Xen(){let e=Zen();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function GZ(e){let t=e||process.env.API_TYPE,r=Xen();switch(t){case"openai":return Yen(r);case"openai-responses":return Ven(r);case"gemini":return Wen(r);default:return Ken(r)}}ph();var ntn=X(he(),1);function Umt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=etn(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function etn(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||ttn(t)?0:rtn(t)?2:1}function ttn(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function rtn(e){return e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=128591||e>=129280&&e<=129535||e>=131072&&e<=262141)}function u_(e){if(e<6e4)return`${(e/1e3).toFixed(1)}s`;let t=Math.floor(e/36e5),r=Math.floor(e%36e5/6e4),n=(e%6e4/1e3).toFixed(1);return t>0?`${t}h ${r}m ${n}s`:r>0?`${r}m ${n}s`:`${n}s`}function WC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}ke();us();var dc={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0,cacheCreationTokens:0,cacheReadTokens:0,currentContextTokens:0};function zZ(e,t){dc.totalCost+=e,dc.totalAPIDuration+=t}function jZ(e,t){dc.inputTokens+=e,dc.outputTokens+=t,pr.emit("token:change",{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens})}function YZ(e,t){dc.cacheCreationTokens+=e,dc.cacheReadTokens+=t}function FIe(){return{inputTokens:dc.inputTokens,outputTokens:dc.outputTokens,cacheCreationTokens:dc.cacheCreationTokens,cacheReadTokens:dc.cacheReadTokens}}function Hmt(){return dc.totalCost}function $mt(){return Date.now()-dc.startTime}function qmt(){return dc.totalAPIDuration}function Gmt(e){dc.currentContextTokens=e}function zmt(){return dc.currentContextTokens}ke();He();He();var UIe="2.4.23";globalThis.MACRO={VERSION:UIe,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 VZ=process.env.HAWA_CODE_USER_AGENT||`${Ki}/${UIe} (${process.env.USER_TYPE})`;import{randomUUID as _y}from"crypto";us();ke();Kt();_r();ke();He();import{existsSync as g_,readdirSync as Tin,statSync as vin}from"fs";import{join as ZC,relative as xin}from"path";import{homedir as Aht}from"os";import{platform as win}from"process";import{readFile as XC}from"fs/promises";_r();Fg();or();import{join as ltn,sep as ctn}from"path";function Am(){if(!gm())return!1;try{let e=ut();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Yf(){return(ltn(Be(),".hcode","team-memory")+ctn).normalize("NFC")}function f_(e){let t=e.normalize("NFC"),r=Yf();return t.startsWith(r)}var hht=X(K5(),1);Qi();var fht=X(K5(),1);_r();He();ke();Iu();import{readFile as uht}from"fs/promises";import{existsSync as nTe,readdirSync as bin,statSync as Cin}from"fs";import{join as iTe,relative as pht}from"path";import{homedir as Sin}from"os";function dht(e){try{let t=(0,fht.default)(e),r=t.data.paths,n=[];return typeof r=="string"?n=r.split(",").map(i=>i.trim()).filter(Boolean):Array.isArray(r)&&(n=r.filter(i=>typeof i=="string")),{paths:n,content:t.content.trim()}}catch(t){return ve(t),{paths:[],content:e.trim()}}}function Iin(e,t){return t.length===0?!0:t.some(r=>{try{return ac(e,r,{matchBase:!0,dot:!0})}catch(n){return ve(n),!1}})}function oTe(e){let t=[];try{if(!nTe(e))return t;let r=bin(e);for(let n of r){let i=iTe(e,n),o=Cin(i);o.isDirectory()?t.push(...oTe(i)):o.isFile()&&n.endsWith(".md")&&t.push(i)}}catch(r){ve(r)}return t}async function mht(){let e=[];try{let t=iTe(Sin(),Xr,"rules");if(nTe(t)){let r=oTe(t);for(let n of r)try{let i=await uht(n,"utf-8"),{paths:o,content:s}=dht(i);o.length>0&&e.push({filePath:n,content:s,paths:o,isProjectRule:!1})}catch(i){ve(i)}}}catch(t){ve(t)}try{let t=iTe(Be(),Xr,"rules");if(nTe(t)){let r=oTe(t);for(let n of r)try{let i=await uht(n,"utf-8"),{paths:o,content:s}=dht(i);o.length>0&&e.push({filePath:pht(Be(),n),content:s,paths:o,isProjectRule:!0})}catch(i){ve(i)}}}catch(t){ve(t)}return e}function ght(e,t){e=xV(e);let r=xV(Be()),n=e.startsWith(r)?pht(r,e):e;return t.filter(i=>Iin(n,i.paths))}var Din=`# hawaCodeMd
|
|
760
760
|
Codebase and user instructions are shown below. Be sure to adhere to these instructions. IMPORTANT: These instructions OVERRIDE any default behavior and you MUST follow them exactly as written.`;function Rin(e="default"){let r=Je.getSessionContext(e).getData("matchedPathRules");return!r||r.length===0?"":r.map(i=>{let o=i.isProjectRule?"project instructions, checked into the codebase":"user's private global instructions for all projects";return`Contents of ${i.filePath} (${o}):
|
|
761
761
|
|
|
762
762
|
${i.content}`}).join(`
|
|
@@ -1128,7 +1128,7 @@ You are powered by the model ${e}.`}async function ex(){return J5()?`gitStatus:
|
|
|
1128
1128
|
<context name="${c}">${u}</context>`;let s=i.map(c=>{let u=c.prompt({},t),f=JSON.stringify("inputJSONSchema"in c&&c.inputJSONSchema?c.inputJSONSchema:r0(c.inputSchema));return{name:c.name,description:`${u}
|
|
1129
1129
|
|
|
1130
1130
|
Schema:
|
|
1131
|
-
${f}`}}),{messages:a}=t,l=tcn(o);return rcn(o,l,s,a)}},pyt=ncn;$g();var Qu=X(he(),1),mO=X(he(),1);ke();ke();import{existsSync as icn,readdirSync as ocn,statSync as scn}from"fs";import{join as acn}from"path";function lcn(){let e=Ji.plan();if(!icn(e))return[];try{return ocn(e).filter(r=>r.endsWith(".md")).map(r=>{let n=acn(e,r),i=scn(n);return{name:r,path:n,modified:i.mtime}}).sort((r,n)=>n.modified.getTime()-r.modified.getTime())}catch{return[]}}var myt=({onSelect:e})=>{let[t,r]=(0,mO.useState)([]),[n,i]=(0,mO.useState)(0),[o,s]=(0,mO.useState)(!1);(0,mO.useEffect)(()=>{let c=lcn();r(c),s(!0)},[]);let a=[{label:"New plan",value:"__NEW_PLAN__",isNew:!0},...t.map(c=>({label:c.name,value:c.path,isNew:!1,modified:c.modified}))];vr((c,u)=>{if(u.upArrow)i(f=>f>0?f-1:a.length-1);else if(u.downArrow)i(f=>f<a.length-1?f+1:0);else if(u.return){let f=a[n];f&&e(f.value)}else u.escape&&e("__CANCELLED__")});let l=Le();return o?Qu.createElement(N,{flexDirection:"column",marginY:1},Qu.createElement(N,{marginBottom:1},Qu.createElement(v,{bold:!0,color:l.claude},"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")),Qu.createElement(N,{marginBottom:1},Qu.createElement(v,{bold:!0,color:l.claude}," Select a plan to continue, or create a new one")),a.map((c,u)=>{let f=u===n;return Qu.createElement(N,{key:c.isNew?"new":c.value,flexDirection:"row",marginLeft:2},Qu.createElement(v,{color:f?l.claude:l.text},f?"\u276F":" "),Qu.createElement(v,{color:f?l.claude:l.text}," "),Qu.createElement(v,{color:f?l.claude:l.text,bold:c.isNew},c.isNew?c.label:c.label.replace(".md","")),!c.isNew&&c.modified&&Qu.createElement(v,{dimColor:!0}," ","(",Jge(c.modified),")"))}),Qu.createElement(N,{marginTop:1,marginLeft:2},Qu.createElement(v,{dimColor:!0},"\u2191/\u2193 to select \xB7 Enter to confirm \xB7 Esc to cancel"))):Qu.createElement(N,{flexDirection:"column",marginY:1},Qu.createElement(v,null,"Loading plan history..."))};var gyt=X(he(),1),ccn={type:"local-jsx",name:"plan",description:()=>"Enable plan mode",isEnabled:!0,isHidden:!1,disableCancel:!0,async call(e){return Ti.isPlanMode()?(e("Already in plan mode."),null):gyt.createElement(myt,{onSelect:t=>{if(t==="__CANCELLED__"){e("Cancelled.");return}t&&t!=="__NEW_PLAN__"?Ti.setCurrentPlanFilePath(t):Ti.generatePlanFilePath(),Ti.setMode("plan",!0,!1),e("Enabled plan mode")}})},userFacingName(){return"plan"}},Ayt=ccn;$g();var ucn={type:"local",name:"auto",description:()=>"Enable auto mode",isEnabled:!0,isHidden:!1,async call(){return Ti.isAutoMode()?"Already in auto mode.":(Ti.setMode("auto",!0),"Enabled auto mode")},userFacingName(){return"auto"}},hyt=ucn;_r();import{resolve as dcn}from"path";var fcn={type:"local",name:"cd",description:()=>"Move this session to a new working directory",isEnabled:!0,isHidden:!1,argNames:["path"],async call(e){let t=e.trim();if(t==="")throw new Error("Missing directory path. Usage: /cd <path>");let r=Be(),n=dcn(r,t);la(n);let i=Be();return i===r?`Already in ${i}.`:`Changed directory to ${i}/`},userFacingName(){return"cd"}},Eyt=fcn;var WCt=X(he(),1);var Hn=X(he(),1);var Gcn=X(he(),1);var k9=X(he(),1),Hcn=X(Cyt(),1);var Syt={info:"blue",success:"green",error:"red",warning:"yellow"},vcn={styles:{container:({variant:e})=>({flexGrow:1,borderStyle:"round",borderColor:Syt[e],gap:1,paddingX:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:Syt[e]}),content:()=>({flexShrink:1,flexGrow:1,minWidth:0,flexDirection:"column",gap:1}),title:()=>({bold:!0}),message:()=>({})},config({variant:e}){let t;return e==="info"&&(t=Pr.info),e==="success"&&(t=Pr.tick),e==="error"&&(t=Pr.cross),e==="warning"&&(t=Pr.warning),{icon:t}}},Iyt=vcn;var xcn={styles:{container:({color:e})=>({backgroundColor:e}),label:()=>({color:"black"})}},Tyt=xcn;var wcn={styles:{input:({isFocused:e})=>({dimColor:!e})}},vyt=wcn;var Dcn={styles:{container:()=>({flexDirection:"column"}),option:({isFocused:e})=>({gap:1,paddingLeft:e?0:2}),selectedIndicator:()=>({color:"green"}),focusIndicator:()=>({color:"blue"}),label({isFocused:e,isSelected:t}){let r;return t&&(r="green"),e&&(r="blue"),{color:r}},highlightedText:()=>({bold:!0})}},xyt=Dcn;var Rcn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})}},wyt=Rcn;var Ncn={styles:{container:()=>({flexGrow:1,minWidth:0}),completed:()=>({color:"magenta"}),remaining:()=>({dimColor:!0})},config:()=>({completedCharacter:Pr.square,remainingCharacter:Pr.squareLightShade})},Dyt=Ncn;var Bcn={styles:{container:()=>({flexDirection:"column"}),option:({isFocused:e})=>({gap:1,paddingLeft:e?0:2}),selectedIndicator:()=>({color:"green"}),focusIndicator:()=>({color:"blue"}),label({isFocused:e,isSelected:t}){let r;return t&&(r="green"),e&&(r="blue"),{color:r}},highlightedText:()=>({bold:!0})}},Ryt=Bcn;var Ocn={styles:{container:()=>({gap:1}),frame:()=>({color:"blue"}),label:()=>({})}},Nyt=Ocn;var kcn={success:"green",error:"red",warning:"yellow",info:"blue"},Mcn={success:Pr.tick,error:Pr.cross,warning:Pr.warning,info:Pr.info},Qcn={styles:{container:()=>({gap:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:kcn[e]}),message:()=>({})},config:({variant:e})=>({icon:Mcn[e]})},Byt=Qcn;var Pcn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})},config:()=>({marker:Pr.line})},Oyt=Pcn;var Lcn={styles:{value:()=>({})}},kyt=Lcn;var Fcn={styles:{value:()=>({})}},Myt=Fcn;var Ucn={styles:{value:()=>({})}},Qyt=Ucn;var $cn={components:{Alert:Iyt,Badge:Tyt,ConfirmInput:vyt,MultiSelect:xyt,OrderedList:wyt,ProgressBar:Dyt,Select:Ryt,Spinner:Nyt,StatusMessage:Byt,UnorderedList:Oyt,TextInput:kyt,EmailInput:Myt,PasswordInput:Qyt}},qcn=(0,k9.createContext)($cn);var po=e=>(0,k9.useContext)(qcn).components[e];var zcn=X(he(),1);var I_=X(he(),1);var AO=X(he(),1);var Pyt=X(he(),1);var M9=Pr.line;var uee=(0,Pyt.createContext)({marker:M9});function Lyt({children:e}){let{marker:t}=(0,AO.useContext)(uee),{styles:r}=po("UnorderedList");return AO.default.createElement(N,{...r.listItem()},AO.default.createElement(v,{...r.marker()},t),AO.default.createElement(N,{...r.content()},e))}var Fyt=X(he(),1),qve=(0,Fyt.createContext)({depth:0});function jcn({children:e}){let{depth:t}=(0,I_.useContext)(qve),{styles:r,config:n}=po("UnorderedList"),i=(0,I_.useMemo)(()=>({depth:t+1}),[t]),o=(0,I_.useMemo)(()=>{let{marker:s}=n();return typeof s=="string"?{marker:s}:Array.isArray(s)?{marker:s[t]??s.at(-1)??M9}:{marker:M9}},[n,t]);return I_.default.createElement(qve.Provider,{value:i},I_.default.createElement(uee.Provider,{value:o},I_.default.createElement(N,{...r.list()},e)))}jcn.Item=Lyt;var Vcn=X(he(),1);var Ycn=X(he(),1);var Q9=X(he(),1);var hO=class extends Map{first;constructor(t){let r=[],n,i,o=0;for(let s of t){let a={...s,previous:i,next:void 0,index:o};i&&(i.next=a),n||=a,r.push([s.value,a]),o++,i=a}super(r),this.first=n}};var Uyt=X(he(),1);var EO=X(he(),1);var P9=X(he(),1);function Hyt({isFocused:e,isSelected:t,children:r}){let{styles:n}=po("Select");return P9.default.createElement(N,{...n.option({isFocused:e})},e&&P9.default.createElement(v,{...n.focusIndicator()},Pr.pointer),P9.default.createElement(v,{...n.label({isFocused:e,isSelected:t})},r),t&&P9.default.createElement(v,{...n.selectedIndicator()},Pr.tick))}var Cm=X(he(),1);import{isDeepStrictEqual as Wcn}from"node:util";var Kcn=(e,t)=>{switch(t.type){case"focus-next-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.next;if(!n)return e;if(!(n.index>=e.visibleToIndex))return{...e,focusedValue:n.value};let o=Math.min(e.optionMap.size,e.visibleToIndex+1),s=o-e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:s,visibleToIndex:o}}case"focus-previous-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.previous;if(!n)return e;if(!(n.index<=e.visibleFromIndex))return{...e,focusedValue:n.value};let o=Math.max(0,e.visibleFromIndex-1),s=o+e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:o,visibleToIndex:s}}case"select-focused-option":return{...e,previousValue:e.value,value:e.focusedValue};case"reset":return t.state}},$yt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=typeof e=="number"?Math.min(e,r.length):r.length,i=new hO(r);return{optionMap:i,visibleOptionCount:n,focusedValue:i.first?.value,visibleFromIndex:0,visibleToIndex:n,previousValue:t,value:t}},qyt=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n})=>{let[i,o]=(0,Cm.useReducer)(Kcn,{visibleOptionCount:e,defaultValue:r,options:t},$yt),[s,a]=(0,Cm.useState)(t);t!==s&&!Wcn(t,s)&&(o({type:"reset",state:$yt({visibleOptionCount:e,defaultValue:r,options:t})}),a(t));let l=(0,Cm.useCallback)(()=>{o({type:"focus-next-option"})},[]),c=(0,Cm.useCallback)(()=>{o({type:"focus-previous-option"})},[]),u=(0,Cm.useCallback)(()=>{o({type:"select-focused-option"})},[]),f=(0,Cm.useMemo)(()=>t.map((g,m)=>({...g,index:m})).slice(i.visibleFromIndex,i.visibleToIndex),[t,i.visibleFromIndex,i.visibleToIndex]);return(0,Cm.useEffect)(()=>{i.value&&i.previousValue!==i.value&&n?.(i.value)},[i.previousValue,i.value,t,n]),{focusedValue:i.focusedValue,visibleFromIndex:i.visibleFromIndex,visibleToIndex:i.visibleToIndex,value:i.value,visibleOptions:f,focusNextOption:l,focusPreviousOption:c,selectFocusedOption:u}};var Gyt=({isDisabled:e=!1,state:t})=>{vr((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};function _O({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:i,onChange:o}){let s=qyt({visibleOptionCount:t,options:n,defaultValue:i,onChange:o});Gyt({isDisabled:e,state:s});let{styles:a}=po("Select");return EO.default.createElement(N,{...a.container()},s.visibleOptions.map(l=>{let c=l.label;if(r&&l.label.includes(r)){let u=l.label.indexOf(r);c=EO.default.createElement(EO.default.Fragment,null,l.label.slice(0,u),EO.default.createElement(v,{...a.highlightedText()},r),l.label.slice(u+r.length))}return EO.default.createElement(Hyt,{key:l.value,isFocused:!e&&s.focusedValue===l.value,isSelected:s.value===l.value},c)}))}var Jcn=X(he(),1);var zyt=X(he(),1);var Xcn=X(he(),1);var dee=X(he(),1);var Zcn=X(he(),1);var H2i=ar.inverse(" ");var Yg=X(he(),1);var yO=X(he(),1);var jyt=X(he(),1);var fee=(0,jyt.createContext)({marker:Pr.line});function pee({children:e}){let{marker:t}=(0,yO.useContext)(fee),{styles:r}=po("OrderedList");return yO.default.createElement(N,{...r.listItem()},yO.default.createElement(v,{...r.marker()},t),yO.default.createElement(N,{...r.content()},e))}var Yyt=X(he(),1),Gve=(0,Yyt.createContext)({marker:""});function Vg({children:e}){let{marker:t}=(0,Yg.useContext)(Gve),{styles:r}=po("OrderedList"),n=0;for(let o of Yg.default.Children.toArray(e))!(0,Yg.isValidElement)(o)||o.type!==pee||n++;let i=String(n).length;return Yg.default.createElement(N,{...r.list()},Yg.default.Children.map(e,(o,s)=>{if(!(0,Yg.isValidElement)(o)||o.type!==pee)return o;let a=`${String(s+1).padStart(i)}.`,l=`${t}${a}`;return Yg.default.createElement(Gve.Provider,{value:{marker:l}},Yg.default.createElement(fee.Provider,{value:{marker:l}},o))}))}Vg.Item=pee;var tun=X(he(),1);var zve=X(he(),1);var eun=X(he(),1);var AOi=ar.inverse(" ");var run=X(he(),1);var nun=X(he(),1);var oun=X(he(),1);var mee=X(he(),1);var iun=X(he(),1);var UOi=ar.inverse(" ");var $i=X(he(),1);var jve=X(he(),1),Yve=X(he(),1);X5();us();Qi();$v();or();var Vyt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function tx(){let e=[...Vyt,...[...Vyt].reverse()],{frame:t}=hR({interval:120});return jve.createElement(N,{flexWrap:"nowrap",height:1,width:2},jve.createElement(v,{color:Le().claude},e[t%e.length]))}var hee=X(he(),1);var Aee=null,T_=null,gee=new Set;function Wve(e){let{columns:t,rows:r}=e;if(t&&r)return{columns:t,rows:r};let n=Fpe();return{columns:t||n.columns||80,rows:r||n.rows||24}}function Vve(){T_&&(Aee=Wve(T_),gee.forEach(e=>e(Aee)))}function sun(e,t){return T_!==e&&(T_&&T_.off("resize",Vve),T_=e,Aee=Wve(e),e.on("resize",Vve)),gee.add(t),()=>{gee.delete(t),gee.size===0&&T_&&(T_.off("resize",Vve),T_=null,Aee=null)}}function Kve(){let{stdout:e}=AR(),[t,r]=(0,hee.useState)(()=>Wve(e));return(0,hee.useEffect)(()=>sun(e,r),[e]),t}function bO(){return Kve()}He();Tf();ke();lh();ke();var DMi=X(hxe(),1);import{homedir as j9}from"os";import{join as IO}from"path";import{existsSync as Y9,mkdirSync as PCt,appendFileSync as QCt,readFileSync as LCt,constants as npn,writeFileSync as ipn,unlinkSync as FCt,statSync as opn}from"fs";import{platform as UCt}from"process";import{accessSync as spn}from"fs";var rpn="2.4.22",z9={VERSION:rpn,PACKAGE_URL:"@dahawa/hawa-code",README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};He();var nx=IO(L0,".update.lock"),apn=300*1e3;function HCt(){try{if(Y9(L0)||PCt(L0,{recursive:!0}),Y9(nx)){let e=opn(nx);if(Date.now()-e.mtimeMs<apn)return!1;try{FCt(nx)}catch(r){return ve(`Failed to remove stale lock file: ${r}`),!1}}return ipn(nx,`${process.pid}`,"utf8"),!0}catch(e){return ve(`Failed to acquire lock: ${e}`),!1}}function $Ct(){try{Y9(nx)&&LCt(nx,"utf8")===`${process.pid}`&&FCt(nx)}catch(e){ve(`Failed to release lock: ${e}`)}}async function Exe(){try{let e=await si("npm -g config get prefix");if(e.code!==0)return ve("Failed to check npm permissions"),{hasPermissions:!1,npmPrefix:null};let t=e.stdout.trim(),r=!1;try{spn(t,npn.W_OK),r=!0}catch{r=!1}return r?{hasPermissions:!0,npmPrefix:t}:(ve("Insufficient permissions for global npm install."),{hasPermissions:!1,npmPrefix:t})}catch(e){return ve(`Failed to verify npm global install permissions: ${e}`),{hasPermissions:!1,npmPrefix:null}}}async function qCt(e){if(!HCt())throw Et("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:z9.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{Y9(e)||PCt(e,{recursive:!0});let t=await si(`npm -g config set prefix ${e}`);if(t.code!==0)throw new Error(`Failed to set npm prefix: ${t.stderr}`);let r=`
|
|
1131
|
+
${f}`}}),{messages:a}=t,l=tcn(o);return rcn(o,l,s,a)}},pyt=ncn;$g();var Qu=X(he(),1),mO=X(he(),1);ke();ke();import{existsSync as icn,readdirSync as ocn,statSync as scn}from"fs";import{join as acn}from"path";function lcn(){let e=Ji.plan();if(!icn(e))return[];try{return ocn(e).filter(r=>r.endsWith(".md")).map(r=>{let n=acn(e,r),i=scn(n);return{name:r,path:n,modified:i.mtime}}).sort((r,n)=>n.modified.getTime()-r.modified.getTime())}catch{return[]}}var myt=({onSelect:e})=>{let[t,r]=(0,mO.useState)([]),[n,i]=(0,mO.useState)(0),[o,s]=(0,mO.useState)(!1);(0,mO.useEffect)(()=>{let c=lcn();r(c),s(!0)},[]);let a=[{label:"New plan",value:"__NEW_PLAN__",isNew:!0},...t.map(c=>({label:c.name,value:c.path,isNew:!1,modified:c.modified}))];vr((c,u)=>{if(u.upArrow)i(f=>f>0?f-1:a.length-1);else if(u.downArrow)i(f=>f<a.length-1?f+1:0);else if(u.return){let f=a[n];f&&e(f.value)}else u.escape&&e("__CANCELLED__")});let l=Le();return o?Qu.createElement(N,{flexDirection:"column",marginY:1},Qu.createElement(N,{marginBottom:1},Qu.createElement(v,{bold:!0,color:l.claude},"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")),Qu.createElement(N,{marginBottom:1},Qu.createElement(v,{bold:!0,color:l.claude}," Select a plan to continue, or create a new one")),a.map((c,u)=>{let f=u===n;return Qu.createElement(N,{key:c.isNew?"new":c.value,flexDirection:"row",marginLeft:2},Qu.createElement(v,{color:f?l.claude:l.text},f?"\u276F":" "),Qu.createElement(v,{color:f?l.claude:l.text}," "),Qu.createElement(v,{color:f?l.claude:l.text,bold:c.isNew},c.isNew?c.label:c.label.replace(".md","")),!c.isNew&&c.modified&&Qu.createElement(v,{dimColor:!0}," ","(",Jge(c.modified),")"))}),Qu.createElement(N,{marginTop:1,marginLeft:2},Qu.createElement(v,{dimColor:!0},"\u2191/\u2193 to select \xB7 Enter to confirm \xB7 Esc to cancel"))):Qu.createElement(N,{flexDirection:"column",marginY:1},Qu.createElement(v,null,"Loading plan history..."))};var gyt=X(he(),1),ccn={type:"local-jsx",name:"plan",description:()=>"Enable plan mode",isEnabled:!0,isHidden:!1,disableCancel:!0,async call(e){return Ti.isPlanMode()?(e("Already in plan mode."),null):gyt.createElement(myt,{onSelect:t=>{if(t==="__CANCELLED__"){e("Cancelled.");return}t&&t!=="__NEW_PLAN__"?Ti.setCurrentPlanFilePath(t):Ti.generatePlanFilePath(),Ti.setMode("plan",!0,!1),e("Enabled plan mode")}})},userFacingName(){return"plan"}},Ayt=ccn;$g();var ucn={type:"local",name:"auto",description:()=>"Enable auto mode",isEnabled:!0,isHidden:!1,async call(){return Ti.isAutoMode()?"Already in auto mode.":(Ti.setMode("auto",!0),"Enabled auto mode")},userFacingName(){return"auto"}},hyt=ucn;_r();import{resolve as dcn}from"path";var fcn={type:"local",name:"cd",description:()=>"Move this session to a new working directory",isEnabled:!0,isHidden:!1,argNames:["path"],async call(e){let t=e.trim();if(t==="")throw new Error("Missing directory path. Usage: /cd <path>");let r=Be(),n=dcn(r,t);la(n);let i=Be();return i===r?`Already in ${i}.`:`Changed directory to ${i}/`},userFacingName(){return"cd"}},Eyt=fcn;var WCt=X(he(),1);var Hn=X(he(),1);var Gcn=X(he(),1);var k9=X(he(),1),Hcn=X(Cyt(),1);var Syt={info:"blue",success:"green",error:"red",warning:"yellow"},vcn={styles:{container:({variant:e})=>({flexGrow:1,borderStyle:"round",borderColor:Syt[e],gap:1,paddingX:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:Syt[e]}),content:()=>({flexShrink:1,flexGrow:1,minWidth:0,flexDirection:"column",gap:1}),title:()=>({bold:!0}),message:()=>({})},config({variant:e}){let t;return e==="info"&&(t=Pr.info),e==="success"&&(t=Pr.tick),e==="error"&&(t=Pr.cross),e==="warning"&&(t=Pr.warning),{icon:t}}},Iyt=vcn;var xcn={styles:{container:({color:e})=>({backgroundColor:e}),label:()=>({color:"black"})}},Tyt=xcn;var wcn={styles:{input:({isFocused:e})=>({dimColor:!e})}},vyt=wcn;var Dcn={styles:{container:()=>({flexDirection:"column"}),option:({isFocused:e})=>({gap:1,paddingLeft:e?0:2}),selectedIndicator:()=>({color:"green"}),focusIndicator:()=>({color:"blue"}),label({isFocused:e,isSelected:t}){let r;return t&&(r="green"),e&&(r="blue"),{color:r}},highlightedText:()=>({bold:!0})}},xyt=Dcn;var Rcn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})}},wyt=Rcn;var Ncn={styles:{container:()=>({flexGrow:1,minWidth:0}),completed:()=>({color:"magenta"}),remaining:()=>({dimColor:!0})},config:()=>({completedCharacter:Pr.square,remainingCharacter:Pr.squareLightShade})},Dyt=Ncn;var Bcn={styles:{container:()=>({flexDirection:"column"}),option:({isFocused:e})=>({gap:1,paddingLeft:e?0:2}),selectedIndicator:()=>({color:"green"}),focusIndicator:()=>({color:"blue"}),label({isFocused:e,isSelected:t}){let r;return t&&(r="green"),e&&(r="blue"),{color:r}},highlightedText:()=>({bold:!0})}},Ryt=Bcn;var Ocn={styles:{container:()=>({gap:1}),frame:()=>({color:"blue"}),label:()=>({})}},Nyt=Ocn;var kcn={success:"green",error:"red",warning:"yellow",info:"blue"},Mcn={success:Pr.tick,error:Pr.cross,warning:Pr.warning,info:Pr.info},Qcn={styles:{container:()=>({gap:1}),iconContainer:()=>({flexShrink:0}),icon:({variant:e})=>({color:kcn[e]}),message:()=>({})},config:({variant:e})=>({icon:Mcn[e]})},Byt=Qcn;var Pcn={styles:{list:()=>({flexDirection:"column"}),listItem:()=>({gap:1}),marker:()=>({dimColor:!0}),content:()=>({flexDirection:"column"})},config:()=>({marker:Pr.line})},Oyt=Pcn;var Lcn={styles:{value:()=>({})}},kyt=Lcn;var Fcn={styles:{value:()=>({})}},Myt=Fcn;var Ucn={styles:{value:()=>({})}},Qyt=Ucn;var $cn={components:{Alert:Iyt,Badge:Tyt,ConfirmInput:vyt,MultiSelect:xyt,OrderedList:wyt,ProgressBar:Dyt,Select:Ryt,Spinner:Nyt,StatusMessage:Byt,UnorderedList:Oyt,TextInput:kyt,EmailInput:Myt,PasswordInput:Qyt}},qcn=(0,k9.createContext)($cn);var po=e=>(0,k9.useContext)(qcn).components[e];var zcn=X(he(),1);var I_=X(he(),1);var AO=X(he(),1);var Pyt=X(he(),1);var M9=Pr.line;var uee=(0,Pyt.createContext)({marker:M9});function Lyt({children:e}){let{marker:t}=(0,AO.useContext)(uee),{styles:r}=po("UnorderedList");return AO.default.createElement(N,{...r.listItem()},AO.default.createElement(v,{...r.marker()},t),AO.default.createElement(N,{...r.content()},e))}var Fyt=X(he(),1),qve=(0,Fyt.createContext)({depth:0});function jcn({children:e}){let{depth:t}=(0,I_.useContext)(qve),{styles:r,config:n}=po("UnorderedList"),i=(0,I_.useMemo)(()=>({depth:t+1}),[t]),o=(0,I_.useMemo)(()=>{let{marker:s}=n();return typeof s=="string"?{marker:s}:Array.isArray(s)?{marker:s[t]??s.at(-1)??M9}:{marker:M9}},[n,t]);return I_.default.createElement(qve.Provider,{value:i},I_.default.createElement(uee.Provider,{value:o},I_.default.createElement(N,{...r.list()},e)))}jcn.Item=Lyt;var Vcn=X(he(),1);var Ycn=X(he(),1);var Q9=X(he(),1);var hO=class extends Map{first;constructor(t){let r=[],n,i,o=0;for(let s of t){let a={...s,previous:i,next:void 0,index:o};i&&(i.next=a),n||=a,r.push([s.value,a]),o++,i=a}super(r),this.first=n}};var Uyt=X(he(),1);var EO=X(he(),1);var P9=X(he(),1);function Hyt({isFocused:e,isSelected:t,children:r}){let{styles:n}=po("Select");return P9.default.createElement(N,{...n.option({isFocused:e})},e&&P9.default.createElement(v,{...n.focusIndicator()},Pr.pointer),P9.default.createElement(v,{...n.label({isFocused:e,isSelected:t})},r),t&&P9.default.createElement(v,{...n.selectedIndicator()},Pr.tick))}var Cm=X(he(),1);import{isDeepStrictEqual as Wcn}from"node:util";var Kcn=(e,t)=>{switch(t.type){case"focus-next-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.next;if(!n)return e;if(!(n.index>=e.visibleToIndex))return{...e,focusedValue:n.value};let o=Math.min(e.optionMap.size,e.visibleToIndex+1),s=o-e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:s,visibleToIndex:o}}case"focus-previous-option":{if(!e.focusedValue)return e;let r=e.optionMap.get(e.focusedValue);if(!r)return e;let n=r.previous;if(!n)return e;if(!(n.index<=e.visibleFromIndex))return{...e,focusedValue:n.value};let o=Math.max(0,e.visibleFromIndex-1),s=o+e.visibleOptionCount;return{...e,focusedValue:n.value,visibleFromIndex:o,visibleToIndex:s}}case"select-focused-option":return{...e,previousValue:e.value,value:e.focusedValue};case"reset":return t.state}},$yt=({visibleOptionCount:e,defaultValue:t,options:r})=>{let n=typeof e=="number"?Math.min(e,r.length):r.length,i=new hO(r);return{optionMap:i,visibleOptionCount:n,focusedValue:i.first?.value,visibleFromIndex:0,visibleToIndex:n,previousValue:t,value:t}},qyt=({visibleOptionCount:e=5,options:t,defaultValue:r,onChange:n})=>{let[i,o]=(0,Cm.useReducer)(Kcn,{visibleOptionCount:e,defaultValue:r,options:t},$yt),[s,a]=(0,Cm.useState)(t);t!==s&&!Wcn(t,s)&&(o({type:"reset",state:$yt({visibleOptionCount:e,defaultValue:r,options:t})}),a(t));let l=(0,Cm.useCallback)(()=>{o({type:"focus-next-option"})},[]),c=(0,Cm.useCallback)(()=>{o({type:"focus-previous-option"})},[]),u=(0,Cm.useCallback)(()=>{o({type:"select-focused-option"})},[]),f=(0,Cm.useMemo)(()=>t.map((g,m)=>({...g,index:m})).slice(i.visibleFromIndex,i.visibleToIndex),[t,i.visibleFromIndex,i.visibleToIndex]);return(0,Cm.useEffect)(()=>{i.value&&i.previousValue!==i.value&&n?.(i.value)},[i.previousValue,i.value,t,n]),{focusedValue:i.focusedValue,visibleFromIndex:i.visibleFromIndex,visibleToIndex:i.visibleToIndex,value:i.value,visibleOptions:f,focusNextOption:l,focusPreviousOption:c,selectFocusedOption:u}};var Gyt=({isDisabled:e=!1,state:t})=>{vr((r,n)=>{n.downArrow&&t.focusNextOption(),n.upArrow&&t.focusPreviousOption(),n.return&&t.selectFocusedOption()},{isActive:!e})};function _O({isDisabled:e=!1,visibleOptionCount:t=5,highlightText:r,options:n,defaultValue:i,onChange:o}){let s=qyt({visibleOptionCount:t,options:n,defaultValue:i,onChange:o});Gyt({isDisabled:e,state:s});let{styles:a}=po("Select");return EO.default.createElement(N,{...a.container()},s.visibleOptions.map(l=>{let c=l.label;if(r&&l.label.includes(r)){let u=l.label.indexOf(r);c=EO.default.createElement(EO.default.Fragment,null,l.label.slice(0,u),EO.default.createElement(v,{...a.highlightedText()},r),l.label.slice(u+r.length))}return EO.default.createElement(Hyt,{key:l.value,isFocused:!e&&s.focusedValue===l.value,isSelected:s.value===l.value},c)}))}var Jcn=X(he(),1);var zyt=X(he(),1);var Xcn=X(he(),1);var dee=X(he(),1);var Zcn=X(he(),1);var H2i=ar.inverse(" ");var Yg=X(he(),1);var yO=X(he(),1);var jyt=X(he(),1);var fee=(0,jyt.createContext)({marker:Pr.line});function pee({children:e}){let{marker:t}=(0,yO.useContext)(fee),{styles:r}=po("OrderedList");return yO.default.createElement(N,{...r.listItem()},yO.default.createElement(v,{...r.marker()},t),yO.default.createElement(N,{...r.content()},e))}var Yyt=X(he(),1),Gve=(0,Yyt.createContext)({marker:""});function Vg({children:e}){let{marker:t}=(0,Yg.useContext)(Gve),{styles:r}=po("OrderedList"),n=0;for(let o of Yg.default.Children.toArray(e))!(0,Yg.isValidElement)(o)||o.type!==pee||n++;let i=String(n).length;return Yg.default.createElement(N,{...r.list()},Yg.default.Children.map(e,(o,s)=>{if(!(0,Yg.isValidElement)(o)||o.type!==pee)return o;let a=`${String(s+1).padStart(i)}.`,l=`${t}${a}`;return Yg.default.createElement(Gve.Provider,{value:{marker:l}},Yg.default.createElement(fee.Provider,{value:{marker:l}},o))}))}Vg.Item=pee;var tun=X(he(),1);var zve=X(he(),1);var eun=X(he(),1);var AOi=ar.inverse(" ");var run=X(he(),1);var nun=X(he(),1);var oun=X(he(),1);var mee=X(he(),1);var iun=X(he(),1);var UOi=ar.inverse(" ");var $i=X(he(),1);var jve=X(he(),1),Yve=X(he(),1);X5();us();Qi();$v();or();var Vyt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function tx(){let e=[...Vyt,...[...Vyt].reverse()],{frame:t}=hR({interval:120});return jve.createElement(N,{flexWrap:"nowrap",height:1,width:2},jve.createElement(v,{color:Le().claude},e[t%e.length]))}var hee=X(he(),1);var Aee=null,T_=null,gee=new Set;function Wve(e){let{columns:t,rows:r}=e;if(t&&r)return{columns:t,rows:r};let n=Fpe();return{columns:t||n.columns||80,rows:r||n.rows||24}}function Vve(){T_&&(Aee=Wve(T_),gee.forEach(e=>e(Aee)))}function sun(e,t){return T_!==e&&(T_&&T_.off("resize",Vve),T_=e,Aee=Wve(e),e.on("resize",Vve)),gee.add(t),()=>{gee.delete(t),gee.size===0&&T_&&(T_.off("resize",Vve),T_=null,Aee=null)}}function Kve(){let{stdout:e}=AR(),[t,r]=(0,hee.useState)(()=>Wve(e));return(0,hee.useEffect)(()=>sun(e,r),[e]),t}function bO(){return Kve()}He();Tf();ke();lh();ke();var DMi=X(hxe(),1);import{homedir as j9}from"os";import{join as IO}from"path";import{existsSync as Y9,mkdirSync as PCt,appendFileSync as QCt,readFileSync as LCt,constants as npn,writeFileSync as ipn,unlinkSync as FCt,statSync as opn}from"fs";import{platform as UCt}from"process";import{accessSync as spn}from"fs";var rpn="2.4.23",z9={VERSION:rpn,PACKAGE_URL:"@dahawa/hawa-code",README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};He();var nx=IO(L0,".update.lock"),apn=300*1e3;function HCt(){try{if(Y9(L0)||PCt(L0,{recursive:!0}),Y9(nx)){let e=opn(nx);if(Date.now()-e.mtimeMs<apn)return!1;try{FCt(nx)}catch(r){return ve(`Failed to remove stale lock file: ${r}`),!1}}return ipn(nx,`${process.pid}`,"utf8"),!0}catch(e){return ve(`Failed to acquire lock: ${e}`),!1}}function $Ct(){try{Y9(nx)&&LCt(nx,"utf8")===`${process.pid}`&&FCt(nx)}catch(e){ve(`Failed to release lock: ${e}`)}}async function Exe(){try{let e=await si("npm -g config get prefix");if(e.code!==0)return ve("Failed to check npm permissions"),{hasPermissions:!1,npmPrefix:null};let t=e.stdout.trim(),r=!1;try{spn(t,npn.W_OK),r=!0}catch{r=!1}return r?{hasPermissions:!0,npmPrefix:t}:(ve("Insufficient permissions for global npm install."),{hasPermissions:!1,npmPrefix:t})}catch(e){return ve(`Failed to verify npm global install permissions: ${e}`),{hasPermissions:!1,npmPrefix:null}}}async function qCt(e){if(!HCt())throw Et("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:z9.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{Y9(e)||PCt(e,{recursive:!0});let t=await si(`npm -g config set prefix ${e}`);if(t.code!==0)throw new Error(`Failed to set npm prefix: ${t.stderr}`);let r=`
|
|
1132
1132
|
# npm global path
|
|
1133
1133
|
export PATH="${e}/bin:$PATH"
|
|
1134
1134
|
`;if(UCt==="win32"){let n=await si(`setx PATH "${process.env.PATH};${e}"`);if(n.code!==0)throw new Error(`Failed to update PATH on Windows: ${n.stderr}`)}else{let n=[IO(j9(),".bashrc"),IO(j9(),".bash_profile"),IO(j9(),".zshrc"),IO(j9(),".config","fish","config.fish")];for(let i of n)if(Y9(i))try{if(!LCt(i,"utf8").includes(e)){if(i.includes("fish")){let s=`
|
|
@@ -3349,7 +3349,7 @@ async () => {
|
|
|
3349
3349
|
`).replace(/\n+/g,"\\n").trim(),l=s.length>0?s.join(" "):"(no methods available)";return`- ${o}:${a??""}
|
|
3350
3350
|
- ${l}`}).join(`
|
|
3351
3351
|
`)}async function pzt(){return y9n.replace("{{providers}}",await b9n())}async function C9n(e){let t=[];for(let r of e){if("error"in r)continue;let n={};try{let{tools:i}=await r.client.listTools();for(let o of i)n[o.name]=async s=>fzt(r.client,o.name,s)}catch(i){console.warn(`Failed to list tools for codemode client ${r.name}:`,i);continue}t.push({name:r.name,fns:n})}return t}function mzt(){let e=new ise;return{name:"codemode",inputSchema:_9n,inputJSONSchema:{type:"object",properties:{code:{type:"string",description:"JavaScript async arrow function to execute"}},required:["code"]},async description(t){return t?.code?"Execute JavaScript code":pzt()},async prompt(){return pzt()},userFacingName(){return"codemode"},async isEnabled(){return!0},isReadOnly(){return!1},isMcp(){return!1},needsPermissions(){return!0},async validateInput(t){return!t.code||typeof t.code!="string"?{result:!1,message:"code is required"}:{result:!0}},renderResultForAssistant(t){return t.error?`Error: ${t.error}`:zLe(t.result)},renderToolUseMessage(t){return t.code.split(`
|
|
3352
|
-
`)[0]??"codemode"},renderToolResultMessage(t){let r=ezt(t.result);return x1.createElement(N,{flexDirection:"column"},t.error?x1.createElement(N,{flexDirection:"row",key:"error"},x1.createElement(v,null," \u23BF "),x1.createElement(v,{color:"red",key:"error-text"},`Error: ${t.error}`)):null,x1.createElement(N,{flexDirection:"row",key:"result"},x1.createElement(v,null," \u23BF "),x1.createElement(v,{key:"result-text"},r)))},async*call(t,r,n){let i=r??{abortController:new AbortController,readFileTimestamps:{}},o=j6(),s=Object.keys(o),[a,l]=await Promise.all([dse(),fse().catch(()=>[])]),c=await C9n(a),u=VLe(),f={search:async m=>czt(m,l,u,s),describe:async m=>dzt(m,l,u),saveSnippet:async(m,A,E)=>{let _={name:m,description:E,code:A,savedAt:Date.now(),connectors:s};return azt(_),{saved:!0,name:m}}},g=await e.execute(ozt(t.code),c,f);yield{type:"result",data:g,resultForAssistant:g.error?`Error: ${g.error}`:zLe(g.result)}}}}var S9n=k.object({code:k.string().describe("JavaScript async arrow function to execute")}),KM=mzt(),gzt={...KM,name:"codemode",inputSchema:S9n,async description(e){return KM.description(e)},async prompt(){return KM.description()},userFacingName(){return"
|
|
3352
|
+
`)[0]??"codemode"},renderToolResultMessage(t){let r=ezt(t.result);return x1.createElement(N,{flexDirection:"column"},t.error?x1.createElement(N,{flexDirection:"row",key:"error"},x1.createElement(v,null," \u23BF "),x1.createElement(v,{color:"red",key:"error-text"},`Error: ${t.error}`)):null,x1.createElement(N,{flexDirection:"row",key:"result"},x1.createElement(v,null," \u23BF "),x1.createElement(v,{key:"result-text"},r)))},async*call(t,r,n){let i=r??{abortController:new AbortController,readFileTimestamps:{}},o=j6(),s=Object.keys(o),[a,l]=await Promise.all([dse(),fse().catch(()=>[])]),c=await C9n(a),u=VLe(),f={search:async m=>czt(m,l,u,s),describe:async m=>dzt(m,l,u),saveSnippet:async(m,A,E)=>{let _={name:m,description:E,code:A,savedAt:Date.now(),connectors:s};return azt(_),{saved:!0,name:m}}},g=await e.execute(ozt(t.code),c,f);yield{type:"result",data:g,resultForAssistant:g.error?`Error: ${g.error}`:zLe(g.result)}}}}var S9n=k.object({code:k.string().describe("JavaScript async arrow function to execute")}),KM=mzt(),gzt={...KM,name:"codemode",inputSchema:S9n,async description(e){return KM.description(e)},async prompt(){return KM.description()},userFacingName(){return"Code"},async isEnabled(){try{return(await fse()).length>0}catch{return!1}},isReadOnly(){return!1},isMcp(){return!1},needsPermissions(){return!0},async validateInput(e){return!e.code||typeof e.code!="string"?{result:!1,message:"code is required"}:{result:!0}},renderResultForAssistant(e){return e.error?`Error: ${e.error}`:KM.renderResultForAssistant(e)},renderToolUseMessage(e){return e.code},renderToolResultMessage(e){return KM.renderToolResultMessage(e)},async*call(e,t,r){yield*KM.call(e,t,r)}};var JM=X(he(),1);Qr();Kt();mP();He();var Azt=Ga,hzt="\u901A\u8FC7\u5DE5\u5177 name \u4EE3\u7406\u8C03\u7528\u6240\u6709\u5176\u4ED6\u5DE5\u5177\uFF0C\u5E76\u63D0\u4F9B\u83B7\u53D6\u5DE5\u5177\u8BE6\u7EC6\u8BF4\u660E\u4E0E\u5165\u53C2\u7ED3\u6784\u7684\u80FD\u529B",Ezt=`You are in Proxy mode. Every tool listed under <available_tools> MUST be invoked through ${Ga}. Direct calls to any tool in <available_tools> are strictly forbidden.
|
|
3353
3353
|
|
|
3354
3354
|
## Discovery-First Rule
|
|
3355
3355
|
If you have NOT used a tool in this conversation, you MUST run a discovery pass first. Never guess method names, parameter names, types, or structure.
|
|
@@ -3513,7 +3513,7 @@ Return ONLY a JSON object with the following format:
|
|
|
3513
3513
|
{"selected_memories": ["filename1.md", "filename2.md"]}`;try{let c=(await L2({systemPrompt:[Z9n],userPrompt:a,agentId:"memory-selector",signal:r})).message.content.find(A=>A.type==="text");if(!c||c.type!=="text")return[];let u=c.text.trim(),f=u.match(/\{[\s\S]*\}/),g=f?f[0]:u;return(h0e(g).selected_memories||[]).filter(A=>i.has(A))}catch(l){return r.aborted?[]:(ve(`[memdir] selectRelevantMemories failed: ${l}`),[])}}var eFe=200,tFe=4096;async function Nzt(e){return(await Promise.all(e.map(async({path:r})=>{try{let{content:n,totalLines:i}=aW(r,0,eFe),o=n.length>tFe,s=o?n.slice(0,tFe):n,l=i>eFe||o?`
|
|
3514
3514
|
|
|
3515
3515
|
> This memory file was truncated (${o?`${tFe} byte limit`:`first ${eFe} lines`}). Use the Read tool to view the complete file at: ${r}`:"";return{path:r,content:s+l}}catch(n){return ve(`[memoryRecall] failed to read memory file ${r}: ${n}`),null}}))).filter(r=>r!==null)}Fg();function Bzt(e){return typeof e=="string"?{type:"text",text:e}:e}function e4n(e){if(typeof e=="string")return e;let t=[];if(Array.isArray(e))for(let r of e)t.push(Bzt(r));else t.push(Bzt(e));return t}async function t4n(e,t,r){if(process.env.USER_TYPE!=="ant"||!r||!await xUt()){let o=await t();return e.abortController.signal.aborted?{message:null,shouldSkipPermissionCheck:!1}:{message:o,shouldSkipPermissionCheck:!1}}let[n,i]=await Promise.all([t(),t()]);return e.abortController.signal.aborted?{message:null,shouldSkipPermissionCheck:!1}:i.isApiErrorMessage?{message:n,shouldSkipPermissionCheck:!1}:n.isApiErrorMessage?{message:i,shouldSkipPermissionCheck:!1}:wUt(n,i)?await r(n,i):{message:n,shouldSkipPermissionCheck:!1}}async function*uE(e,t,r,n,i,o){i.turns||(i.turns={count:0}),i.turns.count++,ut();let s=i.lazyToolMode==="proxy",a=i.lazyToolMode==="loading";if(s)i.options._tools||(i.options._tools=i.options.tools),i.options.tools=i.options._tools.filter(G=>G.name===Ga||G.name===bz);else if(a){i.options._tools||(i.options._tools=i.options.tools);let G=Je.getInQueryContext(i.agentId)[yg],U=Ae=>Ae.name===Pc||Ae.name===Al,ne=i.options._tools.filter(Ae=>Up.includes(Ae.name)&&!U(Ae)),be=new Map(i.options._tools.map(Ae=>[Ae.name,Ae])),M=G?[...G].filter(Ae=>!Up.includes(Ae)&&be.has(Ae)).map(Ae=>be.get(Ae)):[],pe=i.options._tools.filter(U);i.options.tools=[...ne,...M,...pe]}else i.options._tools&&(i.options.tools=i.options._tools,delete i.options._tools);e=Cz(e);let{messages:l,wasCompacted:c}=await t_t(e,i);if(c){e=l;for(let G of e)yield G}gc("session:startup",{agentId:i.agentId,messages:e.length,timestamp:Date.now(),context:r||{}});let u=e.filter(G=>G.type==="user").pop();if(u&&u.message.content){let G=u.message.content;typeof G=="string"&&DUt(G).catch(U=>{ve(U)})}c4n(i.agentId,u,i.abortController.signal);let{systemPrompt:f,reminders:g}=await Pzt(t,r,{agentId:i.agentId,permissionMode:i.options?.permissionMode,tools:i.options.tools,allTools:i.options._tools??i.options.tools,lazyToolMode:i.lazyToolMode},e),m=Je.getInQueryContext()[JI];if(m&&m.filePath&&!Je.getInQueryContext().open_in_ide&&(yield cE("File opened in IDE: "+m.filePath),Je.getInQueryContext().open_in_ide=!0),!i.agentName){let G=await pa.takeMailInbox(pa.getCurrentTeamName(),i.agentName||WR);if(G&&G.length>0){let U=pa.formatMessagesForContext(G),ne=jt([{type:"text",text:U}]);yield ne,e.push(ne)}}let E=Je.getSessionContext(i.agentId).takePendingPrompts();if(E&&E.length>0){let G=Qzt(E.join(`
|
|
3516
|
-
`));yield G,e.push(G)}let _=a4n(e,g);function C(){return js(sS.applyToMessages(n5t(Ld(e))),f,i.options.tools,i.abortController.signal,{dangerouslySkipPermissions:i.options.dangerouslySkipPermissions??!1,model:i.options.slowAndCapableModel,prependCLISysprompt:!0,agentId:i.agentId,thinking:i.options.thinking},i)}let S=await t4n(i,C,o);if(S.message===null){yield kr(Ll);return}let I=S.message;if(process.env[qL]==="true")try{I.message.content=I.message.content.map(G=>{if(G.type==="tool_use"){let U=i.options.tools.find(ne=>ne.name===G.name);if(U.isMcp?.()){let ne=U.inputSchema.safeParse(G.input);return ne.success?G.input=ne.data:(J("\u6A21\u578B\u8FD4\u56DE\u7684\u5DE5\u5177\u975E\u6CD5\uFF0C\u9700\u8981\u8FDB\u884C\u4FEE\u590D "+G.input),G.input=Rzt(G.input)),G}else if(U?.isFixSchema?.()){let ne=U.inputSchema.safeParse(G.input);return ne.success&&(G.input=ne.data),G}}return G})}catch(G){J(`Error in fixing tool input schema: ${G}`)}let w=S.shouldSkipPermissionCheck,O=await zs();BUt([...e,I],t,r,O,i,i.agentId?"subagent":"repl_main_thread").catch(G=>{ve(G)}),yield I;let Q=I.message.content.filter(G=>G.type==="tool_use");if(!Q.length)return;let z=await _ht(Q,i.agentId);if(z)for(let G of z)yield G;i={...i};let Y=[];for await(let G of r4n(Q,I,n,i,w,e))yield G,G.type==="user"&&Y.push(G);if(i.abortController.signal.aborted){let G=new Set(Y.flatMap(U=>U.message.content.filter(ne=>ne.type==="tool_result").map(ne=>ne.tool_use_id)));for(let U of Q)if(!G.has(U.id)){let ne=jt([gse(U.id)]);yield ne,Y.push(ne)}yield kr(iFe);return}let q=Y.sort((G,U)=>{let ne=Q.findIndex(M=>M.id===G.message.content[0].id),be=Q.findIndex(M=>M.id===U.message.content[0].id);return ne-be});s4n(e,_),yield*await uE([...e,I,...q],t,r,n,i,o)}async function*r4n(e,t,r,n,i,o){let s=new hX;s.setAbortSignal(n.abortController.signal);for(let a of e){let l=new gX,{toolName:c,isProxyCall:u}=kzt(a,n),f=Mzt(n,c,u);f?(l.sync=!f.isReadOnly(),l.toolName=f.name):l.sync=!0,l.callable=()=>n4n(a,new Set(e.map(g=>g.id)),t,r,n,i,o),s.addTask(l)}for await(let a of s.getResult())yield a}function kzt(e,t){let r=e.input??{};return t.lazyToolMode==="proxy"&&e.name===Ga&&(r.action??"call")==="call"&&r.name?{toolName:String(r.name),toolInput:r.input??{},isProxyCall:!0}:{toolName:e.name,toolInput:r,isProxyCall:!1}}function Mzt(e,t,r){return e.options.tools.find(n=>n.name===t)??(r?e.options._tools?.find(n=>n.name===t):void 0)}async function*n4n(e,t,r,n,i,o,s){try{let{toolName:a,toolInput:l,isProxyCall:c}=kzt(e,i),u=Mzt(i,a,c);if(!u){Et("tengu_tool_use_error",{error:`No such tool available: ${a}`,messageID:r.message.id,toolName:a,toolUseID:e.id});let g=i.lazyToolMode==="proxy",m=i.lazyToolMode==="loading";yield jt([{type:"tool_result",content:g?`Error: No such tool available: ${a}. Use ProxyTool({action:'describe'}) to view available tools.`:m?`Error: No such tool available: ${a}, Use the ToolLoader to load it`:`Error: No such tool available: ${a}`,is_error:!0,tool_use_id:e.id}]);return}let f=l;try{if(i.abortController.signal.aborted){Et("tengu_tool_use_cancelled",{toolName:u.name,toolUseID:e.id}),yield jt([gse(e.id)]);return}for await(let g of o4n(u,e.id,t,f,i,n,r,o,s))yield g}catch(g){let m=nFe(g);ve(g),yield jt([{type:"tool_result",content:`call tool ${e.id} error ${m} `,is_error:!0,tool_use_id:e.id}])}}catch(a){let l=nFe(a);yield jt([{type:"tool_result",content:`call tool ${e.id} error ${l} `,is_error:!0,tool_use_id:e.id}])}}function i4n(e,t){switch(e){case qi:{let{command:r,timeout:n,run_in_background:i}=qi.inputSchema.parse(t);return{command:r.replace(`cd ${Be()} && `,""),...n?{timeout:n}:{},...i!==void 0?{run_in_background:i}:{}}}default:return t}}async function*o4n(e,t,r,n,i,o,s,a,l){let c=e.inputSchema.safeParse(n);if(!c.success){Et("tengu_tool_use_error",{error:`InputValidationError: ${c.error.message}`,messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200)}),yield jt([{type:"tool_result",content:`InputValidationError: ${c.error.message}`,is_error:!0,tool_use_id:t}]);return}let u=i4n(e,n),f=await e.validateInput?.(u,l&&l.length>0?{...i,historyMessages:l}:i);if(f?.result===!1){Et("tengu_tool_use_error",{error:f?.message.slice(0,2e3),messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200),...f?.meta??{}}),yield jt([{type:"tool_result",content:f.message,is_error:!0,tool_use_id:t}]);return}let g=new k3(i.hookContext?.hooks),m=Je.getSessionContext(i.agentId).getSessionId(),A={session_id:m,transcript_path:za(),cwd:Be(),permission_mode:i.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PreToolUse",tool_name:e.name,tool_input:u,tool_use_id:t},E={hookWarning:null,forceCheck:!1},_=await g.execute(A);if(_){if(_.systemMessage&&!_.suppressOutput&&(yield Dv(t,r,kr(_.systemMessage),[],[],{multiline:!1,freeze:!0})),_.continue===!1){Et("tengu_tool_use_blocked_by_hook",{toolName:e.name,toolUseID:t,reason:_.stopReason?"Error: "+_.stopReason:"Tool execution blocked by PreToolUse hook"}),yield jt([{type:"tool_result",content:_.stopReason?"Error: "+_.stopReason:"Tool execution blocked by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(_.hookSpecificOutput?.permissionDecision==="deny"){Et("tengu_tool_use_denied_by_hook",{toolName:e.name,toolUseID:t,reason:_.hookSpecificOutput.permissionDecisionReason||"Denied by PreToolUse hook"}),yield jt([{type:"tool_result",content:_.hookSpecificOutput.permissionDecisionReason||"Tool execution denied by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(_.hookSpecificOutput?.permissionDecision==="ask"?(a=!1,E.forceCheck=!0):_.hookSpecificOutput?.permissionDecision==="allow"&&(yield Dv(t,r,kr(_.hookSpecificOutput.permissionDecisionReason||"Tool execution allowed by PreToolUse hook"),[],[],{multiline:!1,freeze:!0})),_.hookSpecificOutput?.updatedInput)for(let S in _.hookSpecificOutput.updatedInput)S in u&&(u[S]=_.hookSpecificOutput.updatedInput[S]);E.hookWarning=`Hook PreToolUse:${e.name} requires confirmation for this command:${_.hookSpecificOutput.permissionDecisionReason}`}let C=a?{result:!0}:await o(e,u,i,s,t,E,l);if(C.result===!1){yield jt([{type:"tool_result",content:C.message,is_error:!0,tool_use_id:t}]);return}try{i.currentToolUseID=t;let S=e.call(u,l&&l.length>0?{...i,historyMessages:l}:i,o);for await(let{value:I,aborted:w}of NUt(S,i.abortController.signal)){if(w){Hd.abortResponse(t);let O=new rM(i.hookContext?.hooks),Q={session_id:m,transcript_path:za(),cwd:Be(),permission_mode:i.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUseFailure",tool_name:e.name,tool_input:u,tool_use_id:t,error:"User interrupted the tool execution",is_interrupt:!0};O.execute(Q).catch(z=>{J("PostToolUseFailure hook error during interrupt:",z)}),yield jt([gse(t)]);return}switch(I.type){case"result":Et("tengu_tool_use_success",{messageID:s.message.id,toolName:e.name});let O=new M3(i.hookContext?.hooks),Q={session_id:m,transcript_path:za(),cwd:Be(),permission_mode:i.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUse",tool_name:e.name,tool_input:u,tool_response:I.data||{},tool_use_id:t},z=await O.execute(Q);z&&z.decision==="block"&&(yield Dv(t,r,kr(z.reason?`PostToolUse:Read hook blocking error:${z.reason}`:"Tool execution blocked by PostToolUse hook"),[],[],{multiline:!1,freeze:!0}));let Y="";if(z&&z.hookSpecificOutput?.additionalContext&&(Y=`<system-reminder>
|
|
3516
|
+
`));yield G,e.push(G)}let _=a4n(e,g);function C(){return js(sS.applyToMessages(n5t(Ld(e))),f,i.options.tools,i.abortController.signal,{dangerouslySkipPermissions:i.options.dangerouslySkipPermissions??!1,model:i.options.slowAndCapableModel,prependCLISysprompt:!0,agentId:i.agentId,thinking:i.options.thinking},i)}let S=await t4n(i,C,o);if(S.message===null){yield kr(Ll);return}let I=S.message;if(process.env[qL]==="true")try{I.message.content=I.message.content.map(G=>{if(G.type==="tool_use"){let U=i.options.tools.find(ne=>ne.name===G.name);if(U.isMcp?.()){let ne=U.inputSchema.safeParse(G.input);return ne.success?G.input=ne.data:(J("\u6A21\u578B\u8FD4\u56DE\u7684\u5DE5\u5177\u975E\u6CD5\uFF0C\u9700\u8981\u8FDB\u884C\u4FEE\u590D "+G.input),G.input=Rzt(G.input)),G}else if(U?.isFixSchema?.()){let ne=U.inputSchema.safeParse(G.input);return ne.success&&(G.input=ne.data),G}}return G})}catch(G){J(`Error in fixing tool input schema: ${G}`)}let w=S.shouldSkipPermissionCheck,O=await zs();BUt([...e,I],t,r,O,i,i.agentId?"subagent":"repl_main_thread").catch(G=>{ve(G)}),yield I;let Q=I.message.content.filter(G=>G.type==="tool_use");if(!Q.length)return;let z=await _ht(Q,i.agentId);if(z)for(let G of z)yield G;i={...i};let Y=[];for await(let G of r4n(Q,I,n,i,w,e))yield G,G.type==="user"&&Y.push(G);if(i.abortController.signal.aborted){let G=new Set(Y.flatMap(U=>U.message.content.filter(ne=>ne.type==="tool_result").map(ne=>ne.tool_use_id)));for(let U of Q)if(!G.has(U.id)){let ne=jt([gse(U.id)]);yield ne,Y.push(ne)}yield kr(iFe);return}let q=Y.sort((G,U)=>{let ne=Q.findIndex(M=>M.id===G.message.content[0].id),be=Q.findIndex(M=>M.id===U.message.content[0].id);return ne-be});s4n(e,_),yield*await uE([...e,I,...q],t,r,n,i,o)}async function*r4n(e,t,r,n,i,o){let s=new hX;s.setAbortSignal(n.abortController.signal);for(let a of e){let l=new gX,{toolName:c,isProxyCall:u}=kzt(a,n),f=Mzt(n,c,u);f?(l.sync=!f.isReadOnly(),l.toolName=f.name):l.sync=!0,l.callable=()=>n4n(a,new Set(e.map(g=>g.id)),t,r,n,i,o),s.addTask(l)}for await(let a of s.getResult())yield a}function kzt(e,t){let r=e.input??{};return t.lazyToolMode==="proxy"&&e.name===Ga&&(r.action??"call")==="call"&&r.name?{toolName:String(r.name),toolInput:r.input??{},isProxyCall:!0}:{toolName:e.name,toolInput:r,isProxyCall:!1}}function Mzt(e,t,r){return e.options.tools.find(n=>n.name===t)??(r?e.options._tools?.find(n=>n.name===t):void 0)}async function*n4n(e,t,r,n,i,o,s){try{let{toolName:a,toolInput:l,isProxyCall:c}=kzt(e,i),u=Mzt(i,a,c);if(!u){Et("tengu_tool_use_error",{error:`No such tool available: ${a}`,messageID:r.message.id,toolName:a,toolUseID:e.id});let g=i.lazyToolMode==="proxy",m=i.lazyToolMode==="loading";yield jt([{type:"tool_result",content:g?`Error: No such tool available: ${a}. Use ProxyTool({action:'describe'}) to view available tools.`:m?`Error: No such tool available: ${a}, Use the ToolLoader to load it`:`Error: No such tool available: ${a}`,is_error:!0,tool_use_id:e.id}]);return}let f=l;try{if(i.abortController.signal.aborted){Et("tengu_tool_use_cancelled",{toolName:u.name,toolUseID:e.id}),yield jt([gse(e.id)]);return}for await(let g of o4n(u,e.id,t,f,i,n,r,o,s))yield g}catch(g){let m=nFe(g);ve(g),yield jt([{type:"tool_result",content:`call tool ${e.id} error ${m} `,is_error:!0,tool_use_id:e.id}])}}catch(a){let l=nFe(a);yield jt([{type:"tool_result",content:`call tool ${e.id} error ${l} `,is_error:!0,tool_use_id:e.id}])}}function i4n(e,t){switch(e){case qi:{let{command:r,timeout:n,run_in_background:i}=qi.inputSchema.parse(t);return{command:r.replace(`cd ${Be()} && `,""),...n?{timeout:n}:{},...i!==void 0?{run_in_background:i}:{}}}default:return t}}async function*o4n(e,t,r,n,i,o,s,a,l){let c=e.inputSchema.safeParse(n);if(!c.success){Et("tengu_tool_use_error",{error:`InputValidationError: ${c.error.message}`,messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200)});let S=i.lazyToolMode==="proxy"?` Use ProxyTool({action:'describe', name:'${e.name}'}) to view the correct parameter structure before retrying.`:"";yield jt([{type:"tool_result",content:`InputValidationError: ${c.error.message}${S}`,is_error:!0,tool_use_id:t}]);return}let u=i4n(e,n),f=await e.validateInput?.(u,l&&l.length>0?{...i,historyMessages:l}:i);if(f?.result===!1){Et("tengu_tool_use_error",{error:f?.message.slice(0,2e3),messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,200),...f?.meta??{}}),yield jt([{type:"tool_result",content:f.message,is_error:!0,tool_use_id:t}]);return}let g=new k3(i.hookContext?.hooks),m=Je.getSessionContext(i.agentId).getSessionId(),A={session_id:m,transcript_path:za(),cwd:Be(),permission_mode:i.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PreToolUse",tool_name:e.name,tool_input:u,tool_use_id:t},E={hookWarning:null,forceCheck:!1},_=await g.execute(A);if(_){if(_.systemMessage&&!_.suppressOutput&&(yield Dv(t,r,kr(_.systemMessage),[],[],{multiline:!1,freeze:!0})),_.continue===!1){Et("tengu_tool_use_blocked_by_hook",{toolName:e.name,toolUseID:t,reason:_.stopReason?"Error: "+_.stopReason:"Tool execution blocked by PreToolUse hook"}),yield jt([{type:"tool_result",content:_.stopReason?"Error: "+_.stopReason:"Tool execution blocked by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(_.hookSpecificOutput?.permissionDecision==="deny"){Et("tengu_tool_use_denied_by_hook",{toolName:e.name,toolUseID:t,reason:_.hookSpecificOutput.permissionDecisionReason||"Denied by PreToolUse hook"}),yield jt([{type:"tool_result",content:_.hookSpecificOutput.permissionDecisionReason||"Tool execution denied by PreToolUse hook",is_error:!0,tool_use_id:t}]);return}if(_.hookSpecificOutput?.permissionDecision==="ask"?(a=!1,E.forceCheck=!0):_.hookSpecificOutput?.permissionDecision==="allow"&&(yield Dv(t,r,kr(_.hookSpecificOutput.permissionDecisionReason||"Tool execution allowed by PreToolUse hook"),[],[],{multiline:!1,freeze:!0})),_.hookSpecificOutput?.updatedInput)for(let S in _.hookSpecificOutput.updatedInput)S in u&&(u[S]=_.hookSpecificOutput.updatedInput[S]);E.hookWarning=`Hook PreToolUse:${e.name} requires confirmation for this command:${_.hookSpecificOutput.permissionDecisionReason}`}let C=a?{result:!0}:await o(e,u,i,s,t,E,l);if(C.result===!1){yield jt([{type:"tool_result",content:C.message,is_error:!0,tool_use_id:t}]);return}try{i.currentToolUseID=t;let S=e.call(u,l&&l.length>0?{...i,historyMessages:l}:i,o);for await(let{value:I,aborted:w}of NUt(S,i.abortController.signal)){if(w){Hd.abortResponse(t);let O=new rM(i.hookContext?.hooks),Q={session_id:m,transcript_path:za(),cwd:Be(),permission_mode:i.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUseFailure",tool_name:e.name,tool_input:u,tool_use_id:t,error:"User interrupted the tool execution",is_interrupt:!0};O.execute(Q).catch(z=>{J("PostToolUseFailure hook error during interrupt:",z)}),yield jt([gse(t)]);return}switch(I.type){case"result":Et("tengu_tool_use_success",{messageID:s.message.id,toolName:e.name});let O=new M3(i.hookContext?.hooks),Q={session_id:m,transcript_path:za(),cwd:Be(),permission_mode:i.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUse",tool_name:e.name,tool_input:u,tool_response:I.data||{},tool_use_id:t},z=await O.execute(Q);z&&z.decision==="block"&&(yield Dv(t,r,kr(z.reason?`PostToolUse:Read hook blocking error:${z.reason}`:"Tool execution blocked by PostToolUse hook"),[],[],{multiline:!1,freeze:!0}));let Y="";if(z&&z.hookSpecificOutput?.additionalContext&&(Y=`<system-reminder>
|
|
3517
3517
|
PostToolUse:${e.name} hook additional context: ${z.hookSpecificOutput.additionalContext}
|
|
3518
3518
|
</system-reminder>`),typeof I.resultForAssistant=="function"){let q=I.resultForAssistant(t);if(Y&&Array.isArray(q)){let G=q.find(U=>U.type==="tool_result");G&&(Array.isArray(G.content)||(G.content=[{type:"text",text:G.content}]),G.content.push({type:"text",text:Y}))}yield jt(q,{data:I.data,resultForAssistant:I.resultForAssistant})}else{let q=e4n(I.resultForAssistant),G=[];Array.isArray(q)?G.push(...q):q&&G.push({type:"text",text:q}),Y&&G.push({type:"text",text:Y}),yield jt([{type:"tool_result",content:G,tool_use_id:t}],{data:I.data,resultForAssistant:I.resultForAssistant})}return;case"progress":Et("tengu_tool_use_progress",{messageID:s.message.id,toolName:e.name}),yield Dv(t,r,I.content,I.normalizedMessages,I.tools,I.meta)}}}catch(S){J("\u5DE5\u5177\u6267\u884C\u9519\u8BEF\uFF1A",S);let I=nFe(S);Et("tengu_tool_use_error",{error:I.slice(0,2e3),messageID:s.message.id,toolName:e.name,toolInput:JSON.stringify(n).slice(0,1e3)});let w=new rM(i.hookContext?.hooks),O={session_id:m,transcript_path:za(),cwd:Be(),permission_mode:i.options?.dangerouslySkipPermissions?"dangerouslySkipPermissions":"default",hook_event_name:"PostToolUseFailure",tool_name:e.name,tool_input:u,tool_use_id:t,error:I,is_interrupt:!1},Q=await w.execute(O),z="";Q?.hookSpecificOutput?.additionalContext&&(z=`<system-reminder>
|
|
3519
3519
|
PostToolUseFailure:${e.name} hook additional context: ${Q.hookSpecificOutput.additionalContext}
|