@dahawa/hawa-code 1.37.2 → 1.37.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/cli.js +627 -627
  2. package/hands.js +4 -4
  3. package/package.json +1 -1
package/hands.js CHANGED
@@ -752,7 +752,7 @@ data: ${JSON.stringify($)}
752
752
  [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 JMr(`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"}}},e0e=new XEe;var Clt=ie(Elt(),1);function fA(e){return e?typeof e.entries=="function"?Object.fromEntries(e.entries()):{...e}:{}}function ylt(e){let t=String(e?.["x-thinking-level"]??"medium").toLowerCase();return["off","low","medium","high"].includes(t)?t:"medium"}function dzr(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t}}function fzr(e,t){if(t==="off"){delete e.reasoning;return}e.reasoning={effort:t,summary:"auto"}}function pzr(e,t="chat"){let r={request:{},response:{},openai:{request:{},response:{}}};return r.request.model=e.request.body.model,r.request.messages=e.request.body.messages,r.request.system=e.request.body.system,r.response.content=e.response.body.content,t==="responses"?(r.openai.request.model=e.openai.request.body.model,r.openai.request.input=e.openai.request.body.input,r.openai.response.output=e.openai.response.body?.output):(r.openai.request.model=e.openai.request.body.model,r.openai.request.messages=e.openai.request.body.messages,r.openai.response.choices=e.openai.response.body.choices),r}function nU(e,t,r){pG(t,e),mG(t,pzr(e,r),r)}function mR(e){let t=[],r=e.getReader(),n,i=new Promise(u=>n=u),o=!1,s=()=>{o||(o=!0,n(Buffer.concat(t).toString("utf8")))};return{stream:new ReadableStream({async pull(u){try{let{done:l,value:c}=await r.read();if(l){u.close(),s();return}t.push(c),u.enqueue(c)}catch(l){u.error(l),s()}},cancel(u){r.cancel(u).catch(()=>{}),s()}}),done:i}}function iU(e){let t=new Headers(e);return t.delete("content-encoding"),t.delete("content-length"),t.delete("transfer-encoding"),t}function xCe(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 blt=["/v1/messages"];function wCe(e){let t;try{typeof e=="string"?t=new IT(e):e instanceof IT?t=e:t=new IT(e.url)}catch{return""}let r=t.pathname;for(let n of blt){let i=r.indexOf(n);if(i!==-1)return t.origin+r.slice(0,i)}return t.origin}function vK(e,t){let r=typeof e=="string"?e:e instanceof IT?e.toString():e.url,n;try{n=new IT(r).pathname}catch{return!1}return blt.some(i=>n.includes(i))&&(t.method==="POST"||t.method==="post")}function mzr(e){return async(t,r)=>{if(!vK(t,r))return e(t,r);let n=JSON.parse(r.body),i=await xV.transformRequestOut(n),o=wCe(t)+"/chat/completions",s=fA(r.headers),a=s.authorization??s.Authorization??"";dzr(i,ylt(s));let u=await e(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:a},body:JSON.stringify(i)});if(!u.ok){let _=await u.text();return le(`OpenAI Chat Completions API error: ${u.status}`,{url:o,errorResponse:_}),xCe("OpenAI Chat Completions API error","OPENROUTER",u.status,u.statusText,_)}let l=n.stream===!0,c=s["x-agent-id"],f={request:{url:o,method:r.method,headers:s,body:n},response:{status:u.status,statusText:u.statusText,headers:fA(u.headers)},openai:{request:{body:i},response:{}}};if(!l){let _=await u.text(),C=new Response(_,{status:u.status,statusText:u.statusText,headers:iU(u.headers)}),S=await xV.transformResponseIn(C,n),T=await S.text();try{nU({...f,openai:{...f.openai,response:{body:JSON.parse(_)}},response:{...f.response,body:JSON.parse(T)}},c)}catch(x){le("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Chat \u975E\u6D41\u5F0F):",x)}return new Response(T,{status:S.status,statusText:S.statusText,headers:S.headers})}let A=mR(u.body),m=new Response(A.stream,{status:u.status,statusText:u.statusText,headers:iU(u.headers)}),g=await xV.transformResponseIn(m,n),E=mR(g.body);return Promise.all([A.done,E.done]).then(async([_,C])=>{try{nU({...f,openai:{...f.openai,response:{body:await YXe(_)}},response:{...f.response,body:await WL(C)}},c)}catch(S){le("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Chat \u6D41\u5F0F):"+S?.stack)}}).catch(_=>le("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Chat):"+_)),new Response(E.stream,{status:g.status,statusText:g.statusText,headers:g.headers})}}function Azr(e){return async(t,r)=>{if(!vK(t,r))return e(t,r);let n=JSON.parse(r.body),i=await wV.transformRequestOut(n),o=fA(r.headers);fzr(i,ylt(o));let s=JSON.stringify(i),u=wCe(t)+"/responses",l=o.authorization??o.Authorization??"";if(!l)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 c=await e(u,{method:"POST",headers:{"Content-Type":"application/json",Authorization:l,"x-api-key":l.replace(/^Bearer\s+/i,"").trim()},body:s});if(!c.ok){let S=await c.text();return le(`OpenAI Responses API error: ${c.status} ${c.statusText}`,{url:u,status:c.status,errorResponse:S}),xCe("OpenAI Responses API error","RESPONSES",c.status,c.statusText,S)}let f=n.stream===!0,A=o["x-agent-id"],m={request:{url:u,method:r.method,headers:o,body:n},response:{status:c.status,statusText:c.statusText,headers:fA(c.headers)},openai:{request:{body:i},response:{}}};if(!f){let S=await c.text(),T=new Response(S,{status:c.status,statusText:c.statusText,headers:iU(c.headers)}),x=await wV.transformResponseIn(T,n),O=await x.text();try{nU({...m,openai:{...m.openai,response:{body:JSON.parse(S)}},response:{...m.response,body:JSON.parse(O)}},A,"responses")}catch(q){le("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u975E\u6D41\u5F0F):",q)}return new Response(O,{status:x.status,statusText:x.statusText,headers:x.headers})}let g=mR(c.body),E=new Response(g.stream,{status:c.status,statusText:c.statusText,headers:iU(c.headers)}),_=await wV.transformResponseIn(E,n),C=mR(_.body);return Promise.all([g.done,C.done]).then(async([S,T])=>{try{nU({...m,openai:{...m.openai,response:{body:await zXe(S)}},response:{...m.response,body:await WL(T)}},A,"responses")}catch(x){le("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Responses \u6D41\u5F0F):"+x?.stack)}}).catch(S=>le("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Responses):"+S)),new Response(C.stream,{status:_.status,statusText:_.statusText,headers:_.headers})}}function gzr(e){return async(t,r)=>{if(!vK(t,r))return e(t,r);let n=JSON.parse(r.body),i=fA(r.headers),o=await e0e.transformRequestOut(n),s=JSON.stringify(o),a=wCe(t)+`/models/${n.model}:streamGenerateContent?alt=sse`,u=i.authorization??i.Authorization??"",l;try{l=await e(a,{method:"POST",headers:{"Content-Type":"application/json","x-goog-api-key":String(u).replace(/^Bearer\s+/i,"").trim()},body:s})}catch(C){throw le("gemini request error:",C),C}if(!l.ok){let C=await l.text();return le(`Gemini API error response: ${l.status} ${l.statusText}`,{url:a,status:l.status,errorResponse:C}),xCe("Gemini API error","Gemini",l.status,l.statusText,C)}let c=n.stream===!0,f=i["x-agent-id"],A={request:{url:a,method:r.method,headers:fA(r.headers),body:n},response:{status:l.status,statusText:l.statusText,headers:fA(l.headers)},openai:{request:{body:o},response:{}}},m=mR(l.body),g=new Response(m.stream,{status:l.status,statusText:l.statusText,headers:iU(l.headers)}),E=await e0e.transformResponseIn(g),_=mR(E.body);return Promise.all([m.done,_.done]).then(async([C,S])=>{try{let T=c?jXe(C):JSON.parse(C),x=c?await WL(S):JSON.parse(S);nU({...A,openai:{...A.openai,response:{body:T}},response:{...A.response,body:x}},f)}catch(T){le("\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF(Gemini):"+T?.stack)}}).catch(C=>le("\u65E5\u5FD7\u805A\u5408\u9519\u8BEF(Gemini):"+C)),new Response(_.stream,{status:E.status,statusText:E.statusText,headers:E.headers})}}function hzr(e){return async(t,r)=>{if(!vK(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=fA(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});if(!a.ok){let f=await a.text();le(`API error response: ${a.status} ${a.statusText}`,{url:typeof t=="string"?t:t instanceof IT?t.toString():t.url,status:a.status,errorResponse:f});let A;try{let m=JSON.parse(f);A={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&&(A.error.details=m.error.details)}catch{A={type:"error",error:{type:"api_error",message:`API error: ${a.statusText}`,code:`API_${a.status}_ERROR`}}}return new Response(JSON.stringify(A),{status:a.status,statusText:a.statusText,headers:{"Content-Type":"application/json"}})}let u=a.clone(),l=!(Object.hasOwn(JSON.parse(n),"stream")&&!JSON.parse(n).stream),c={request:{url:typeof t=="string"?t:t instanceof IT?t.toString():t.url,method:r.method,headers:fA(r.headers),body:JSON.parse(n)},response:{status:a.status,statusText:a.statusText,headers:fA(a.headers)}};return(async()=>{if(l){let m=await a.text();c.response.body=await WL(m)}else c.response.body=await a.json();let A=fA(r.headers)["x-agent-id"];pG(A,c),mG(A,{request:c.request.body.messages,response:c.response.body.content})})().catch(f=>le(`\u65E5\u5FD7\u89E3\u6790\u9519\u8BEF:
753
753
  Stack trace: `+f.stack)),new Response(u.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}var DCe=null,_lt=!1;function Ezr(){if(_lt)return DCe;_lt=!0;let e=process.env.HTTPS_PROXY||process.env.HTTP_PROXY||process.env.https_proxy||process.env.http_proxy;return e&&(DCe=new Clt.ProxyAgent({uri:e}),qt(`[proxy] using proxy: ${e}`)),DCe}function _zr(){let e=Ezr();return e?((t,r={})=>global.fetch(t,{...r,dispatcher:e})):global.fetch}function DK(e){let t=e||process.env.API_TYPE,r=_zr();switch(t){case"openai":return mzr(r);case"openai-responses":return Azr(r);case"gemini":return gzr(r);default:return hzr(r)}}var Szr=ie(Ce(),1);function Slt(e,t){let r=[],n=Math.max(1,Math.floor(t)),i="",o=0;for(let s of e){let a=yzr(s);i&&o+a>n?(r.push(i),i=s,o=a):(i+=s,o+=a)}return i&&r.push(i),r}function yzr(e){if(e===" ")return 4;let t=e.codePointAt(0);return t===void 0||t===0||t<32||t>=127&&t<160||bzr(t)?0:Czr(t)?2:1}function bzr(e){return e>=768&&e<=879||e>=6832&&e<=6911||e>=7616&&e<=7679||e>=8400&&e<=8447||e>=65056&&e<=65071}function Czr(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 pA(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 eC(e){return new Intl.NumberFormat("en",{notation:"compact",maximumFractionDigits:1}).format(e).toLowerCase()}He();_d();var S0={totalCost:0,totalAPIDuration:0,startTime:Date.now(),inputTokens:0,outputTokens:0};function xK(e,t){S0.totalCost+=e,S0.totalAPIDuration+=t}function wK(e,t){S0.inputTokens+=e,S0.outputTokens+=t,Ci.emit("token:change",{inputTokens:S0.inputTokens,outputTokens:S0.outputTokens})}function Izr(){return Date.now()-S0.startTime}function Tzr(e){return`$${e>.5?vzr(e,100).toFixed(2):e.toFixed(4)}`}function Ilt(){return _r.grey(`Total cost: ${Tzr(S0.totalCost)}
754
754
  Total duration (API): ${pA(S0.totalAPIDuration)}
755
- Total duration (wall): ${pA(Izr())}`)}function vzr(e,t){return Math.round(e*t)/t}He();Ue();Ue();var NCe="1.37.2";globalThis.MACRO={VERSION:NCe,PACKAGE_URL:`@dahawa/${Ao}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var BK=process.env.HAWA_CODE_USER_AGENT||`${Ao}/${NCe} (${process.env.USER_TYPE})`;import{randomUUID as sD}from"crypto";var Dzr=()=>[],xzr=()=>{};function NK(){return Dzr}function Tlt(){return xzr}He();ir();Br();He();Ue();import{existsSync as D0,readdirSync as KVr,statSync as JVr}from"fs";import{join as nC,relative as ZVr}from"path";import{homedir as Kdt}from"os";import{platform as XVr}from"process";import{readFile as iC}from"fs/promises";Br();I0();kr();import{join as Ozr,sep as kzr}from"path";function qp(){if(!Hp())return!1;try{let e=yr();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Tf(){return(Ozr(Fe(),".hcode","team-memory")+kzr).normalize("NFC")}function OCe(e){let t=e.normalize("NFC"),r=Tf();return t.startsWith(r)}var Jdt=ie($K(),1);xi();var Ydt=ie($K(),1);Br();Ue();He();od();import{readFile as $dt}from"fs/promises";import{existsSync as KCe,readdirSync as YVr,statSync as jVr}from"fs";import{join as JCe,relative as jdt}from"path";import{homedir as VVr}from"os";function zdt(e){try{let t=(0,Ydt.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 we(t),{paths:[],content:e.trim()}}}function WVr(e,t){return t.length===0?!0:t.some(r=>{try{return Xu(e,r,{matchBase:!0,dot:!0})}catch(n){return we(n),!1}})}function ZCe(e){let t=[];try{if(!KCe(e))return t;let r=YVr(e);for(let n of r){let i=JCe(e,n),o=jVr(i);o.isDirectory()?t.push(...ZCe(i)):o.isFile()&&n.endsWith(".md")&&t.push(i)}}catch(r){we(r)}return t}async function Vdt(){let e=[];try{let t=JCe(VVr(),dn,"rules");if(KCe(t)){let r=ZCe(t);for(let n of r)try{let i=await $dt(n,"utf-8"),{paths:o,content:s}=zdt(i);o.length>0&&e.push({filePath:n,content:s,paths:o,isProjectRule:!1})}catch(i){we(i)}}}catch(t){we(t)}try{let t=JCe(Fe(),dn,"rules");if(KCe(t)){let r=ZCe(t);for(let n of r)try{let i=await $dt(n,"utf-8"),{paths:o,content:s}=zdt(i);o.length>0&&e.push({filePath:jdt(Fe(),n),content:s,paths:o,isProjectRule:!0})}catch(i){we(i)}}}catch(t){we(t)}return e}function Wdt(e,t){e=cY(e);let r=cY(Fe()),n=e.startsWith(r)?jdt(r,e):e;return t.filter(i=>WVr(n,i.paths))}var eWr=`# hawaCodeMd
755
+ Total duration (wall): ${pA(Izr())}`)}function vzr(e,t){return Math.round(e*t)/t}He();Ue();Ue();var NCe="1.37.3";globalThis.MACRO={VERSION:NCe,PACKAGE_URL:`@dahawa/${Ao}`,README_URL:"https://github.com/italking/hawa-code",ISSUES_EXPLAINER:"report the issue at https://github.com/italking/hawa-code/issues"};var BK=process.env.HAWA_CODE_USER_AGENT||`${Ao}/${NCe} (${process.env.USER_TYPE})`;import{randomUUID as sD}from"crypto";var Dzr=()=>[],xzr=()=>{};function NK(){return Dzr}function Tlt(){return xzr}He();ir();Br();He();Ue();import{existsSync as D0,readdirSync as KVr,statSync as JVr}from"fs";import{join as nC,relative as ZVr}from"path";import{homedir as Kdt}from"os";import{platform as XVr}from"process";import{readFile as iC}from"fs/promises";Br();I0();kr();import{join as Ozr,sep as kzr}from"path";function qp(){if(!Hp())return!1;try{let e=yr();if(e.autoMemory?.teamMemoryEnabled!==void 0)return e.autoMemory.teamMemoryEnabled}catch{}return!1}function Tf(){return(Ozr(Fe(),".hcode","team-memory")+kzr).normalize("NFC")}function OCe(e){let t=e.normalize("NFC"),r=Tf();return t.startsWith(r)}var Jdt=ie($K(),1);xi();var Ydt=ie($K(),1);Br();Ue();He();od();import{readFile as $dt}from"fs/promises";import{existsSync as KCe,readdirSync as YVr,statSync as jVr}from"fs";import{join as JCe,relative as jdt}from"path";import{homedir as VVr}from"os";function zdt(e){try{let t=(0,Ydt.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 we(t),{paths:[],content:e.trim()}}}function WVr(e,t){return t.length===0?!0:t.some(r=>{try{return Xu(e,r,{matchBase:!0,dot:!0})}catch(n){return we(n),!1}})}function ZCe(e){let t=[];try{if(!KCe(e))return t;let r=YVr(e);for(let n of r){let i=JCe(e,n),o=jVr(i);o.isDirectory()?t.push(...ZCe(i)):o.isFile()&&n.endsWith(".md")&&t.push(i)}}catch(r){we(r)}return t}async function Vdt(){let e=[];try{let t=JCe(VVr(),dn,"rules");if(KCe(t)){let r=ZCe(t);for(let n of r)try{let i=await $dt(n,"utf-8"),{paths:o,content:s}=zdt(i);o.length>0&&e.push({filePath:n,content:s,paths:o,isProjectRule:!1})}catch(i){we(i)}}}catch(t){we(t)}try{let t=JCe(Fe(),dn,"rules");if(KCe(t)){let r=ZCe(t);for(let n of r)try{let i=await $dt(n,"utf-8"),{paths:o,content:s}=zdt(i);o.length>0&&e.push({filePath:jdt(Fe(),n),content:s,paths:o,isProjectRule:!0})}catch(i){we(i)}}}catch(t){we(t)}return e}function Wdt(e,t){e=cY(e);let r=cY(Fe()),n=e.startsWith(r)?jdt(r,e):e;return t.filter(i=>WVr(n,i.paths))}var eWr=`# hawaCodeMd
756
756
  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 tWr(e="default"){let r=ze.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}):
757
757
 
758
758
  ${i.content}`}).join(`
@@ -1015,7 +1015,7 @@ try {
1015
1015
  `],{encoding:"utf8",maxBuffer:DAt,stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function KZr(){try{let e=$U("where",["pwsh.exe"],{encoding:"utf8",stdio:["ignore","pipe","ignore"]}).trim().split(/\r?\n/)[0];if(e)return e}catch{}return"powershell.exe"}var JZr="[Image pasted]";function NAt(e){return function(t){return(new Map(e).get(t)??(()=>{}))(t)}}function OAt({value:e,onChange:t,onSubmit:r,onExit:n,onExitMessage:i,onMessage:o,onHistoryUp:s,onHistoryDown:a,onHistoryReset:u,mask:l="",multiline:c=!1,cursorChar:f,invert:A,columns:m,onImagePaste:g,disableCursorMovementForUpDownKeys:E=!1,externalOffset:_,onOffsetChange:C}){let S=_,T=C,x=GU.fromText(e,m,S),[O,q]=(0,RAt.useState)(null);function $(){O&&(clearTimeout(O),q(null),o?.(!1))}let H=GT(ce=>{$(),i?.(ce,"Ctrl-C")},()=>n?.(),()=>{e&&(t(""),u?.())}),L=GT(ce=>{$(),o?.(!!e&&ce,"Press Escape again to clear")},()=>{e&&t("")});function Y(){return GU.fromText("",m,0)}let z=GT(ce=>i?.(ce,"Ctrl-D"),()=>n?.());function fe(){return $(),x.text===""?(z(),x):x.del()}function me(){if(l)return x;let ce=BAt();return ce===null?(wAt()&&(o?.(!0,xAt),$(),q(setTimeout(()=>{o?.(!1)},4e3))),x):(g?.(ce),x.insert(JZr))}let M=NAt([["a",()=>x.startOfLine()],["b",()=>x.left()],["c",H],["d",fe],["e",()=>x.endOfLine()],["f",()=>x.right()],["h",()=>($(),x.backspace())],["k",()=>x.deleteToLineEnd()],["l",()=>Y()],["n",()=>ee()],["p",()=>ae()],["u",()=>x.deleteToLineStart()],["v",me],["w",()=>x.deleteWordBefore()],["o",me]]),ue=NAt([["b",()=>x.prevWord()],["f",()=>x.nextWord()],["d",()=>x.deleteWordAfter()]]);function Ae(ce){if(c&&x.offset>0&&x.text[x.offset-1]==="\\")return x.backspace().insert(`
1016
1016
  `);if(ce.meta)return x.insert(`
1017
1017
  `);r?.(e)}function ae(){if(E)return s?.(),x;let ce=x.up();return ce.equals(x)&&s?.(),ce}function ee(){if(E)return a?.(),x;let ce=x.down();return ce.equals(x)&&a?.(),ce}function ve(ce,Ge){if(Ge.tab)return;if(Ge.backspace||Ge.delete||ce==="\b"||ce==="\x7F"||ce==="\b"){let K=x.backspace();x.equals(K)||(T(K.offset),x.text!==K.text&&t(K.text));return}if(!Ge.ctrl&&!Ge.meta&&ce.length>1){let K=x.insert(ce);x.equals(K)||(T(K.offset),x.text!==K.text&&t(K.text));return}let Ee=Se(Ge)(ce);Ee&&(x.equals(Ee)||(T(Ee.offset),x.text!==Ee.text&&t(Ee.text)))}function Se(ce){if(ce.backspace||ce.delete)return $(),()=>x.backspace();switch(!0){case ce.escape:return L;case(ce.leftArrow&&(ce.ctrl||ce.meta||"fn"in ce&&ce.fn)):return()=>x.prevWord();case(ce.rightArrow&&(ce.ctrl||ce.meta||"fn"in ce&&ce.fn)):return()=>x.nextWord();case ce.ctrl:return M;case("home"in ce&&ce.home):return()=>x.startOfLine();case("end"in ce&&ce.end):return()=>x.endOfLine();case ce.pageDown:return()=>x.endOfLine();case ce.pageUp:return()=>x.startOfLine();case ce.meta:return ue;case ce.return:return()=>Ae(ce);case ce.upArrow:return ae;case ce.downArrow:return ee;case ce.leftArrow:return()=>x.left();case ce.rightArrow:return()=>x.right()}return function(Ge){switch(!0){case(Ge=="\x1B[H"||Ge=="\x1B[1~"):return x.startOfLine();case(Ge=="\x1B[F"||Ge=="\x1B[4~"):return x.endOfLine();case(Ge==="\b"||Ge==="\x7F"||Ge==="\b"):return $(),x.backspace();default:return x.insert(Ge.replace(/\r/g,`
1018
- `))}}}return{onInput:ve,renderedValue:x.render(f,l,A),offset:S,setOffset:T}}function zU({value:e,placeholder:t="",focus:r=!0,mask:n,multiline:i=!1,highlightPastedText:o=!1,showCursor:s=!0,onChange:a,onSubmit:u,onExit:l,onHistoryUp:c,onHistoryDown:f,onExitMessage:A,onMessage:m,onHistoryReset:g,columns:E,onImagePaste:_,onPaste:C,isDimmed:S=!1,disableCursorMovementForUpDownKeys:T=!1,cursorOffset:x,onChangeCursorOffset:O}){let{onInput:q,renderedValue:$}=OAt({value:e,onChange:a,onSubmit:u,onExit:l,onExitMessage:A,onMessage:m,onHistoryReset:g,onHistoryUp:c,onHistoryDown:f,focus:r,mask:n,multiline:i,cursorChar:s?" ":"",highlightPastedText:o,invert:ue=>_r.bgHex("#ffffff").hex("#000000")(ue),themeText:ue=>_r.hex(_e().text)(ue),columns:E,onImagePaste:_,disableCursorMovementForUpDownKeys:T,externalOffset:x,onOffsetChange:O}),[H,L]=uSe.default.useState({chunks:[],timeoutId:null}),Y=ue=>(ue&&clearTimeout(ue),setTimeout(()=>{L(({chunks:Ae})=>{let ae=Ae.join("");return Promise.resolve().then(()=>C(ae)),{chunks:[],timeoutId:null}})},100));dr((ue,Ae)=>{if(C&&(ue.length>10||H.timeoutId)){L(({chunks:ae,timeoutId:ee})=>({chunks:[...ae,ue],timeoutId:Y(ee)}));return}q(ue,Ae)},{isActive:r});let fe=t?_r.hex(_e().secondaryText)(t):void 0,me=ue=>_r.bgHex("#ffffff").hex("#000000")(ue);s&&r&&(fe=t.length>0?me(t[0])+_r.hex(_e().secondaryText)(t.slice(1)):me(" "));let M=e.length==0&&t;return uSe.default.createElement(v,{wrap:"truncate-end",dimColor:S},M?fe:$)}var lSe=ie(Ce(),1),YU=ie(Ce(),1);AU();_d();xi();HT();kr();var kAt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function VT(){let e=[...kAt,...[...kAt].reverse()],[t,r]=(0,YU.useState)(0);return(0,YU.useEffect)(()=>{let n=setInterval(()=>{r(i=>(i+1)%e.length)},120);return()=>clearInterval(n)},[e.length]),lSe.createElement(N,{flexWrap:"nowrap",height:1,width:2},lSe.createElement(v,{color:_e().claude},e[t]))}xi();function lC(){return ze.getSessionContext().window_size?{...ze.getSessionContext().window_size}:{columns:process.stdout.columns||80,rows:process.stdout.rows||24}}Ue();import{homedir as t3}from"os";import{join as JR}from"path";import{existsSync as r3,mkdirSync as Sht,appendFileSync as Cht,readFileSync as Iht,constants as Vtn,writeFileSync as Wtn,unlinkSync as Tht,statSync as Ktn}from"fs";import{platform as vht}from"process";He();import{accessSync as Jtn}from"fs";He();var pyi=ie(BSe(),1);var jtn="1.37.2",e3={VERSION:jtn,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"};Ue();var KT=JR(DI,".update.lock"),Ztn=300*1e3;function Dht(){try{if(r3(DI)||Sht(DI,{recursive:!0}),r3(KT)){let e=Ktn(KT);if(Date.now()-e.mtimeMs<Ztn)return!1;try{Tht(KT)}catch(r){return we(`Failed to remove stale lock file: ${r}`),!1}}return Wtn(KT,`${process.pid}`,"utf8"),!0}catch(e){return we(`Failed to acquire lock: ${e}`),!1}}function xht(){try{r3(KT)&&Iht(KT,"utf8")===`${process.pid}`&&Tht(KT)}catch(e){we(`Failed to release lock: ${e}`)}}async function NSe(){try{let e=await Wn("npm -g config get prefix");if(e.code!==0)return we("Failed to check npm permissions"),{hasPermissions:!1,npmPrefix:null};let t=e.stdout.trim(),r=!1;try{Jtn(t,Vtn.W_OK),r=!0}catch{r=!1}return r?{hasPermissions:!0,npmPrefix:t}:(we("Insufficient permissions for global npm install."),{hasPermissions:!1,npmPrefix:t})}catch(e){return we(`Failed to verify npm global install permissions: ${e}`),{hasPermissions:!1,npmPrefix:null}}}async function wht(e){if(!Dht())throw dt("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:e3.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{r3(e)||Sht(e,{recursive:!0});let t=await Wn(`npm -g config set prefix ${e}`);if(t.code!==0)throw new Error(`Failed to set npm prefix: ${t.stderr}`);let r=`
1018
+ `))}}}return{onInput:ve,renderedValue:x.render(f,l,A),offset:S,setOffset:T}}function zU({value:e,placeholder:t="",focus:r=!0,mask:n,multiline:i=!1,highlightPastedText:o=!1,showCursor:s=!0,onChange:a,onSubmit:u,onExit:l,onHistoryUp:c,onHistoryDown:f,onExitMessage:A,onMessage:m,onHistoryReset:g,columns:E,onImagePaste:_,onPaste:C,isDimmed:S=!1,disableCursorMovementForUpDownKeys:T=!1,cursorOffset:x,onChangeCursorOffset:O}){let{onInput:q,renderedValue:$}=OAt({value:e,onChange:a,onSubmit:u,onExit:l,onExitMessage:A,onMessage:m,onHistoryReset:g,onHistoryUp:c,onHistoryDown:f,focus:r,mask:n,multiline:i,cursorChar:s?" ":"",highlightPastedText:o,invert:ue=>_r.bgHex("#ffffff").hex("#000000")(ue),themeText:ue=>_r.hex(_e().text)(ue),columns:E,onImagePaste:_,disableCursorMovementForUpDownKeys:T,externalOffset:x,onOffsetChange:O}),[H,L]=uSe.default.useState({chunks:[],timeoutId:null}),Y=ue=>(ue&&clearTimeout(ue),setTimeout(()=>{L(({chunks:Ae})=>{let ae=Ae.join("");return Promise.resolve().then(()=>C(ae)),{chunks:[],timeoutId:null}})},100));dr((ue,Ae)=>{if(C&&(ue.length>10||H.timeoutId)){L(({chunks:ae,timeoutId:ee})=>({chunks:[...ae,ue],timeoutId:Y(ee)}));return}q(ue,Ae)},{isActive:r});let fe=t?_r.hex(_e().secondaryText)(t):void 0,me=ue=>_r.bgHex("#ffffff").hex("#000000")(ue);s&&r&&(fe=t.length>0?me(t[0])+_r.hex(_e().secondaryText)(t.slice(1)):me(" "));let M=e.length==0&&t;return uSe.default.createElement(v,{wrap:"truncate-end",dimColor:S},M?fe:$)}var lSe=ie(Ce(),1),YU=ie(Ce(),1);AU();_d();xi();HT();kr();var kAt=process.platform==="darwin"?["\xB7","\u2722","\u2733","\u2217","\u273B","\u273D"]:["\xB7","\u2722","*","\u2217","\u273B","\u273D"];function VT(){let e=[...kAt,...[...kAt].reverse()],[t,r]=(0,YU.useState)(0);return(0,YU.useEffect)(()=>{let n=setInterval(()=>{r(i=>(i+1)%e.length)},120);return()=>clearInterval(n)},[e.length]),lSe.createElement(N,{flexWrap:"nowrap",height:1,width:2},lSe.createElement(v,{color:_e().claude},e[t]))}xi();function lC(){return ze.getSessionContext().window_size?{...ze.getSessionContext().window_size}:{columns:process.stdout.columns||80,rows:process.stdout.rows||24}}Ue();import{homedir as t3}from"os";import{join as JR}from"path";import{existsSync as r3,mkdirSync as Sht,appendFileSync as Cht,readFileSync as Iht,constants as Vtn,writeFileSync as Wtn,unlinkSync as Tht,statSync as Ktn}from"fs";import{platform as vht}from"process";He();import{accessSync as Jtn}from"fs";He();var pyi=ie(BSe(),1);var jtn="1.37.3",e3={VERSION:jtn,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"};Ue();var KT=JR(DI,".update.lock"),Ztn=300*1e3;function Dht(){try{if(r3(DI)||Sht(DI,{recursive:!0}),r3(KT)){let e=Ktn(KT);if(Date.now()-e.mtimeMs<Ztn)return!1;try{Tht(KT)}catch(r){return we(`Failed to remove stale lock file: ${r}`),!1}}return Wtn(KT,`${process.pid}`,"utf8"),!0}catch(e){return we(`Failed to acquire lock: ${e}`),!1}}function xht(){try{r3(KT)&&Iht(KT,"utf8")===`${process.pid}`&&Tht(KT)}catch(e){we(`Failed to release lock: ${e}`)}}async function NSe(){try{let e=await Wn("npm -g config get prefix");if(e.code!==0)return we("Failed to check npm permissions"),{hasPermissions:!1,npmPrefix:null};let t=e.stdout.trim(),r=!1;try{Jtn(t,Vtn.W_OK),r=!0}catch{r=!1}return r?{hasPermissions:!0,npmPrefix:t}:(we("Insufficient permissions for global npm install."),{hasPermissions:!1,npmPrefix:t})}catch(e){return we(`Failed to verify npm global install permissions: ${e}`),{hasPermissions:!1,npmPrefix:null}}}async function wht(e){if(!Dht())throw dt("tengu_auto_updater_prefix_lock_contention",{pid:String(process.pid),currentVersion:e3.VERSION,prefix:e}),new Error("Another process is currently setting up npm prefix");try{r3(e)||Sht(e,{recursive:!0});let t=await Wn(`npm -g config set prefix ${e}`);if(t.code!==0)throw new Error(`Failed to set npm prefix: ${t.stderr}`);let r=`
1019
1019
  # npm global path
1020
1020
  export PATH="${e}/bin:$PATH"
1021
1021
  `;if(vht==="win32"){let n=await Wn(`setx PATH "${process.env.PATH};${e}"`);if(n.code!==0)throw new Error(`Failed to update PATH on Windows: ${n.stderr}`)}else{let n=[JR(t3(),".bashrc"),JR(t3(),".bash_profile"),JR(t3(),".zshrc"),JR(t3(),".config","fish","config.fish")];for(let i of n)if(r3(i))try{if(!Iht(i,"utf8").includes(e)){if(i.includes("fish")){let s=`
@@ -1680,8 +1680,8 @@ Respond with a JSON object in this format:
1680
1680
  "additionalContext": "Your feedback about the failure for Claude to consider"
1681
1681
  }
1682
1682
  }`;Te("Executing PostToolUseFailure prompt hook");let i=await Rs([Gt([{type:"text",text:"Evaluate the tool execution failure."}])],[n],[],void 0,{model:wo(),dangerouslySkipPermissions:!1,prependCLISysprompt:!1,thinking:"off"}),o="";for(let s of i.message.content)s.type==="text"&&(o+=s.text);try{let s=o.match(/\{[\s\S]*\}/);return s?JSON.parse(s[0]):null}catch(s){return le("Failed to parse prompt hook response:",s),null}}catch(n){return le("Prompt hook execution error:",n),null}}replaceArguments(t,r){return t.replace(/\$ARGUMENTS/g,JSON.stringify(r))}};Br();He();Gp();var lRe=class{goals=new Map;key(t){return t||"default"}setGoal(t,r){let n=(t||"").trim();if(!n){this.clearGoal(r);return}this.goals.set(this.key(r),{condition:n,setAt:Date.now()})}getGoal(t){return this.goals.get(this.key(t))}hasGoal(t){return this.goals.has(this.key(t))}clearGoal(t){this.goals.delete(this.key(t))}},t1=new lRe;var cRe=class{async*tryStop(t,r,n,i,o){if(o.agentId)return null;if(!o.abortController.signal.aborted){let s=ze.getInQueryContext()[Ow];s||(s=0),ze.getInQueryContext()[Ow]=++s;let a;for(let E=t.length-1;E>=0;E--)if(t[E].type==="assistant"){a=t[E].message.content.filter(C=>C.type==="text").map(C=>C.text).join("");break}let l={session_id:ze.getSessionContext(o.agentId).getSessionId(),transcript_path:Ma(),cwd:Fe(),permission_mode:ti.getMode()||"default",hook_event_name:"Stop",stop_hook_active:ze.getInQueryContext()[Ow]>=2,last_assistant_message:a},f=await new vO(o.hookContext?.hooks).execute(l,t);if(f&&f.length>0){let E=[];for(let _ of f)E.push({type:"text",text:`Stop hook feedback:
1683
- ${_}`});yield vh(`Ran ${f.length} stop hooks`),yield Gt(E);return}let A=t1.getGoal();if(!A)return;let g=await new vO(xCn(A.condition)).execute(l,t);if(g&&g.length>0){yield dRe({met:!1,condition:A.condition,reason:g[0]});let E=[];for(let _ of g)E.push({type:"text",text:`Stop hook feedback:
1684
- ${_}`});yield Gt(E,void 0,{hideInUI:!0});return}yield dRe({met:!0,condition:A.condition}),t1.clearGoal()}return null}},DCn=new cRe;function xCn(e){return{Stop:[{hooks:[{type:"prompt",prompt:`Based on the conversation transcript above, has the following stopping condition been satisfied? Answer based on transcript evidence only.
1683
+ ${_}`});yield vh(`Ran ${f.length} stop hooks`),yield Gt(E);return}let A=t1.getGoal();if(!A)return;let g=await new vO(xCn(A.condition)).execute(l,t);if(g&&g.length>0){yield dRe({met:!1,condition:A.condition,reason:g[0],elapsedMs:Date.now()-A.setAt});let E=[];for(let _ of g)E.push({type:"text",text:`Stop hook feedback:
1684
+ ${_}`});yield Gt(E,void 0,{hideInUI:!0});return}yield dRe({met:!0,condition:A.condition,elapsedMs:Date.now()-A.setAt}),t1.clearGoal()}return null}},DCn=new cRe;function xCn(e){return{Stop:[{hooks:[{type:"prompt",prompt:`Based on the conversation transcript above, has the following stopping condition been satisfied? Answer based on transcript evidence only.
1685
1685
 
1686
1686
  Condition: ${e}
1687
1687
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dahawa/hawa-code",
3
- "version": "1.37.2",
3
+ "version": "1.37.3",
4
4
  "bin": {
5
5
  "hcode": "hawa.js"
6
6
  },