@dahawa/hawa-code 1.21.0 → 1.22.1

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 +567 -566
  2. package/hawa.js +1 -1
  3. package/package.json +1 -1
package/hawa.js CHANGED
@@ -84,7 +84,7 @@ Host: ${i}:${a}\r
84
84
  `).filter(o=>o.trim()),n=r.find(o=>o.startsWith("Caption="))?.split("=")[1]?.trim(),i=r.find(o=>o.startsWith("Version="))?.split("=")[1]?.trim();return n&&i?`${n} ${i}`:"Windows"}else return t==="darwin"?`macOS ${ma("sw_vers",["-productVersion"],{encoding:"utf8"}).trim()}`:ma("lsb_release",["-d","-s"],{encoding:"utf8"}).trim()||"Linux"}catch{return t==="win32"?"Windows":t==="darwin"?"macOS":"Linux"}}),ZE=ae(()=>new Date().toISOString().split("T")[0]),Ebe=ae(async()=>{let[t,e,r,n,i,o,a,s,u]=await Promise.all([zE(),HE(),KE(),YE(),JE(),ZE(),GE(),VE(),qe.isCI]),c=[`Working directory: ${t}`,`Is directory a git repo: ${e?"Yes":"No"}`,`Platform: ${process.platform}`,`OS Version: ${i}`,`Today's date: ${o}`,`Node version: ${qe.nodeVersion}`,`Terminal: ${qe.terminal||"Unknown"}`,`Is Docker: ${a?"Yes":"No"}`,`Has internet access: ${s?"Yes":"No"}`,`Is CI: ${u?"Yes":"No"}`];return e&&r&&c.push(`Git repo root: ${r}`),e&&n&&c.push(`Current branch: ${n}`),`<env>
85
85
  ${c.join(`
86
86
  `)}
87
- </env>`}),qe={getIsDocker:GE,hasInternetAccess:VE,getWorkingDirectory:zE,getIsGitRepo:HE,getGitRepoRoot:KE,getCurrentBranch:YE,getOSVersion:JE,getCurrentDate:ZE,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[B0]&&process.env[B0].trim().length>0&&process.platform==="win32"};import{randomBytes as nre}from"crypto";function XE(t){if(!t)return null;try{return JSON.parse(t)}catch(e){return Dn(`Failed to parse JSON: ${t}`,e),null}}var tre=_e(fO(),1);var k0=_e(VC(),1);var zte={visibilityState:"visible",documentElement:{lang:"en"},addEventListener:(t,e)=>{}},Hte={document:zte,location:{href:"node://localhost",pathname:"/"},addEventListener:(t,e)=>{t==="beforeunload"&&process.on("exit",()=>{typeof e=="function"?e({}):e.handleEvent({})})},focus:()=>{},innerHeight:768,innerWidth:1024},Kte={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=Hte);typeof navigator>"u"&&(global.navigator=Kte);import*as Nt from"fs";import*as Vs from"path";import{homedir as Yte}from"os";import{existsSync as Jte,unlinkSync as Zte}from"fs";var Ri=Vs.join(Yte(),Bt,"statsig");try{Nt.mkdirSync(Ri,{recursive:!0})}catch(t){be(`Failed to create statsig storage directory: ${t}`)}var P0=class{cache=new Map;ready=!1;constructor(){try{Nt.existsSync(Ri)||Nt.mkdirSync(Ri,{recursive:!0});let e=Nt.readdirSync(Ri);for(let r of e){let n=decodeURIComponent(r),i=Nt.readFileSync(Vs.join(Ri,r),"utf8");this.cache.set(n,i)}this.ready=!0}catch(e){be(`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);Nt.writeFileSync(Vs.join(Ri,n),r,"utf8")}catch(n){be(`Failed to write statsig storage item: ${n}`)}}removeItem(e){this.cache.delete(e);let r=encodeURIComponent(e),n=Vs.join(Ri,r);if(Jte(n))try{Zte(n)}catch(i){be(`Failed to remove statsig storage item: ${i}`)}}getAllKeys(){return Array.from(this.cache.keys())}};var zC="client-RRNS7R65EAtReO5XA4xDC3eU6ZdJQi6lLEP6b5j32Me";var HC="tengu-token-efficient-tools",KC="token-efficient-tools-2024-12-11";var YC="claude-code-20250219";var Xte=ae(async()=>{let t=[YC];return(process.env.USER_TYPE==="ant"||process.env.SWE_BENCH)&&await _b(HC)&&t.push(KC),t});var yb=ae(async()=>{let{code:t}=await li("git",["rev-parse","--is-inside-work-tree"]);return t===0});var ZC=!!process.env.CLAUDE_CODE_USE_BEDROCK,XC=!!process.env.CLAUDE_CODE_USE_VERTEX,JC={bedrock:"us.anthropic.claude-3-7-sonnet-20250219-v1:0",vertex:"claude-3-7-sonnet@20250219",firstParty:"claude-3-7-sonnet-20250219"},Y_e=process.env.ANTHROPIC_SMALL_FAST_MODEL?process.env.ANTHROPIC_SMALL_FAST_MODEL:ZC?"us.anthropic.claude-3-5-haiku-20241022-v1:0":XC?"claude-3-5-haiku@20241022":"claude-3-5-haiku-20241022";async function Qte(){try{return await QC("tengu-capable-model-config",JC)}catch(t){return be(t),JC}}var ere=ae(async()=>{if(process.env.ANTHROPIC_MODEL||process.env.USER_TYPE==="SWE_BENCH"&&process.env.ANTHROPIC_MODEL)return process.env.ANTHROPIC_MODEL;let t=await Qte();return ZC?t.bedrock:XC?t.vertex:t.firstParty});var e8={},zs=null,Sb=ae(async()=>{if(qe.isCI)return null;let t=await F0(),e={networkConfig:{api:"https://statsig.anthropic.com/v1/"},environment:{tier:qe.isCI||["test","development"].includes("production")?"dev":"production"},logLevel:k0.LogLevel.None,storageProvider:new P0};return zs=new k0.StatsigClient(zC,t,e),zs.on("error",r=>{be(`Statsig error: ${r}`)}),await zs.initializeAsync(),process.on("exit",()=>{zs?.flush()}),zs});var _b=ae(async t=>{if(qe.isCI)return!1;let e=await Sb();if(!e)return!1;let r=e.checkGate(t);return e8[t]=r,r});function t8(){return{...e8}}var lye=ae(async(t,e)=>{if(qe.isCI)return e;let r=await Sb();if(!r)return e;let n=r.getExperiment(t);return Object.keys(n.value).length===0?(be(`getExperimentValue got empty value for ${t}`),e):n.value}),QC=async(t,e)=>{if(qe.isCI)return e;let r=await Sb();if(!r)return e;let n=r.getDynamicConfig(t);return Object.keys(n.value).length===0?(be(`getDynamicConfig got empty value for ${t}`),e):n.value};var Hs=class extends Error{filePath;defaultConfig;constructor(e,r,n){super(e),this.name="ConfigParseError",this.filePath=r,this.defaultConfig=n}};var ire={allowedTools:[],context:{},history:[],dontCrawlDirectory:!1,enableArchitectTool:!1,mcpContextUris:[],mcpServers:{},approvedMcprcServers:[],rejectedMcprcServers:[],hasTrustDialogAccepted:!1};var I0={mcpServers:{},numStartups:0,autoUpdaterStatus:"disabled",theme:"dark",preferredNotifChannel:"iterm2",verbose:!1,customApiKeyResponses:{approved:[],rejected:[]}};var Cye={...I0,autoUpdaterStatus:"disabled"},Tye={...ire};function ore(t){are(Hd,{...t,projects:n8(Hd,I0).projects},I0)}function Eb(){return n8(Hd,I0)}function are(t,e,r){let n=Object.fromEntries(Object.entries(e).filter(([i,o])=>JSON.stringify(o)!==JSON.stringify(r[i])||i=="mcpServers"));rre(t,JSON.stringify(n,null,2),"utf-8")}var sre=!1;function n8(t,e,r){if(!sre)throw new Error("Config accessed before allowed.");if(!Db(t))return ri(e);try{let n=wb(t,"utf-8");try{let i=JSON.parse(n);return{...ri(e),...i}}catch(i){let o=i instanceof Error?i.message:String(i);throw new Hs(o,t,e)}}catch(n){if(n instanceof Hs&&r)throw n;return ri(e)}}var Aye=ae(()=>{let t=r8(Ai(),".mcp.json");if(!Db(t))return{};try{let e=wb(t,"utf-8"),r=XE(e);if(r&&typeof r=="object")return r=r.mcpServers,Object.keys(r).length.toString(),r}catch{}return{}},()=>{let t=Ai(),e=r8(t,".mcp.json");if(Db(e))try{let r=wb(e,"utf-8");return`${t}:${r}`}catch{return t}return t});function i8(){let t=Eb();if(t.userID)return t.userID;let e=nre(32).toString("hex");return ore({...t,userID:e}),e}var ure=ae(async()=>{let t=await li("git",["config","user.email"]);if(t.code!==0){be(`Failed to get git email: ${t.stdout} ${t.stderr}`);return}return t.stdout.trim()||void 0}),F0=ae(async()=>{let t=i8(),e=Eb(),r=process.env.USER_TYPE==="ant"?e.oauthAccount?.emailAddress??await ure()??(process.env.COO_CREATOR?`${process.env.COO_CREATOR}@anthropic.com`:void 0):void 0;return{customIDs:{sessionId:Ra},userID:t,appVersion:MACRO.VERSION,userAgent:qe.platform,email:r,custom:{nodeVersion:qe.nodeVersion,userType:process.env.USER_TYPE,organizationUuid:e.oauthAccount?.organizationUuid,accountUuid:e.oauthAccount?.accountUuid}}});async function o8(t){try{let[e,r]=await Promise.all([yb(),F0()]);ed({nodeVersion:qe.nodeVersion,platform:qe.platform,cwd:Ai(),isCI:qe.isCI,isGit:e,isTest:!1,packageVersion:MACRO.VERSION,sessionId:Ra,statsigGates:t8(),terminal:qe.terminal,userType:process.env.USER_TYPE}),td({id:r.userID,email:r.email}),Qf(t)}catch{}}import{randomUUID as lre}from"crypto";import{homedir as fre}from"os";import*as c8 from"os";var Ob=[],dre=100,Ra=lre(),An=st(fre(),Bt);function qi(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}var Tb={temp:()=>st(c8.tmpdir(),`${Mr}`),plan:()=>st(An,"plan"),memory:()=>st(An,"project",qi(process.cwd()),"memory"),apis:()=>st(An,"project",qi(process.cwd()),"apis"),errors:()=>st(An,"project",qi(process.cwd()),"errors"),messages:()=>st(An,"project",qi(process.cwd()),"messages"),mcpLogs:t=>st(An,"project",qi(process.cwd()),`mcp-logs-${t}`),log:()=>st(An,"project",qi(process.cwd()),"log"),vcrFixtures:()=>st(An,"project",qi(process.cwd()),"vcr-fixtures")};function pre(t){return t.toISOString().replace(/[:.]/g,"-")}var Ab=pre(new Date);function hre(){return st(Tb.errors(),Ab+".txt")}function mre(){return st(Tb.log(),Ab+".log")}function xre(){return st(Tb.log(),"error-"+Ab+".log")}function l8(t,e,...r){let n=r.map(i=>i instanceof Error?`${i.name}: ${i.message}
87
+ </env>`}),qe={getIsDocker:GE,hasInternetAccess:VE,getWorkingDirectory:zE,getIsGitRepo:HE,getGitRepoRoot:KE,getCurrentBranch:YE,getOSVersion:JE,getCurrentDate:ZE,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[B0]&&process.env[B0].trim().length>0&&process.platform==="win32"};import{randomBytes as nre}from"crypto";function XE(t){if(!t)return null;try{return JSON.parse(t)}catch(e){return Dn(`Failed to parse JSON: ${t}`,e),null}}var tre=_e(fO(),1);var k0=_e(VC(),1);var zte={visibilityState:"visible",documentElement:{lang:"en"},addEventListener:(t,e)=>{}},Hte={document:zte,location:{href:"node://localhost",pathname:"/"},addEventListener:(t,e)=>{t==="beforeunload"&&process.on("exit",()=>{typeof e=="function"?e({}):e.handleEvent({})})},focus:()=>{},innerHeight:768,innerWidth:1024},Kte={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=Hte);typeof navigator>"u"&&(global.navigator=Kte);import*as Nt from"fs";import*as Vs from"path";import{homedir as Yte}from"os";import{existsSync as Jte,unlinkSync as Zte}from"fs";var Ri=Vs.join(Yte(),Bt,"statsig");try{Nt.mkdirSync(Ri,{recursive:!0})}catch(t){be(`Failed to create statsig storage directory: ${t}`)}var P0=class{cache=new Map;ready=!1;constructor(){try{Nt.existsSync(Ri)||Nt.mkdirSync(Ri,{recursive:!0});let e=Nt.readdirSync(Ri);for(let r of e){let n=decodeURIComponent(r),i=Nt.readFileSync(Vs.join(Ri,r),"utf8");this.cache.set(n,i)}this.ready=!0}catch(e){be(`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);Nt.writeFileSync(Vs.join(Ri,n),r,"utf8")}catch(n){be(`Failed to write statsig storage item: ${n}`)}}removeItem(e){this.cache.delete(e);let r=encodeURIComponent(e),n=Vs.join(Ri,r);if(Jte(n))try{Zte(n)}catch(i){be(`Failed to remove statsig storage item: ${i}`)}}getAllKeys(){return Array.from(this.cache.keys())}};var zC="client-RRNS7R65EAtReO5XA4xDC3eU6ZdJQi6lLEP6b5j32Me";var HC="tengu-token-efficient-tools",KC="token-efficient-tools-2024-12-11";var YC="claude-code-20250219";var Xte=ae(async()=>{let t=[YC];return(process.env.USER_TYPE==="ant"||process.env.SWE_BENCH)&&await _b(HC)&&t.push(KC),t});var yb=ae(async()=>{let{code:t}=await li("git",["rev-parse","--is-inside-work-tree"]);return t===0});var ZC=!!process.env.CLAUDE_CODE_USE_BEDROCK,XC=!!process.env.CLAUDE_CODE_USE_VERTEX,JC={bedrock:"us.anthropic.claude-3-7-sonnet-20250219-v1:0",vertex:"claude-3-7-sonnet@20250219",firstParty:"claude-3-7-sonnet-20250219"},Y_e=process.env.ANTHROPIC_SMALL_FAST_MODEL?process.env.ANTHROPIC_SMALL_FAST_MODEL:ZC?"us.anthropic.claude-3-5-haiku-20241022-v1:0":XC?"claude-3-5-haiku@20241022":"claude-3-5-haiku-20241022";async function Qte(){try{return await QC("tengu-capable-model-config",JC)}catch(t){return be(t),JC}}var ere=ae(async()=>{if(process.env.ANTHROPIC_MODEL||process.env.USER_TYPE==="SWE_BENCH"&&process.env.ANTHROPIC_MODEL)return process.env.ANTHROPIC_MODEL;let t=await Qte();return ZC?t.bedrock:XC?t.vertex:t.firstParty});var e8={},zs=null,Sb=ae(async()=>{if(qe.isCI)return null;let t=await F0(),e={networkConfig:{api:"https://statsig.anthropic.com/v1/"},environment:{tier:qe.isCI||["test","development"].includes("production")?"dev":"production"},logLevel:k0.LogLevel.None,storageProvider:new P0};return zs=new k0.StatsigClient(zC,t,e),zs.on("error",r=>{be(`Statsig error: ${r}`)}),await zs.initializeAsync(),process.on("exit",()=>{zs?.flush()}),zs});var _b=ae(async t=>{if(qe.isCI)return!1;let e=await Sb();if(!e)return!1;let r=e.checkGate(t);return e8[t]=r,r});function t8(){return{...e8}}var lye=ae(async(t,e)=>{if(qe.isCI)return e;let r=await Sb();if(!r)return e;let n=r.getExperiment(t);return Object.keys(n.value).length===0?(be(`getExperimentValue got empty value for ${t}`),e):n.value}),QC=async(t,e)=>{if(qe.isCI)return e;let r=await Sb();if(!r)return e;let n=r.getDynamicConfig(t);return Object.keys(n.value).length===0?(be(`getDynamicConfig got empty value for ${t}`),e):n.value};var Hs=class extends Error{filePath;defaultConfig;constructor(e,r,n){super(e),this.name="ConfigParseError",this.filePath=r,this.defaultConfig=n}};var ire={allowedTools:[],context:{},history:[],dontCrawlDirectory:!1,enableArchitectTool:!1,mcpContextUris:[],mcpServers:{},approvedMcprcServers:[],rejectedMcprcServers:[],hasTrustDialogAccepted:!1};var I0={mcpServers:{},numStartups:0,autoUpdaterStatus:"disabled",theme:"dark",preferredNotifChannel:"iterm2",verbose:!1,customApiKeyResponses:{approved:[],rejected:[]}};var Cye={...I0,autoUpdaterStatus:"disabled"},Tye={...ire};function ore(t){are(Hd,{...t,projects:n8(Hd,I0).projects},I0)}function Eb(){return n8(Hd,I0)}function are(t,e,r){let n=Object.fromEntries(Object.entries(e).filter(([i,o])=>JSON.stringify(o)!==JSON.stringify(r[i])||i=="mcpServers"));rre(t,JSON.stringify(n,null,2),"utf-8")}var sre=!1;function n8(t,e,r){if(!sre)throw new Error("Config accessed before allowed.");if(!Db(t))return ri(e);try{let n=wb(t,"utf-8");try{let i=JSON.parse(n);return{...ri(e),...i}}catch(i){let o=i instanceof Error?i.message:String(i);throw new Hs(o,t,e)}}catch(n){if(n instanceof Hs&&r)throw n;return ri(e)}}var Aye=ae(()=>{let t=r8(Ai(),".mcp.json");if(!Db(t))return{};try{let e=wb(t,"utf-8"),r=XE(e);if(r&&typeof r=="object")return r=r.mcpServers,Object.keys(r).length.toString(),r}catch{}return{}},()=>{let t=Ai(),e=r8(t,".mcp.json");if(Db(e))try{let r=wb(e,"utf-8");return`${t}:${r}`}catch{return t}return t});function i8(){let t=Eb();if(t.userID)return t.userID;let e=nre(32).toString("hex");return ore({...t,userID:e}),e}var ure=ae(async()=>{let t=await li("git",["config","user.email"]);if(t.code!==0){be(`Failed to get git email: ${t.stdout} ${t.stderr}`);return}return t.stdout.trim()||void 0}),F0=ae(async()=>{let t=i8(),e=Eb(),r=process.env.USER_TYPE==="ant"?e.oauthAccount?.emailAddress??await ure()??(process.env.COO_CREATOR?`${process.env.COO_CREATOR}@anthropic.com`:void 0):void 0;return{customIDs:{sessionId:Ra},userID:t,appVersion:MACRO.VERSION,userAgent:qe.platform,email:r,custom:{nodeVersion:qe.nodeVersion,userType:process.env.USER_TYPE,organizationUuid:e.oauthAccount?.organizationUuid,accountUuid:e.oauthAccount?.accountUuid}}});async function o8(t){try{let[e,r]=await Promise.all([yb(),F0()]);ed({nodeVersion:qe.nodeVersion,platform:qe.platform,cwd:Ai(),isCI:qe.isCI,isGit:e,isTest:!1,packageVersion:MACRO.VERSION,sessionId:Ra,statsigGates:t8(),terminal:qe.terminal,userType:process.env.USER_TYPE}),td({id:r.userID,email:r.email}),Qf(t)}catch{}}import{randomUUID as lre}from"crypto";import{homedir as fre}from"os";import*as c8 from"os";var Ob=[],dre=100;var Ra=lre(),An=st(fre(),Bt);function qi(t){return t.replace(/[^a-zA-Z0-9]/g,"-")}var Tb={temp:()=>st(c8.tmpdir(),`${Mr}`),plan:()=>st(An,"plan"),memory:()=>st(An,"project",qi(process.cwd()),"memory"),apis:()=>st(An,"project",qi(process.cwd()),"apis"),errors:()=>st(An,"project",qi(process.cwd()),"errors"),messages:()=>st(An,"project",qi(process.cwd()),"messages"),mcpLogs:t=>st(An,"project",qi(process.cwd()),`mcp-logs-${t}`),log:()=>st(An,"project",qi(process.cwd()),"log"),vcrFixtures:()=>st(An,"project",qi(process.cwd()),"vcr-fixtures")};function pre(t){return t.toISOString().replace(/[:.]/g,"-")}var Ab=pre(new Date);function hre(){return st(Tb.errors(),Ab+".txt")}function mre(){return st(Tb.log(),Ab+".log")}function xre(){return st(Tb.log(),"error-"+Ab+".log")}function l8(t,e,...r){let n=r.map(i=>i instanceof Error?`${i.name}: ${i.message}
88
88
  ${i.stack.replace(/^/gm," ")}`:i);gre(e,{level:t,message:n.length==1?n[0]:n})}function wn(...t){l8("info",mre(),...t)}function Dn(...t){l8("error",xre(),...t)}function be(t){try{let e=t instanceof Error?t.stack||t.message:String(t),r={error:e,timestamp:new Date().toISOString()};Ob.length>=dre&&Ob.shift(),Ob.push(r),vre(hre(),{error:e})}catch{}o8(t)}function gre(t,e){let r=s8(t);Cb(r)||a8(r,{recursive:!0});let i=(typeof e=="string"?e:JSON.stringify(e))+`
89
89
  `;Cb(t)?u8(t,i,"utf8"):cre(t,i,"utf8")}function vre(t,e){process.env.USER_TYPE;let r=s8(t);Cb(r)||a8(r,{recursive:!0});let n={...e,cwd:process.cwd(),userType:process.env.USER_TYPE,sessionId:Ra,timestamp:new Date().toISOString(),version:MACRO.VERSION},i=JSON.stringify(n)+`
90
90
  `;u8(t,i,"utf8")}var j0=class t{static getTools=e=>[];static cache=[];static add(e){t.cache.push(e)}static clear(){t.cache.forEach(e=>{e.cache.clear?.()})}};var q0={env:{},permissions:{allow:[],deny:[],ask:[]},enableAllProjectMcpServers:!1,enabledMcpjsonServers:[],autoCompactEnabled:!1,language:"auto",disableSuggestion:!1},Ks=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),M0(e)||R0(e,JSON.stringify(this.getDefaultSettingsStructure(),null,2),"utf-8"),this.ensureDirExists(r),M0(r)||R0(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))wn(`\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,q0),wn(`\u5DF2\u5C06\u5DE5\u5177 '${e}' \u6DFB\u52A0\u5230\u9879\u76EE\u5141\u8BB8\u5217\u8868`)}}getUserSettingsPath(){return d8(Sre(),".hcode","settings.json")}getProjectSettingsPath(){let e=process.cwd();return d8(e,".hcode","settings.json")}ensureDirExists(e){let r=yre(e);M0(r)||_re(r,{recursive:!0})}loadSettingsFromFile(e){if(!M0(e))return{};let r="";try{return r=bre(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?R0(e,"{}","utf-8"):R0(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={...q0,...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 f=a?.network,h=s?.network;(f||h)&&(u.network={...f,...h,allowedDomains:this.mergeStringArrays(f?.allowedDomains,h?.allowedDomains),deniedDomains:this.mergeStringArrays(f?.deniedDomains,h?.deniedDomains),allowUnixSockets:this.mergeStringArrays(f?.allowUnixSockets,h?.allowUnixSockets)});let m=a?.ignoreViolations,v=s?.ignoreViolations;if(m||v){let b={};if(m)for(let[x,_]of Object.entries(m))b[x]=[..._];if(v)for(let[x,_]of Object.entries(v))b[x]?b[x]=this.mergeStringArrays(b[x],_)??[]:b[x]=[..._];u.ignoreViolations=b}o.sandbox=u}return o}saveUserSettings(e){let r=this.getUserSettingsPath();this.saveSettingsToFile(r,e,q0)}saveProjectSettings(e){let r=this.getProjectSettingsPath();this.saveSettingsToFile(r,e,q0)}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()}},qa=Ks.getInstance(),sr=qa.getAllSettings(),WE=function(){return Ks.test?Ks.testSettings:(sr||(sr=qa.getAllSettings(),j0.clear(),sr.env&&Object.keys(sr.env).length>0&&(Object.entries(sr.env).forEach(([t,e])=>{let r;typeof e=="string"?r=e:r=String(e),r.length>0&&(process.env[t]=r)}),wn(`\u5DF2\u4ECE\u914D\u7F6E\u6587\u4EF6\u52A0\u8F7D ${Object.keys(sr.env).length} \u4E2A\u73AF\u5883\u53D8\u91CF`,sr.env))),sr)};function Pb(){let t=qa.getUserSettingsPath(),e=qa.getProjectSettingsPath();f8(t,(r,n)=>{r==="change"&&(sr=null,wn("\u7528\u6237\u7EA7\u914D\u7F6E\u5DF2\u70ED\u52A0\u8F7D"))}).on("error",r=>{Dn("\u7528\u6237\u7EA7\u914D\u7F6E\u76D1\u63A7\u51FA\u9519:",r),setTimeout(()=>Pb(),100)}),f8(e,(r,n)=>{r==="change"&&(sr=null,wn("\u9879\u76EE\u7EA7\u914D\u7F6E\u5DF2\u70ED\u52A0\u8F7D",n))}).on("error",r=>{Dn("\u9879\u76EE\u7EA7\u914D\u7F6E\u76D1\u63A7\u51FA\u9519:",r),setTimeout(()=>Pb(),100)})}Pb();function Dre(){Ib();let t=jb(),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 ~/${Bt}/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 U6.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(f=>{["BASE_URL","AUTH_TOKEN","MODEL","SMALL_FAST_MODEL"].includes(f)?o[`ANTHROPIC_${f}`]=i[f]:o[f]=i[f]});let a=qa.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=h8(import.meta.url),u=L0.dirname(s),c=L0.join(u,"cli.js"),l=p8(process.execPath,["--no-deprecation",c,...process.argv.slice(2)],{env:{...process.env,...o,...a},stdio:"inherit",cwd:process.cwd()});l.on("error",f=>{console.error("Failed to start command:",f.message),process.exit(1)}),l.on("close",f=>{process.exit(f||0)})})()}async function wre(){let t=h8(import.meta.url),e=L0.dirname(t),r=L0.join(e,"cli.js"),n=p8(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 Ere(){process.argv.length<=2?Dre():await wre()}await Ere();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dahawa/hawa-code",
3
- "version": "1.21.0",
3
+ "version": "1.22.1",
4
4
  "bin": {
5
5
  "hcode": "hawa.js"
6
6
  },