@dahawa/hawa-code 1.25.3 → 1.26.0

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 +340 -340
  2. package/hawa.js +1 -1
  3. package/package.json +1 -1
package/hawa.js CHANGED
@@ -46,7 +46,7 @@ ${c.join(`
46
46
  </env>`}),me={getIsDocker:ky,hasInternetAccess:Ly,getWorkingDirectory:Ry,getIsGitRepo:By,getGitRepoRoot:Ny,getCurrentBranch:Uy,getOSVersion:Gy,getCurrentDate:Vy,isCI:!!process.env.CI,platform:process.platform==="win32"?"windows":process.platform==="darwin"?"macos":"linux",nodeVersion:process.version,terminal:process.env.TERM_PROGRAM,gitBash:process.env[J0]&&process.env[J0].trim().length>0&&process.platform==="win32"};import{randomBytes as _W}from"crypto";function Ky(t){if(!t)return null;try{return JSON.parse(t)}catch(e){return _o(`Failed to parse JSON: ${t}`,e),null}}var vW=ce(n6(),1);var U0=ce(LD(),1);var uW={visibilityState:"visible",documentElement:{lang:"en"},addEventListener:(t,e)=>{}},cW={document:uW,location:{href:"node://localhost",pathname:"/"},addEventListener:(t,e)=>{t==="beforeunload"&&process.on("exit",()=>{typeof e=="function"?e({}):e.handleEvent({})})},focus:()=>{},innerHeight:768,innerWidth:1024},lW={sendBeacon:(t,e)=>!0,userAgent:"Mozilla/5.0 (Node.js) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0",language:"en-US"};typeof window>"u"&&(global.window=cW);typeof navigator>"u"&&(global.navigator=lW);import*as Qe from"fs";import*as qo from"path";import{homedir as fW}from"os";import{existsSync as dW,unlinkSync as pW}from"fs";var Qr=qo.join(fW(),et,"statsig");try{Qe.mkdirSync(Qr,{recursive:!0})}catch(t){ge(`Failed to create statsig storage directory: ${t}`)}var N0=class{cache=new Map;ready=!1;constructor(){try{Qe.existsSync(Qr)||Qe.mkdirSync(Qr,{recursive:!0});let e=Qe.readdirSync(Qr);for(let r of e){let n=decodeURIComponent(r),i=Qe.readFileSync(qo.join(Qr,r),"utf8");this.cache.set(n,i)}this.ready=!0}catch(e){ge(`Failed to initialize statsig storage: ${e}`),this.ready=!0}}isReady(){return this.ready}isReadyResolver(){return this.ready?Promise.resolve():null}getProviderName(){return"FileSystemStorageProvider"}getItem(e){return this.cache.get(e)??null}setItem(e,r){this.cache.set(e,r);try{let n=encodeURIComponent(e);Qe.writeFileSync(qo.join(Qr,n),r,"utf8")}catch(n){ge(`Failed to write statsig storage item: ${n}`)}}removeItem(e){this.cache.delete(e);let r=encodeURIComponent(e),n=qo.join(Qr,r);if(dW(n))try{pW(n)}catch(i){ge(`Failed to remove statsig storage item: ${i}`)}}getAllKeys(){return Array.from(this.cache.keys())}};var RD="client-RRNS7R65EAtReO5XA4xDC3eU6ZdJQi6lLEP6b5j32Me";var BD="tengu-token-efficient-tools",ND="token-efficient-tools-2024-12-11";var UD="claude-code-20250219";var xW=W(async()=>{let t=[UD];return(process.env.USER_TYPE==="ant"||process.env.SWE_BENCH)&&await Rx(BD)&&t.push(ND),t});var Bx=W(async()=>{let{code:t}=await pi("git",["rev-parse","--is-inside-work-tree"]);return t===0});var VD=!!process.env.CLAUDE_CODE_USE_BEDROCK,KD=!!process.env.CLAUDE_CODE_USE_VERTEX,GD={bedrock:"us.anthropic.claude-3-7-sonnet-20250219-v1:0",vertex:"claude-3-7-sonnet@20250219",firstParty:"claude-3-7-sonnet-20250219"},Que=process.env.ANTHROPIC_SMALL_FAST_MODEL?process.env.ANTHROPIC_SMALL_FAST_MODEL:VD?"us.anthropic.claude-3-5-haiku-20241022-v1:0":KD?"claude-3-5-haiku@20241022":"claude-3-5-haiku-20241022";async function mW(){try{return await WD("tengu-capable-model-config",GD)}catch(t){return ge(t),GD}}var hW=W(async()=>{if(process.env.ANTHROPIC_MODEL||process.env.USER_TYPE==="SWE_BENCH"&&process.env.ANTHROPIC_MODEL)return process.env.ANTHROPIC_MODEL;let t=await mW();return VD?t.bedrock:KD?t.vertex:t.firstParty});var $D={},ko=null,Nx=W(async()=>{if(me.isCI)return null;let t=await G0(),e={networkConfig:{api:"https://statsig.anthropic.com/v1/"},environment:{tier:me.isCI||["test","development"].includes("production")?"dev":"production"},logLevel:U0.LogLevel.None,storageProvider:new N0};return ko=new U0.StatsigClient(RD,t,e),ko.on("error",r=>{ge(`Statsig error: ${r}`)}),await ko.initializeAsync(),process.on("exit",()=>{ko?.flush()}),ko});var Rx=W(async t=>{if(me.isCI)return!1;let e=await Nx();if(!e)return!1;let r=e.checkGate(t);return $D[t]=r,r});function zD(){return{...$D}}var pce=W(async(t,e)=>{if(me.isCI)return e;let r=await Nx();if(!r)return e;let n=r.getExperiment(t);return Object.keys(n.value).length===0?(ge(`getExperimentValue got empty value for ${t}`),e):n.value}),WD=async(t,e)=>{if(me.isCI)return e;let r=await Nx();if(!r)return e;let n=r.getDynamicConfig(t);return Object.keys(n.value).length===0?(ge(`getDynamicConfig got empty value for ${t}`),e):n.value};var Lo=class extends Error{filePath;defaultConfig;constructor(e,r,n){super(e),this.name="ConfigParseError",this.filePath=r,this.defaultConfig=n}};var bW={allowedTools:[],context:{},history:[],dontCrawlDirectory:!1,enableArchitectTool:!1,mcpContextUris:[],mcpServers:{},approvedMcprcServers:[],rejectedMcprcServers:[],hasTrustDialogAccepted:!1};var V0={mcpServers:{},numStartups:0,autoUpdaterStatus:"disabled",theme:"dark",preferredNotifChannel:"iterm2",verbose:!1,customApiKeyResponses:{approved:[],rejected:[]}};var Fce={...V0,autoUpdaterStatus:"disabled"},Ice={...bW};function yW(t){DW(n0,{...t,projects:YD(n0,V0).projects},V0)}function Vx(){return YD(n0,V0)}function DW(t,e,r){let n=Object.fromEntries(Object.entries(e).filter(([i,o])=>JSON.stringify(o)!==JSON.stringify(r[i])||i=="mcpServers"));gW(t,JSON.stringify(n,null,2),"utf-8")}var SW=!1;function YD(t,e,r){if(!SW)throw new Error("Config accessed before allowed.");if(!Ux(t))return go(e);try{let n=Gx(t,"utf-8");try{let i=JSON.parse(n);return{...go(e),...i}}catch(i){let o=i instanceof Error?i.message:String(i);throw new Lo(o,t,e)}}catch(n){if(n instanceof Lo&&r)throw n;return go(e)}}var Pce=W(()=>{let t=HD(Wr(),".mcp.json");if(!Ux(t))return{};try{let e=Gx(t,"utf-8"),r=Ky(e);if(r&&typeof r=="object")return r=r.mcpServers,Object.keys(r).length.toString(),r}catch{}return{}},()=>{let t=Wr(),e=HD(t,".mcp.json");if(Ux(e))try{let r=Gx(e,"utf-8");return`${t}:${r}`}catch{return t}return t});function JD(){let t=Vx();if(t.userID)return t.userID;let e=_W(32).toString("hex");return yW({...t,userID:e}),e}var EW=W(async()=>{let t=await pi("git",["config","user.email"]);if(t.code!==0){ge(`Failed to get git email: ${t.stdout} ${t.stderr}`);return}return t.stdout.trim()||void 0}),G0=W(async()=>{let t=JD(),e=Vx(),r=process.env.USER_TYPE==="ant"?e.oauthAccount?.emailAddress??await EW()??(process.env.COO_CREATOR?`${process.env.COO_CREATOR}@anthropic.com`:void 0):void 0;return{customIDs:{sessionId:qi},userID:t,appVersion:MACRO.VERSION,userAgent:me.platform,email:r,custom:{nodeVersion:me.nodeVersion,userType:process.env.USER_TYPE,organizationUuid:e.oauthAccount?.organizationUuid,accountUuid:e.oauthAccount?.accountUuid}}});async function XD(t){try{let[e,r]=await Promise.all([Bx(),G0()]);Pc({nodeVersion:me.nodeVersion,platform:me.platform,cwd:Wr(),isCI:me.isCI,isGit:e,isTest:!1,packageVersion:MACRO.VERSION,sessionId:qi,statsigGates:zD(),terminal:me.terminal,userType:process.env.USER_TYPE}),Mc({id:r.userID,email:r.email}),Ic(t)}catch{}}import{randomUUID as CW}from"crypto";import{homedir as AW}from"os";import*as nS from"os";import{randomUUID as wW}from"crypto";var K0=class{datas={};setData(e,r){this.datas[e]=r}getData(e){return this.datas[e]}takeData(e){let r=this.datas[e];return delete this.datas[e],r}clear(){this.datas={}}},Ro=class extends K0{startTime;constructor(e=null){super(),this.startTime=e}},QD=wW(),Kx=class extends K0{PENDING_PROMPTS_KEY="pendingPrompts";addPendingPrompt(e){let r=this.getPendingPrompts();r.push(e),this.setData(this.PENDING_PROMPTS_KEY,r)}getPendingPrompts(){let e=this.getData(this.PENDING_PROMPTS_KEY);return Array.isArray(e)?e:[]}takePendingPrompts(){let e=this.getPendingPrompts();return this.setData(this.PENDING_PROMPTS_KEY,[]),e}async waitGetPendingPrompts(e){let n=Date.now(),i=e*1e3;for(;Date.now()-n<i;){let o=this.getPendingPrompts();if(o.length>0)return o;await new Promise(a=>setTimeout(a,200))}return[]}getSessionId(){return QD}switchSessionId(e){QD=e}},Wx=class t{static sessionContext={};static inQueryContextHolder={};static queryContext={};onQueryStart(e="defalt"){e||(e="defalt");let r=t.inQueryContextHolder[e+""];r&&r.startTime&&r.startTime>0||(t.inQueryContextHolder[e+""]=new Ro(Date.now()))}onQueryEnd(e="defalt",r=!1){e||(e="defalt"),t.inQueryContextHolder[e+""]=new Ro(-1),r||(t.queryContext[e+""]={})}getSessionContext(e="defalt"){e||(e="defalt");let r=t.sessionContext[e+""];return r||(r=new Kx,t.sessionContext[e+""]=r),r}getInQueryContext(e="defalt"){e||(e="defalt");let r=t.inQueryContextHolder[e+""];return r||(r=new Ro,t.inQueryContextHolder[e+""]=r),r}getQueryContext(e="defalt"){e||(e="defalt");let r=t.queryContext[e+""];return r||(r={},t.queryContext[e+""]=r),r}isQuerying(e="defalt"){return e||(e="defalt"),this.getInQueryContext(e).startTime>0}},ZD=new Wx;var $x=[],TW=100;var qi=CW(),qt=Te(AW(),et);function gr(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}function FW(){return ZD.getSessionContext().getSessionId()||W0}var Hx={temp:()=>Te(nS.tmpdir(),`${Uo}`),plan:()=>Te(qt,"plan"),memory:()=>Te(qt,"projects",gr(process.cwd()),"memory"),apis:()=>Te(qt,"projects",gr(process.cwd()),"apis"),errors:()=>Te(qt,"projects",gr(process.cwd()),"errors"),messages:()=>Te(qt,"projects",gr(process.cwd()),"messages"),mcpLogs:t=>Te(qt,"projects",gr(process.cwd()),`mcp-logs-${t}`),log:()=>Te(qt,"projects",gr(process.cwd()),"log"),vcrFixtures:()=>Te(qt,"projects",gr(process.cwd()),"vcr-fixtures"),sessionSummary:()=>Te(qt,"projects",gr(process.cwd()),"messages",FW(),"session-summary")};function IW(t){return t.toISOString().replace(/[:.]/g,"-")}var W0=IW(new Date);function PW(){return Te(Hx.errors(),W0+".txt")}function MW(){return Te(Hx.log(),W0+".log")}function jW(){return Te(Hx.log(),"error-"+W0+".log")}function iS(t,e,...r){let n=r.map(i=>i instanceof Error?`${i.name}: ${i.message}
47
47
  ${i.stack.replace(/^/gm," ")}`:i);qW(e,{level:t,message:n.length==1?n[0]:n})}function Bo(...t){iS("info",MW(),...t)}function _o(...t){iS("error",jW(),...t)}function ge(t){try{let e=t instanceof Error?t.stack||t.message:String(t),r={error:e,timestamp:new Date().toISOString()};$x.length>=TW&&$x.shift(),$x.push(r),kW(PW(),{error:e})}catch{}XD(t)}function qW(t,e){let r=tS(t);zx(r)||eS(r,{recursive:!0});let i=(typeof e=="string"?e:JSON.stringify(e))+`
48
48
  `;zx(t)?rS(t,i,"utf8"):OW(t,i,"utf8")}function kW(t,e){process.env.USER_TYPE;let r=tS(t);zx(r)||eS(r,{recursive:!0});let n={...e,cwd:process.cwd(),userType:process.env.USER_TYPE,sessionId:qi,timestamp:new Date().toISOString(),version:MACRO.VERSION},i=JSON.stringify(n)+`
49
- `;rS(t,i,"utf8")}var x0e=5*1024*1024,m0e=1024*1024,h0e=Buffer.from('"compact_boundary"');var H0={env:{},permissions:{allow:[],deny:[],ask:[]},enableAllProjectMcpServers:!1,enabledMcpjsonServers:[],autoCompactEnabled:!0,language:"auto",disableSuggestion:!1},Yx=class t{static test=!1;static testSettings;static setSettings(e){t.testSettings=e}static instance;static isTasksEnable(){return process.env.HAWA_CODE_ENABLE_TASKS=="true"||t.isAgentTeamEnable()}static isAgentTeamEnable(){return process.env.HAWA_CODE_EXPERIMENTAL_AGENT_TEAMS=="1"}constructor(){this.initializeConfigDirectories()}initializeConfigDirectories(){let e=this.getUserSettingsPath(),r=this.getProjectSettingsPath();this.ensureDirExists(e),$0(e)||z0(e,JSON.stringify(this.getDefaultSettingsStructure(),null,2),"utf-8"),this.ensureDirExists(r),$0(r)||z0(r,JSON.stringify(this.getDefaultSettingsStructure(),null,2),"utf-8")}getDefaultSettingsStructure(){return{env:{},permissions:{allow:[],deny:[],ask:[]}}}static getInstance(){return t.instance||(t.instance=new t),t.instance}addProjectAllowedTools(e){let r=this.loadSettingsFromFile(this.getProjectSettingsPath()),n=r.permissions||{allow:[],deny:[]};if(n.allow||(n.allow=[]),n.allow.includes(e))Bo(`\u5DE5\u5177 '${e}' \u5DF2\u5B58\u5728\u4E8E\u9879\u76EE\u5141\u8BB8\u5217\u8868\u4E2D\uFF0C\u65E0\u9700\u91CD\u590D\u6DFB\u52A0`);else{n.allow.push(e),n.allow.sort();let i={...r,permissions:{...n}};this.saveSettingsToFile(this.getProjectSettingsPath(),i,H0),Bo(`\u5DF2\u5C06\u5DE5\u5177 '${e}' \u6DFB\u52A0\u5230\u9879\u76EE\u5141\u8BB8\u5217\u8868`)}}getUserSettingsPath(){return aS(NW(),".hcode","settings.json")}getProjectSettingsPath(){let e=process.cwd();return aS(e,".hcode","settings.json")}ensureDirExists(e){let r=BW(e);$0(r)||RW(r,{recursive:!0})}loadSettingsFromFile(e){if(!$0(e))return{};let r="";try{return r=LW(e,"utf-8"),JSON.parse(r)}catch(n){return console.error(`Error reading settings file ${e} => ${r} `,n),{}}}saveSettingsToFile(e,r,n){let i={...r};for(let[o,a]of Object.entries(r))if(o in n)if(typeof a=="object"&&typeof n[o]=="object"){if(JSON.stringify(a)===JSON.stringify(n[o]))delete i[o];else if(o==="permissions"&&a&&typeof a=="object"){let s=n.permissions||{},u=a;Array.isArray(u.allow)&&Array.isArray(s.allow)&&JSON.stringify(u.allow)===JSON.stringify(s.allow)&&delete u.allow,Array.isArray(u.deny)&&Array.isArray(s.deny)&&JSON.stringify(u.deny)===JSON.stringify(s.deny)&&delete u.deny,Object.keys(u).length===0&&delete i[o]}}else a===n[o]&&delete i[o];this.ensureDirExists(e),Object.keys(i).length===0?z0(e,"{}","utf-8"):z0(e,JSON.stringify(i,null,2),"utf-8")}mergeStringArrays(e,r){if(!e&&!r)return;let n=[...e||[]];return(r||[]).forEach(i=>{n.includes(i)||n.push(i)}),n}loadSettings(){let e=this.loadSettingsFromFile(this.getUserSettingsPath()),r=this.loadSettingsFromFile(this.getProjectSettingsPath()),n={...e.env,...r.env},i={...e.permissions};if(e.permissions?.allow&&r.permissions?.allow){let u=[...e.permissions.allow];r.permissions.allow.forEach(c=>{u.includes(c)||u.push(c)}),i.allow=u}else r.permissions?.allow&&(i.allow=[...r.permissions.allow]);if(e.permissions?.deny&&r.permissions?.deny){let u=[...e.permissions.deny];r.permissions.deny.forEach(c=>{u.includes(c)||u.push(c)}),i.deny=u}else r.permissions?.deny&&(i.deny=[...r.permissions.deny]);if(e.permissions?.ask&&r.permissions?.ask){let u=[...e.permissions.ask];r.permissions.ask.forEach(c=>{u.includes(c)||u.push(c)}),i.ask=u}else r.permissions?.ask&&(i.ask=[...r.permissions.ask]);let o={...H0,...e,...r};n&&Object.keys(n).length>0&&(o.env=n),i&&(i.allow||i.deny||i.ask)&&(o.permissions=i);let a=e.sandbox,s=r.sandbox;if(a||s){let u={...a,...s},c=a?.filesystem,l=s?.filesystem;(c||l)&&(u.filesystem={...c,...l,allowWrite:this.mergeStringArrays(c?.allowWrite,l?.allowWrite),denyWrite:this.mergeStringArrays(c?.denyWrite,l?.denyWrite),denyRead:this.mergeStringArrays(c?.denyRead,l?.denyRead),allowRead:this.mergeStringArrays(c?.allowRead,l?.allowRead)});let p=a?.network,x=s?.network;(p||x)&&(u.network={...p,...x,allowedDomains:this.mergeStringArrays(p?.allowedDomains,x?.allowedDomains),deniedDomains:this.mergeStringArrays(p?.deniedDomains,x?.deniedDomains),allowUnixSockets:this.mergeStringArrays(p?.allowUnixSockets,x?.allowUnixSockets)});let m=a?.ignoreViolations,v=s?.ignoreViolations;if(m||v){let g={};if(m)for(let[h,_]of Object.entries(m))g[h]=[..._];if(v)for(let[h,_]of Object.entries(v))g[h]?g[h]=this.mergeStringArrays(g[h],_)??[]:g[h]=[..._];u.ignoreViolations=g}o.sandbox=u}return o}saveUserSettings(e){let r=this.getUserSettingsPath();this.saveSettingsToFile(r,e,H0)}saveProjectSettings(e){let r=this.getProjectSettingsPath();this.saveSettingsToFile(r,e,H0)}getSetting(e){return this.loadSettings()[e]}updateSetting(e,r){let i={...this.loadSettings(),[e]:r};this.saveProjectSettings(i)}resetSetting(e){let n={...this.loadSettings()};delete n[e],this.saveProjectSettings(n)}getAllSettings(){return this.loadSettings()}},No=Yx.getInstance(),sS=No.getAllSettings();function Jx(){let t=No.getUserSettingsPath(),e=No.getProjectSettingsPath();oS(t,(r,n)=>{r==="change"&&(sS=null,Bo("\u7528\u6237\u7EA7\u914D\u7F6E\u5DF2\u70ED\u52A0\u8F7D"))}).on("error",r=>{_o("\u7528\u6237\u7EA7\u914D\u7F6E\u76D1\u63A7\u51FA\u9519:",r),setTimeout(()=>Jx(),100)}),oS(e,(r,n)=>{r==="change"&&(sS=null,Bo("\u9879\u76EE\u7EA7\u914D\u7F6E\u5DF2\u70ED\u52A0\u8F7D",n))}).on("error",r=>{_o("\u9879\u76EE\u7EA7\u914D\u7F6E\u76D1\u63A7\u51FA\u9519:",r),setTimeout(()=>Jx(),100)})}Jx();function UW(){em();let t=tm(),e=[];Object.entries(t).forEach(([r,n],i)=>{n.enable===!0&&e.push({name:`${i}. ${r}`,value:r})}),e.length===0&&(console.error(`\u8BF7\u68C0\u67E5\u914D\u7F6E\u6587\u4EF6 ~/${et}/config.json\uFF0C\u786E\u4FDD\u81F3\u5C11\u6709\u4E00\u4E2A\u6A21\u578B\u7684 enable \u8BBE\u7F6E\u4E3A true\u3002`),process.exit(1)),(async()=>{let r=await k2.prompt([{type:"list",name:"choice",message:"\u8BF7\u9009\u62E9\u4E00\u4E2A\u6A21\u578B\uFF1A",choices:e}]);var n=t[r.choice];let i=n.env,o={};Object.keys(i).forEach(p=>{["BASE_URL","AUTH_TOKEN","MODEL","SMALL_FAST_MODEL"].includes(p)?o[`ANTHROPIC_${p}`]=i[p]:o[p]=i[p]});let a=No.getSetting("env")||{};process.platform==="win32"&&!process.env.HCODE_GIT_BASH_PATH&&!o.HCODE_GIT_BASH_PATH&&!a.HCODE_GIT_BASH_PATH&&(console.error("\u5728 Windows \u7CFB\u7EDF\u4E0A\u8FD0\u884C\uFF0C\u8BF7\u786E\u4FDD\u914D\u7F6E\u73AF\u5883\u53D8\u91CF HCODE_GIT_BASH_PATH\uFF0C\u53C2\u8003\u6587\u6863\uFF1Ahttps://www.hawacode.com/docs"),process.exit(1));let s=cS(import.meta.url),u=Y0.dirname(s),c=Y0.join(u,"cli.js"),l=uS(process.execPath,["--no-deprecation",c,...process.argv.slice(2)],{env:{...process.env,...o,...a},stdio:"inherit",cwd:process.cwd()});l.on("error",p=>{console.error("Failed to start command:",p.message),process.exit(1)}),l.on("close",p=>{process.exit(p||0)})})()}async function GW(){let t=cS(import.meta.url),e=Y0.dirname(t),r=Y0.join(e,"cli.js"),n=uS(process.execPath,["--no-deprecation",r,...process.argv.slice(2)],{env:process.env,stdio:"inherit",cwd:process.cwd()});n.on("error",i=>{console.error("Failed to start command:",i.message),process.exit(1)}),n.on("close",i=>{process.exit(i||0)})}async function VW(){process.argv.length<=2?UW():await GW()}await VW();
49
+ `;rS(t,i,"utf8")}var x0e=5*1024*1024,m0e=1024*1024,h0e=Buffer.from('"compact_boundary"');var H0={env:{},permissions:{allow:[],deny:[],ask:[]},enableAllProjectMcpServers:!1,enabledMcpjsonServers:[],autoCompactEnabled:!0,language:"auto",disableSuggestion:!1,autoMemory:{enabled:!1,minTokens:3e3,minTurns:3},autoDream:{enabled:!1,minHours:24,minSessions:5}},Yx=class t{static test=!1;static testSettings;static setSettings(e){t.testSettings=e}static instance;static isTasksEnable(){return process.env.HAWA_CODE_ENABLE_TASKS=="true"||t.isAgentTeamEnable()}static isAgentTeamEnable(){return process.env.HAWA_CODE_EXPERIMENTAL_AGENT_TEAMS=="1"}constructor(){this.initializeConfigDirectories()}initializeConfigDirectories(){let e=this.getUserSettingsPath(),r=this.getProjectSettingsPath();this.ensureDirExists(e),$0(e)||z0(e,JSON.stringify(this.getDefaultSettingsStructure(),null,2),"utf-8"),this.ensureDirExists(r),$0(r)||z0(r,JSON.stringify(this.getDefaultSettingsStructure(),null,2),"utf-8")}getDefaultSettingsStructure(){return{env:{},permissions:{allow:[],deny:[],ask:[]}}}static getInstance(){return t.instance||(t.instance=new t),t.instance}addProjectAllowedTools(e){let r=this.loadSettingsFromFile(this.getProjectSettingsPath()),n=r.permissions||{allow:[],deny:[]};if(n.allow||(n.allow=[]),n.allow.includes(e))Bo(`\u5DE5\u5177 '${e}' \u5DF2\u5B58\u5728\u4E8E\u9879\u76EE\u5141\u8BB8\u5217\u8868\u4E2D\uFF0C\u65E0\u9700\u91CD\u590D\u6DFB\u52A0`);else{n.allow.push(e),n.allow.sort();let i={...r,permissions:{...n}};this.saveSettingsToFile(this.getProjectSettingsPath(),i,H0),Bo(`\u5DF2\u5C06\u5DE5\u5177 '${e}' \u6DFB\u52A0\u5230\u9879\u76EE\u5141\u8BB8\u5217\u8868`)}}getUserSettingsPath(){return aS(NW(),".hcode","settings.json")}getProjectSettingsPath(){let e=process.cwd();return aS(e,".hcode","settings.json")}ensureDirExists(e){let r=BW(e);$0(r)||RW(r,{recursive:!0})}loadSettingsFromFile(e){if(!$0(e))return{};let r="";try{return r=LW(e,"utf-8"),JSON.parse(r)}catch(n){return console.error(`Error reading settings file ${e} => ${r} `,n),{}}}saveSettingsToFile(e,r,n){let i={...r};for(let[o,a]of Object.entries(r))if(o in n)if(typeof a=="object"&&typeof n[o]=="object"){if(JSON.stringify(a)===JSON.stringify(n[o]))delete i[o];else if(o==="permissions"&&a&&typeof a=="object"){let s=n.permissions||{},u=a;Array.isArray(u.allow)&&Array.isArray(s.allow)&&JSON.stringify(u.allow)===JSON.stringify(s.allow)&&delete u.allow,Array.isArray(u.deny)&&Array.isArray(s.deny)&&JSON.stringify(u.deny)===JSON.stringify(s.deny)&&delete u.deny,Object.keys(u).length===0&&delete i[o]}}else a===n[o]&&delete i[o];this.ensureDirExists(e),Object.keys(i).length===0?z0(e,"{}","utf-8"):z0(e,JSON.stringify(i,null,2),"utf-8")}mergeStringArrays(e,r){if(!e&&!r)return;let n=[...e||[]];return(r||[]).forEach(i=>{n.includes(i)||n.push(i)}),n}loadSettings(){let e=this.loadSettingsFromFile(this.getUserSettingsPath()),r=this.loadSettingsFromFile(this.getProjectSettingsPath()),n={...e.env,...r.env},i={...e.permissions};if(e.permissions?.allow&&r.permissions?.allow){let u=[...e.permissions.allow];r.permissions.allow.forEach(c=>{u.includes(c)||u.push(c)}),i.allow=u}else r.permissions?.allow&&(i.allow=[...r.permissions.allow]);if(e.permissions?.deny&&r.permissions?.deny){let u=[...e.permissions.deny];r.permissions.deny.forEach(c=>{u.includes(c)||u.push(c)}),i.deny=u}else r.permissions?.deny&&(i.deny=[...r.permissions.deny]);if(e.permissions?.ask&&r.permissions?.ask){let u=[...e.permissions.ask];r.permissions.ask.forEach(c=>{u.includes(c)||u.push(c)}),i.ask=u}else r.permissions?.ask&&(i.ask=[...r.permissions.ask]);let o={...H0,...e,...r};n&&Object.keys(n).length>0&&(o.env=n),i&&(i.allow||i.deny||i.ask)&&(o.permissions=i);let a=e.sandbox,s=r.sandbox;if(a||s){let u={...a,...s},c=a?.filesystem,l=s?.filesystem;(c||l)&&(u.filesystem={...c,...l,allowWrite:this.mergeStringArrays(c?.allowWrite,l?.allowWrite),denyWrite:this.mergeStringArrays(c?.denyWrite,l?.denyWrite),denyRead:this.mergeStringArrays(c?.denyRead,l?.denyRead),allowRead:this.mergeStringArrays(c?.allowRead,l?.allowRead)});let p=a?.network,x=s?.network;(p||x)&&(u.network={...p,...x,allowedDomains:this.mergeStringArrays(p?.allowedDomains,x?.allowedDomains),deniedDomains:this.mergeStringArrays(p?.deniedDomains,x?.deniedDomains),allowUnixSockets:this.mergeStringArrays(p?.allowUnixSockets,x?.allowUnixSockets)});let m=a?.ignoreViolations,v=s?.ignoreViolations;if(m||v){let g={};if(m)for(let[h,_]of Object.entries(m))g[h]=[..._];if(v)for(let[h,_]of Object.entries(v))g[h]?g[h]=this.mergeStringArrays(g[h],_)??[]:g[h]=[..._];u.ignoreViolations=g}o.sandbox=u}return o}saveUserSettings(e){let r=this.getUserSettingsPath();this.saveSettingsToFile(r,e,H0)}saveProjectSettings(e){let r=this.getProjectSettingsPath();this.saveSettingsToFile(r,e,H0)}getSetting(e){return this.loadSettings()[e]}updateSetting(e,r){let i={...this.loadSettings(),[e]:r};this.saveProjectSettings(i)}resetSetting(e){let n={...this.loadSettings()};delete n[e],this.saveProjectSettings(n)}getAllSettings(){return this.loadSettings()}},No=Yx.getInstance(),sS=No.getAllSettings();function Jx(){let t=No.getUserSettingsPath(),e=No.getProjectSettingsPath();oS(t,(r,n)=>{r==="change"&&(sS=null,Bo("\u7528\u6237\u7EA7\u914D\u7F6E\u5DF2\u70ED\u52A0\u8F7D"))}).on("error",r=>{_o("\u7528\u6237\u7EA7\u914D\u7F6E\u76D1\u63A7\u51FA\u9519:",r),setTimeout(()=>Jx(),100)}),oS(e,(r,n)=>{r==="change"&&(sS=null,Bo("\u9879\u76EE\u7EA7\u914D\u7F6E\u5DF2\u70ED\u52A0\u8F7D",n))}).on("error",r=>{_o("\u9879\u76EE\u7EA7\u914D\u7F6E\u76D1\u63A7\u51FA\u9519:",r),setTimeout(()=>Jx(),100)})}Jx();function UW(){em();let t=tm(),e=[];Object.entries(t).forEach(([r,n],i)=>{n.enable===!0&&e.push({name:`${i}. ${r}`,value:r})}),e.length===0&&(console.error(`\u8BF7\u68C0\u67E5\u914D\u7F6E\u6587\u4EF6 ~/${et}/config.json\uFF0C\u786E\u4FDD\u81F3\u5C11\u6709\u4E00\u4E2A\u6A21\u578B\u7684 enable \u8BBE\u7F6E\u4E3A true\u3002`),process.exit(1)),(async()=>{let r=await k2.prompt([{type:"list",name:"choice",message:"\u8BF7\u9009\u62E9\u4E00\u4E2A\u6A21\u578B\uFF1A",choices:e}]);var n=t[r.choice];let i=n.env,o={};Object.keys(i).forEach(p=>{["BASE_URL","AUTH_TOKEN","MODEL","SMALL_FAST_MODEL"].includes(p)?o[`ANTHROPIC_${p}`]=i[p]:o[p]=i[p]});let a=No.getSetting("env")||{};process.platform==="win32"&&!process.env.HCODE_GIT_BASH_PATH&&!o.HCODE_GIT_BASH_PATH&&!a.HCODE_GIT_BASH_PATH&&(console.error("\u5728 Windows \u7CFB\u7EDF\u4E0A\u8FD0\u884C\uFF0C\u8BF7\u786E\u4FDD\u914D\u7F6E\u73AF\u5883\u53D8\u91CF HCODE_GIT_BASH_PATH\uFF0C\u53C2\u8003\u6587\u6863\uFF1Ahttps://www.hawacode.com/docs"),process.exit(1));let s=cS(import.meta.url),u=Y0.dirname(s),c=Y0.join(u,"cli.js"),l=uS(process.execPath,["--no-deprecation",c,...process.argv.slice(2)],{env:{...process.env,...o,...a},stdio:"inherit",cwd:process.cwd()});l.on("error",p=>{console.error("Failed to start command:",p.message),process.exit(1)}),l.on("close",p=>{process.exit(p||0)})})()}async function GW(){let t=cS(import.meta.url),e=Y0.dirname(t),r=Y0.join(e,"cli.js"),n=uS(process.execPath,["--no-deprecation",r,...process.argv.slice(2)],{env:process.env,stdio:"inherit",cwd:process.cwd()});n.on("error",i=>{console.error("Failed to start command:",i.message),process.exit(1)}),n.on("close",i=>{process.exit(i||0)})}async function VW(){process.argv.length<=2?UW():await GW()}await VW();
50
50
  /*! Bundled license information:
51
51
 
52
52
  react/cjs/react.production.js:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dahawa/hawa-code",
3
- "version": "1.25.3",
3
+ "version": "1.26.0",
4
4
  "bin": {
5
5
  "hcode": "hawa.js"
6
6
  },