@easbot/agent 0.1.12 → 0.1.13
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/dist/cli.cjs +1 -1
- package/dist/cli.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +40 -41
package/dist/cli.cjs
CHANGED
|
@@ -26,7 +26,7 @@ Other options (inherited from gateway):
|
|
|
26
26
|
--tls Enable TLS
|
|
27
27
|
--tls-cert <path> TLS certificate path
|
|
28
28
|
--tls-key <path> TLS key path
|
|
29
|
-
-d, --debug Enable debug mode`,"auth.login.error":"Login failed: {{error}}","auth.interactive.title":"Add Credential","auth.interactive.select_provider":"Select Provider:","auth.interactive.enter_number":"Enter number to select (default: 1)","auth.interactive.no_providers":"No providers available","auth.logout.logging_out":"Logging out from {{provider}}","auth.logout.success":"Logout successful: {{provider}}","auth.logout.not_found":"Credential not found for provider: {{provider}}","auth.logout.error":"Logout failed: {{error}}","pr.command.description":"Checkout GitHub PR and import session","pr.error.not_git_repo":"Current directory is not a Git repository","pr.error.invalid_number":"Invalid PR number: {{number}}","pr.error.checkout_failed":"PR checkout failed","pr.error.gh_not_installed":"Please ensure gh CLI is installed and authenticated","pr.checking_out":"Checking out PR #{{prNumber}}","pr.checkout_success":"PR #{{prNumber}} checked out as branch {{branch}}","pr.added_fork_remote":"Added fork remote: {{remote}}","pr.found_session":"Found easbot session: {{url}}","pr.session_imported":"Session imported: {{sessionId}}","pr.ready":"PR checkout complete!","pr.start_easbot":'Run "easbot" to start the editor (branch: {{branch}})',"pr.error.failed":"PR operation failed: {{error}}","github.command.description":"GitHub Agent management","github.command.install.description":"Install GitHub App","github.command.run.description":"Run GitHub Agent","github.option.provider":"Specify provider","github.option.model":"Specify model","github.option.event":"Mock GitHub event (JSON)","github.option.token":"GitHub Personal Access Token","github.error.not_git_repo":"Current directory is not a Git repository","github.error.parse_remote":"Failed to parse Git remote","github.field.owner":"Owner","github.field.repo":"Repo","github.install.starting":"Installing GitHub App","github.install.step1":"Step 1: Authorize App in browser","github.install.open_url":"Please visit: {{url}}","github.install.waiting":"Waiting for installation to complete...","github.install.installed":"App installed successfully!","github.install.timeout":"Installation timeout, please complete manually and retry","github.install.select_provider":"Select Provider (default: 1):","github.install.select_model":"Select Model (default: 1):","github.install.generating_workflow":"Generating workflow configuration...","github.install.workflow_created":"Workflow file created: {{file}}","github.install.next_steps":"Next Steps:","github.install.step1_hint":"Commit and push the workflow file","github.install.step2_hint":"Add environment variable secrets in {{owner}}/{{repo}} repository settings","github.install.step3_hint":'Comment "/oc" on a GitHub Issue to start the Agent',"github.install.error":"Installation failed: {{error}}","github.run.info":"GitHub Agent run mode requires execution in GitHub Actions"}},Ex=cP;});var pP,tf,of,dP,Ax,mP,Dx,gP,w,Mx=$(()=>{k();dd();Px();Tx();pP=()=>{pd("zh-CN"),pd("en-US"),cd("zh-CN",Cx),cd("en-US",Ex);};pP();tf=new Map,of=new Map,dP=t=>{if(of.has(t))return of.get(t);let e=/{{\s*(\w+)\s*}}/g,o=[],a;for(;(a=e.exec(t))!==null;){let r=a[1];r&&!o.includes(r)&&o.push(r);}let n=new RegExp("{{\\s*("+o.join("|")+")\\s*}}","g"),i={keys:o,regex:n};return of.set(t,i),i},Ax=(t,e)=>{if(!t||typeof t!="string")return "";if(!e||Object.keys(e).length===0)return t;let{regex:o,keys:a}=dP(t);return a.length===0||!a.some(i=>i in e)?t:t.replace(o,(i,r)=>{let s=e[r];return s==null?"":String(s)})},mP=t=>t&&Wr.locales.includes(t)?t:Wr.defaultLocale,Dx=t=>{if(!tf.has(t)){let{resources:e}=pd(t);tf.set(t,e);}return tf.get(t)},gP=(t,e={})=>{let o=mP(e.locale),n=Dx(o)?.translation[t];if(n&&typeof n=="string"){let i=Ax(n,e.vars);return i!=null?String(i):String(t)}if(o!==Wr.defaultLocale){let r=Dx(Wr.defaultLocale)?.translation[t];if(r&&typeof r=="string"){let s=Ax(r,e.vars);return s!=null?String(s):String(t)}}return String(e.fallback??t)},w=gP;});var Rx=$(()=>{k();dd();});var mt=$(()=>{k();dd();Mx();Rx();});var Lx={};Oe(Lx,{default:()=>nf});var nf,af=$(()=>{nf={name:"@easbot/agent",version:"0.1.12",description:"Core Agent for the easbot monorepo ecosystem",type:"module",main:"dist/index.cjs",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.cjs"},"./package.json":"./package.json"},bin:{easbot:"./dist/cli.mjs"},scripts:{dev:"cross-env NODE_ENV=development tsx src/cli.ts -- tui",start:"cross-env NODE_ENV=production node dist/cli.mjs tui --new",build:"tsup --env.NODE_ENV production",test:"vitest","test:run":"vitest run","test:ui":"vitest --ui","test:watch":"vitest --watch","test:coverage":"vitest run --coverage","test:unit":"vitest run --config ./vitest.unit.config.ts","test:unit:watch":"vitest --config ./vitest.unit.config.ts","test:integration":"vitest run --config ./vitest.integration.config.ts","test:integration:watch":"vitest --config ./vitest.integration.config.ts","test:e2e":"vitest run --config ./vitest.e2e.config.ts","test:e2e:watch":"vitest --config ./vitest.e2e.config.ts",lint:"biome check .","lint:fix":"biome check --write .","lint:fix:unsafe":"biome check --write --unsafe ./src","lint:report":"biome check --reporter=summary .",format:"biome format .","format:fix":"biome format --write .","type-check":"tsc --noEmit",clean:"npx rimraf dist node_modules",prepare:"echo 'agent: Bun environment ready for CLI usage'","publish:npm":"bash scripts/publish.sh","publish:npm:win":"powershell -ExecutionPolicy Bypass -File scripts/publish.ps1"},keywords:["ai","agent","eas","bot","automation"],author:"houjallen",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/houjallen/easbot.git",directory:"packages/agent"},homepage:"https://github.com/houjallen/easbot/tree/main/packages/agent#readme",bugs:{url:"https://github.com/houjallen/easbot/issues"},files:["dist","README.md","README.en.md","LICENSE"],dependencies:{"@agentclientprotocol/sdk":"^0.18.0","@ai-sdk/amazon-bedrock":"4.0.82","@ai-sdk/anthropic":"3.0.63","@ai-sdk/alibaba":"^2.0.0-beta.33","@ai-sdk/azure":"3.0.49","@ai-sdk/cerebras":"^2.0.41","@ai-sdk/cohere":"3.0.27","@ai-sdk/deepinfra":"^2.0.41","@ai-sdk/gateway":"^3.0.78","@ai-sdk/google":"3.0.52","@ai-sdk/google-vertex":"^4.0.93","@ai-sdk/groq":"3.0.31","@ai-sdk/mistral":"3.0.27","@ai-sdk/openai":"3.0.48","@ai-sdk/openai-compatible":"2.0.37","@ai-sdk/perplexity":"^3.0.26","@ai-sdk/provider":"^3.0.8","@ai-sdk/provider-utils":"^4.0.21","@ai-sdk/togetherai":"^2.0.41","@ai-sdk/vercel":"^2.0.39","@ai-sdk/xai":"^3.0.73","@aws-sdk/credential-providers":"^3.1014.0","@clack/prompts":"^1.1.0","@easbot/plugin":"workspace:*","@easbot/codebase":"workspace:*","@easbot/memory":"workspace:*","@easbot/note":"workspace:*","@easbot/types":"workspace:*","@easbot/tui":"workspace:*","@easbot/utils":"workspace:*","@easbot/sdk":"workspace:*","@easbot/local-model-sdk":"workspace:*","@easbot/ollama-sdk":"workspace:*","@easbot/gateway":"workspace:*","@hono/node-server":"^2.0.0","@hono/node-ws":"^1.3.0","@hono/standard-validator":"^0.2.2","@hono/zod-validator":"^0.7.6","@mariozechner/pi-agent-core":"0.62.0","@mariozechner/pi-ai":"0.62.0","@mariozechner/pi-coding-agent":"0.62.0","@modelcontextprotocol/sdk":"^1.27.1","@openrouter/ai-sdk-provider":"^2.3.3","@parcel/watcher":"^2.5.6","@sinclair/typebox":"0.34.48","@solid-primitives/event-bus":"1.1.3","@solid-primitives/scheduled":"1.5.3","@standard-schema/spec":"1.1.0","@types/semver":"^7.7.1","@wasmer/wasi":"^1.2.2","@types/cross-spawn":"^6.0.6","@zip.js/zip.js":"^2.8.23",ai:"^6.0.136","ai-gateway-provider":"^3.1.2",ajv:"^8.18.0",axios:"^1.15.2","bash-parser":"^0.5.0","bonjour-service":"^1.3.0",chalk:"^5.6.2",clipboardy:"^5.3.1",commander:"^14.0.3","cross-spawn":"^7.0.6","decimal.js":"^10.6.0",diff:"^8.0.4","drizzle-orm":"^0.45.2",fuzzysort:"^3.1.0","fast-check":"^4.6.0","gitlab-ai-provider":"^6.6.0",glob:"^13.0.6","gray-matter":"^4.0.3",hono:"^4.12.14","hono-openapi":"^1.3.0",ignore:"^7.0.5",jiti:"^2.6.1","jsonc-parser":"^3.3.1","lru-cache":"^11.3.0",minimatch:"^10.2.4","node-gyp":"^12.3.0","node-html-parser":"^7.1.0","node-pty":"^1.1.0",open:"^11.0.0",remeda:"^2.33.6",semver:"^7.7.4","tree-sitter-bash":"^0.25.1",turndown:"^7.2.2",ulid:"^3.0.2","vscode-jsonrpc":"^8.2.1",which:"^6.0.1","xdg-basedir":"^5.1.0",zod:"^4.3.6",ws:"^8.20.0","jieba-wasm":"^2.4.0","vscode-languageserver-types":"3.17.5","why-is-node-running":"^3.2.2","zod-to-json-schema":"^3.25.1"},devDependencies:{"@actions/core":"^3.0.0","@actions/github":"^9.0.0","@octokit/graphql":"^9.0.3","@octokit/rest":"^22.0.1","@octokit/webhooks-types":"^7.6.1","@types/node":"^22.17.0","@types/which":"^3.0.4","@types/ws":"^8.18.1","@types/turndown":"^5.0.6","@vitest/coverage-v8":"^4.1.1",dotenv:"^17.3.1",esbuild:"^0.27.4","esbuild-plugin-alias":"^0.2.1",tsup:"^8.5.1",tsx:"^4.21.0",typescript:"^6.0.2",vitest:"^4.1.1"}};});var Vr={};Oe(Vr,{Global:()=>pe});var md,rf,SP,CP,PP,pe,vt=$(()=>{k();af();md="easbot",rf=Le__namespace.default.join(xdgBasedir.xdgData,md),SP=Le__namespace.default.join(xdgBasedir.xdgCache,md),CP=Le__namespace.default.join(xdgBasedir.xdgConfig,md),PP=Le__namespace.default.join(xdgBasedir.xdgState,md);(d=>{d.Path={get home(){return process.env.EASBOT_TEST_HOME||$d__default.default.homedir()},data:rf,bin:Le__namespace.default.join(rf,"bin"),log:Le__namespace.default.join(rf,"log"),cache:SP,config:CP,state:PP};let e=null,o=null;async function a(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{let c=await Promise.resolve().then(()=>(af(),Lx));e=c.default?.version||c.version||"local";}catch{e="local";}return e||"local"}function n(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{e=nf.version||"local";}catch{e="local";}return e||"local"}d.getVersion=n;function i(){if(o)return o;if(process.env.EASBOT_CHANNEL)return o=process.env.EASBOT_CHANNEL,o;let c=n();return c==="local"||c.includes("dev")?o="local":c.includes("beta")||c.includes("alpha")?o="preview":o="latest",o||"local"}d.getChannel=i;function r(){return i()==="local"}d.isLocal=r;function s(){return i()==="preview"}d.isPreview=s;let u=false,l=null;async function p(){if(!u)return l||(l=(async()=>{await a(),await Promise.all([Eo.mkdir(d.Path.data,{recursive:true}),Eo.mkdir(d.Path.config,{recursive:true}),Eo.mkdir(d.Path.state,{recursive:true}),Eo.mkdir(d.Path.log,{recursive:true}),Eo.mkdir(d.Path.bin,{recursive:true}),Eo.mkdir(d.Path.cache,{recursive:true})]).then(()=>{process.env.EASBOT_DATA_PATH=d.Path.data,process.env.EASBOT_CONFIG_PATH=d.Path.config,process.env.EASBOT_STATE_PATH=d.Path.state,process.env.EASBOT_LOG_PATH=d.Path.log,process.env.EASBOT_BIN_PATH=d.Path.bin,process.env.EASBOT_CACHE_PATH=d.Path.cache;});let c="1",m=Le__namespace.default.join(d.Path.cache,"version");if(await Eo.readFile(m,"utf-8").catch(()=>"0")!==c){try{let _=await Eo.readdir(d.Path.cache);await Promise.all(_.map(v=>Eo.rm(Le__namespace.default.join(d.Path.cache,v),{recursive:!0,force:!0})));}catch{}await Eo.writeFile(m,c);}u=true;})(),l)}d.init=p;})(pe||(pe={}));});var Ie,Ut=$(()=>{k();ue();(n=>{G.create({service:"event"});let e=new Map;function o(i,r){let s={type:i,properties:r};return e.set(i,s),s}n.define=o;function a(){return X__default.default.discriminatedUnion("type",e.entries().map(([i,r])=>X__default.default.object({type:X__default.default.literal(i),properties:r.properties}).meta({ref:"Event."+r.type})).toArray()).meta({ref:"Event"})}n.payloads=a;})(Ie||(Ie={}));});function ni(t={}){let e=t.port??3e3,o=t.hostname??"0.0.0.0",a=new hono.Hono({strict:true,getPath:r=>{try{return new URL(r.url).pathname}catch{return r.url}}});if(t.onError?a.onError(t.onError):a.onError((r,s)=>(Kr.error("Server error",{error:r.message,stack:r.stack}),r instanceof httpException.HTTPException?r.getResponse():s.json({error:"Internal Server Error",message:r.message},500))),t.onNotFound?a.notFound(t.onNotFound):a.notFound(r=>r.json({error:"Not Found",path:r.req.path},404)),!t.websockets&&t.cors&&a.use(cors.cors(typeof t.cors=="boolean"?{origin:"*"}:t.cors)),a.use(logger.logger((r,...s)=>Kr.info(r,s))),!t.websockets&&t.secureHeaders&&a.use(secureHeaders.secureHeaders()),!t.websockets&&t.compression&&a.use(compress.compress({encoding:"gzip"})),!t.websockets&&t.timeout&&a.use(timeout.timeout(t.timeout)),t.middlewares)for(let r of t.middlewares)r.path?a.use(r.path,r.handler):a.use(r.handler);if(t.routes)for(let r of t.routes){let s=r.middlewares||[],u=r.method.toUpperCase();r.validation?a.on(u,r.path,zodValidator.zValidator("json",r.validation),...s,r.handler):a.on(u,r.path,...s,r.handler);}t.rpc&&a.post("/rpc/:method",async r=>{let s=r.req.param("method"),u=t.rpc?.[s];if(!u)return r.json({error:"RPC method not found"},404);try{let l=await r.req.json(),p=await u(l,r);return r.json({result:p})}catch(l){return Kr.error("RPC error",{method:s,error:l.message}),r.json({error:"RPC execution failed",message:l.message},500)}}),t.fetch&&a.all("*",async r=>await t.fetch(r.req.raw));let n=null,i={url:new URL(`http://${o}:${e}`),port:e,hostname:o,hono:a,async stop(r=false){return n?new Promise((s,u)=>{r&&n.closeAllConnections?.(),n.close(l=>{l?(Kr.error("Error closing server",{error:l.message}),u(l)):(n=null,Kr.info(`Server on port ${e} stopped`),s());}),setTimeout(()=>{Kr.warn(`Server shutdown timeout on port ${e}`),n=null,s();},5e3);}):Promise.resolve()},get raw(){return n||void 0}};return n=nodeServer.serve({fetch:a.fetch,port:e,hostname:o}),Kr.info(`Server running on http://${o}:${e}`),i}function Ox(t){return ni({rpc:t,port:3e3})}function Bx(t,e={}){return ni({...e,routes:t})}function qx(t,e={}){return ni({...e,websockets:t})}function Nx(t,e={}){let o=Object.entries(t).map(([a,n])=>({method:"get",path:`/stream/${a}`,handler:i=>streaming.streamSSE(i,async r=>{for await(let s of n(i))await r.writeSSE(s);})}));return ni({...e,routes:o,streaming:true})}var Kr,gd=$(()=>{k();ue();Kr=G.create({service:"server"});});var gu,uf=$(()=>{k();ue();(n=>{let t=G.create({service:"pkg-registry"});function e(){return process.platform==="win32"?"cmd":"npm"}async function o(i,r,s){return new Promise(u=>{let l=process.platform==="win32"?["/c","npm","view",i,r]:["view",i,r],p=child_process.spawn(e(),l,{cwd:s,env:{...process.env}}),d="",c="";p.stdout?.on("data",m=>{d+=m.toString();}),p.stderr?.on("data",m=>{c+=m.toString();}),p.on("close",m=>{m!==0?(t.warn("npm view failed",{pkg:i,field:r,code:m,stderr:c}),u(null)):u(d.trim());}),p.on("error",()=>{t.error("npm view error",{pkg:i,field:r,error:"unknown"}),u(null);});})}n.info=o;async function a(i,r,s){let u=await o(i,"version",s);return u?/[\s^~*xX<>|=]/.test(r)?!fd__namespace.satisfies(u,r):fd__namespace.compare(r,u)===-1:(t.warn("Failed to resolve latest version, using cached",{pkg:i,cachedVersion:r}),false)}n.isOutdated=a;})(gu||(gu={}));});var fc=JC((eU,cw)=>{k();var mf=Object.defineProperty,jP=Object.getOwnPropertyDescriptor,FP=Object.getOwnPropertyNames,GP=Object.prototype.hasOwnProperty,$P=(t,e)=>{for(var o in e)mf(t,o,{get:e[o],enumerable:true});},zP=(t,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of FP(e))!GP.call(t,n)&&n!==o&&mf(t,n,{get:()=>e[n],enumerable:!(a=jP(e,n))||a.enumerable});return t},UP=t=>zP(mf({},"__esModule",{value:true}),t),mc={};$P(mc,{analyzeMetafile:()=>bE,analyzeMetafileSync:()=>SE,build:()=>_E,buildSync:()=>vE,context:()=>xE,default:()=>TE,formatMessages:()=>yE,formatMessagesSync:()=>IE,initialize:()=>PE,stop:()=>CE,transform:()=>wE,transformSync:()=>kE,version:()=>hE});cw.exports=UP(mc);function Fx(t){let e=a=>{if(a===null)o.write8(0);else if(typeof a=="boolean")o.write8(1),o.write8(+a);else if(typeof a=="number")o.write8(2),o.write32(a|0);else if(typeof a=="string")o.write8(3),o.write(Hn(a));else if(a instanceof Uint8Array)o.write8(4),o.write(a);else if(a instanceof Array){o.write8(5),o.write32(a.length);for(let n of a)e(n);}else {let n=Object.keys(a);o.write8(6),o.write32(n.length);for(let i of n)o.write(Hn(i)),e(a[i]);}},o=new Jx;return o.write32(0),o.write32(t.id<<1|+!t.isRequest),e(t.value),cf(o.buf,o.len-4,0),o.buf.subarray(0,o.len)}function HP(t){let e=()=>{switch(o.read8()){case 0:return null;case 1:return !!o.read8();case 2:return o.read32();case 3:return es(o.read());case 4:return o.read();case 5:{let r=o.read32(),s=[];for(let u=0;u<r;u++)s.push(e());return s}case 6:{let r=o.read32(),s={};for(let u=0;u<r;u++)s[es(o.read())]=e();return s}default:throw new Error("Invalid packet")}},o=new Jx(t),a=o.read32(),n=(a&1)===0;a>>>=1;let i=e();if(o.ptr!==t.length)throw new Error("Invalid packet");return {id:a,isRequest:n,value:i}}var Jx=class{constructor(t=new Uint8Array(1024)){this.buf=t,this.len=0,this.ptr=0;}_write(t){if(this.len+t>this.buf.length){let e=new Uint8Array((this.len+t)*2);e.set(this.buf),this.buf=e;}return this.len+=t,this.len-t}write8(t){let e=this._write(1);this.buf[e]=t;}write32(t){let e=this._write(4);cf(this.buf,t,e);}write(t){let e=this._write(4+t.length);cf(this.buf,t.length,e),this.buf.set(t,e+4);}_read(t){if(this.ptr+t>this.buf.length)throw new Error("Invalid packet");return this.ptr+=t,this.ptr-t}read8(){return this.buf[this._read(1)]}read32(){return Yx(this.buf,this._read(4))}read(){let t=this.read32(),e=new Uint8Array(t),o=this._read(e.length);return e.set(this.buf.subarray(o,o+t)),e}},Hn,es,lf;if(typeof TextEncoder<"u"&&typeof TextDecoder<"u"){let t=new TextEncoder,e=new TextDecoder;Hn=o=>t.encode(o),es=o=>e.decode(o),lf='new TextEncoder().encode("")';}else if(typeof Buffer<"u")Hn=t=>Buffer.from(t),es=t=>{let{buffer:e,byteOffset:o,byteLength:a}=t;return Buffer.from(e,o,a).toString()},lf='Buffer.from("")';else throw new Error("No UTF-8 codec found");if(!(Hn("")instanceof Uint8Array))throw new Error(`Invariant violation: "${lf} instanceof Uint8Array" is incorrectly false
|
|
29
|
+
-d, --debug Enable debug mode`,"auth.login.error":"Login failed: {{error}}","auth.interactive.title":"Add Credential","auth.interactive.select_provider":"Select Provider:","auth.interactive.enter_number":"Enter number to select (default: 1)","auth.interactive.no_providers":"No providers available","auth.logout.logging_out":"Logging out from {{provider}}","auth.logout.success":"Logout successful: {{provider}}","auth.logout.not_found":"Credential not found for provider: {{provider}}","auth.logout.error":"Logout failed: {{error}}","pr.command.description":"Checkout GitHub PR and import session","pr.error.not_git_repo":"Current directory is not a Git repository","pr.error.invalid_number":"Invalid PR number: {{number}}","pr.error.checkout_failed":"PR checkout failed","pr.error.gh_not_installed":"Please ensure gh CLI is installed and authenticated","pr.checking_out":"Checking out PR #{{prNumber}}","pr.checkout_success":"PR #{{prNumber}} checked out as branch {{branch}}","pr.added_fork_remote":"Added fork remote: {{remote}}","pr.found_session":"Found easbot session: {{url}}","pr.session_imported":"Session imported: {{sessionId}}","pr.ready":"PR checkout complete!","pr.start_easbot":'Run "easbot" to start the editor (branch: {{branch}})',"pr.error.failed":"PR operation failed: {{error}}","github.command.description":"GitHub Agent management","github.command.install.description":"Install GitHub App","github.command.run.description":"Run GitHub Agent","github.option.provider":"Specify provider","github.option.model":"Specify model","github.option.event":"Mock GitHub event (JSON)","github.option.token":"GitHub Personal Access Token","github.error.not_git_repo":"Current directory is not a Git repository","github.error.parse_remote":"Failed to parse Git remote","github.field.owner":"Owner","github.field.repo":"Repo","github.install.starting":"Installing GitHub App","github.install.step1":"Step 1: Authorize App in browser","github.install.open_url":"Please visit: {{url}}","github.install.waiting":"Waiting for installation to complete...","github.install.installed":"App installed successfully!","github.install.timeout":"Installation timeout, please complete manually and retry","github.install.select_provider":"Select Provider (default: 1):","github.install.select_model":"Select Model (default: 1):","github.install.generating_workflow":"Generating workflow configuration...","github.install.workflow_created":"Workflow file created: {{file}}","github.install.next_steps":"Next Steps:","github.install.step1_hint":"Commit and push the workflow file","github.install.step2_hint":"Add environment variable secrets in {{owner}}/{{repo}} repository settings","github.install.step3_hint":'Comment "/oc" on a GitHub Issue to start the Agent',"github.install.error":"Installation failed: {{error}}","github.run.info":"GitHub Agent run mode requires execution in GitHub Actions"}},Ex=cP;});var pP,tf,of,dP,Ax,mP,Dx,gP,w,Mx=$(()=>{k();dd();Px();Tx();pP=()=>{pd("zh-CN"),pd("en-US"),cd("zh-CN",Cx),cd("en-US",Ex);};pP();tf=new Map,of=new Map,dP=t=>{if(of.has(t))return of.get(t);let e=/{{\s*(\w+)\s*}}/g,o=[],a;for(;(a=e.exec(t))!==null;){let r=a[1];r&&!o.includes(r)&&o.push(r);}let n=new RegExp("{{\\s*("+o.join("|")+")\\s*}}","g"),i={keys:o,regex:n};return of.set(t,i),i},Ax=(t,e)=>{if(!t||typeof t!="string")return "";if(!e||Object.keys(e).length===0)return t;let{regex:o,keys:a}=dP(t);return a.length===0||!a.some(i=>i in e)?t:t.replace(o,(i,r)=>{let s=e[r];return s==null?"":String(s)})},mP=t=>t&&Wr.locales.includes(t)?t:Wr.defaultLocale,Dx=t=>{if(!tf.has(t)){let{resources:e}=pd(t);tf.set(t,e);}return tf.get(t)},gP=(t,e={})=>{let o=mP(e.locale),n=Dx(o)?.translation[t];if(n&&typeof n=="string"){let i=Ax(n,e.vars);return i!=null?String(i):String(t)}if(o!==Wr.defaultLocale){let r=Dx(Wr.defaultLocale)?.translation[t];if(r&&typeof r=="string"){let s=Ax(r,e.vars);return s!=null?String(s):String(t)}}return String(e.fallback??t)},w=gP;});var Rx=$(()=>{k();dd();});var mt=$(()=>{k();dd();Mx();Rx();});var Lx={};Oe(Lx,{default:()=>nf});var nf,af=$(()=>{nf={name:"@easbot/agent",version:"0.1.13",description:"Core Agent for the easbot monorepo ecosystem",type:"module",main:"dist/index.cjs",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.cjs"},"./package.json":"./package.json"},bin:{easbot:"./dist/cli.mjs"},scripts:{dev:"cross-env NODE_ENV=development tsx src/cli.ts -- tui",start:"cross-env NODE_ENV=production node dist/cli.mjs tui --new",build:"tsup --env.NODE_ENV production",test:"vitest","test:run":"vitest run","test:ui":"vitest --ui","test:watch":"vitest --watch","test:coverage":"vitest run --coverage","test:unit":"vitest run --config ./vitest.unit.config.ts","test:unit:watch":"vitest --config ./vitest.unit.config.ts","test:integration":"vitest run --config ./vitest.integration.config.ts","test:integration:watch":"vitest --config ./vitest.integration.config.ts","test:e2e":"vitest run --config ./vitest.e2e.config.ts","test:e2e:watch":"vitest --config ./vitest.e2e.config.ts",lint:"biome check .","lint:fix":"biome check --write .","lint:fix:unsafe":"biome check --write --unsafe ./src","lint:report":"biome check --reporter=summary .",format:"biome format .","format:fix":"biome format --write .","type-check":"tsc --noEmit",clean:"npx rimraf dist node_modules",prepare:"echo 'agent: Bun environment ready for CLI usage'","publish:npm":"bash scripts/publish.sh","publish:npm:win":"powershell -ExecutionPolicy Bypass -File scripts/publish.ps1"},keywords:["ai","agent","eas","bot","automation"],author:"houjallen",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/houjallen/easbot.git",directory:"packages/agent"},homepage:"https://github.com/houjallen/easbot/tree/main/packages/agent#readme",bugs:{url:"https://github.com/houjallen/easbot/issues"},files:["dist","README.md","README.en.md","LICENSE"],dependencies:{"@agentclientprotocol/sdk":"^0.18.0","@ai-sdk/amazon-bedrock":"4.0.82","@ai-sdk/anthropic":"3.0.63","@ai-sdk/alibaba":"^2.0.0-beta.33","@ai-sdk/azure":"3.0.49","@ai-sdk/cerebras":"^2.0.41","@ai-sdk/cohere":"3.0.27","@ai-sdk/deepinfra":"^2.0.41","@ai-sdk/gateway":"^3.0.78","@ai-sdk/google":"3.0.52","@ai-sdk/google-vertex":"^4.0.93","@ai-sdk/groq":"3.0.31","@ai-sdk/mistral":"3.0.27","@ai-sdk/openai":"3.0.48","@ai-sdk/openai-compatible":"2.0.37","@ai-sdk/perplexity":"^3.0.26","@ai-sdk/provider":"^3.0.8","@ai-sdk/provider-utils":"^4.0.21","@ai-sdk/togetherai":"^2.0.41","@ai-sdk/vercel":"^2.0.39","@ai-sdk/xai":"^3.0.73","@aws-sdk/credential-providers":"^3.1014.0","@clack/prompts":"^1.1.0","@easbot/plugin":"workspace:*","@easbot/codebase":"workspace:*","@easbot/memory":"workspace:*","@easbot/note":"workspace:*","@easbot/types":"workspace:*","@easbot/tui":"workspace:*","@easbot/utils":"workspace:*","@easbot/sdk":"workspace:*","@easbot/local-model-sdk":"workspace:*","@easbot/ollama-sdk":"workspace:*","@easbot/gateway":"workspace:*","@hono/node-server":"^2.0.0","@hono/node-ws":"^1.3.0","@hono/standard-validator":"^0.2.2","@hono/zod-validator":"^0.7.6","@mariozechner/pi-agent-core":"0.62.0","@mariozechner/pi-ai":"0.62.0","@mariozechner/pi-coding-agent":"0.62.0","@modelcontextprotocol/sdk":"^1.27.1","@openrouter/ai-sdk-provider":"^2.3.3","@parcel/watcher":"^2.5.6","@sinclair/typebox":"0.34.48","@solid-primitives/event-bus":"1.1.3","@solid-primitives/scheduled":"1.5.3","@standard-schema/spec":"1.1.0","@types/semver":"^7.7.1","@wasmer/wasi":"^1.2.2","@types/cross-spawn":"^6.0.6","@zip.js/zip.js":"^2.8.23",ai:"^6.0.136","ai-gateway-provider":"^3.1.2",ajv:"^8.18.0",axios:"^1.15.2","bash-parser":"^0.5.0","bonjour-service":"^1.3.0",chalk:"^5.6.2",clipboardy:"^5.3.1",commander:"^14.0.3","cross-spawn":"^7.0.6","decimal.js":"^10.6.0",diff:"^8.0.4","drizzle-orm":"^0.45.2",fuzzysort:"^3.1.0","fast-check":"^4.6.0","gitlab-ai-provider":"^6.6.0",glob:"^13.0.6","gray-matter":"^4.0.3",hono:"^4.12.14","hono-openapi":"^1.3.0",ignore:"^7.0.5",jiti:"^2.6.1","jsonc-parser":"^3.3.1","lru-cache":"^11.3.0",minimatch:"^10.2.4","node-gyp":"^12.3.0","node-html-parser":"^7.1.0","node-pty":"^1.1.0",open:"^11.0.0",remeda:"^2.33.6",semver:"^7.7.4","tree-sitter-bash":"^0.25.1",turndown:"^7.2.2",ulid:"^3.0.2","vscode-jsonrpc":"^8.2.1",which:"^6.0.1","xdg-basedir":"^5.1.0",zod:"^4.3.6",ws:"^8.20.0","jieba-wasm":"^2.4.0","vscode-languageserver-types":"3.17.5","why-is-node-running":"^3.2.2","zod-to-json-schema":"^3.25.1"},devDependencies:{"@actions/core":"^3.0.0","@actions/github":"^9.0.0","@octokit/graphql":"^9.0.3","@octokit/rest":"^22.0.1","@octokit/webhooks-types":"^7.6.1","@types/node":"^22.17.0","@types/which":"^3.0.4","@types/ws":"^8.18.1","@types/turndown":"^5.0.6","@vitest/coverage-v8":"^4.1.1",dotenv:"^17.3.1",esbuild:"^0.27.4","esbuild-plugin-alias":"^0.2.1",tsup:"^8.5.1",tsx:"^4.21.0",typescript:"^6.0.2",vitest:"^4.1.1"}};});var Vr={};Oe(Vr,{Global:()=>pe});var md,rf,SP,CP,PP,pe,vt=$(()=>{k();af();md="easbot",rf=Le__namespace.default.join(xdgBasedir.xdgData,md),SP=Le__namespace.default.join(xdgBasedir.xdgCache,md),CP=Le__namespace.default.join(xdgBasedir.xdgConfig,md),PP=Le__namespace.default.join(xdgBasedir.xdgState,md);(d=>{d.Path={get home(){return process.env.EASBOT_TEST_HOME||$d__default.default.homedir()},data:rf,bin:Le__namespace.default.join(rf,"bin"),log:Le__namespace.default.join(rf,"log"),cache:SP,config:CP,state:PP};let e=null,o=null;async function a(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{let c=await Promise.resolve().then(()=>(af(),Lx));e=c.default?.version||c.version||"local";}catch{e="local";}return e||"local"}function n(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{e=nf.version||"local";}catch{e="local";}return e||"local"}d.getVersion=n;function i(){if(o)return o;if(process.env.EASBOT_CHANNEL)return o=process.env.EASBOT_CHANNEL,o;let c=n();return c==="local"||c.includes("dev")?o="local":c.includes("beta")||c.includes("alpha")?o="preview":o="latest",o||"local"}d.getChannel=i;function r(){return i()==="local"}d.isLocal=r;function s(){return i()==="preview"}d.isPreview=s;let u=false,l=null;async function p(){if(!u)return l||(l=(async()=>{await a(),await Promise.all([Eo.mkdir(d.Path.data,{recursive:true}),Eo.mkdir(d.Path.config,{recursive:true}),Eo.mkdir(d.Path.state,{recursive:true}),Eo.mkdir(d.Path.log,{recursive:true}),Eo.mkdir(d.Path.bin,{recursive:true}),Eo.mkdir(d.Path.cache,{recursive:true})]).then(()=>{process.env.EASBOT_DATA_PATH=d.Path.data,process.env.EASBOT_CONFIG_PATH=d.Path.config,process.env.EASBOT_STATE_PATH=d.Path.state,process.env.EASBOT_LOG_PATH=d.Path.log,process.env.EASBOT_BIN_PATH=d.Path.bin,process.env.EASBOT_CACHE_PATH=d.Path.cache;});let c="1",m=Le__namespace.default.join(d.Path.cache,"version");if(await Eo.readFile(m,"utf-8").catch(()=>"0")!==c){try{let _=await Eo.readdir(d.Path.cache);await Promise.all(_.map(v=>Eo.rm(Le__namespace.default.join(d.Path.cache,v),{recursive:!0,force:!0})));}catch{}await Eo.writeFile(m,c);}u=true;})(),l)}d.init=p;})(pe||(pe={}));});var Ie,Ut=$(()=>{k();ue();(n=>{G.create({service:"event"});let e=new Map;function o(i,r){let s={type:i,properties:r};return e.set(i,s),s}n.define=o;function a(){return X__default.default.discriminatedUnion("type",e.entries().map(([i,r])=>X__default.default.object({type:X__default.default.literal(i),properties:r.properties}).meta({ref:"Event."+r.type})).toArray()).meta({ref:"Event"})}n.payloads=a;})(Ie||(Ie={}));});function ni(t={}){let e=t.port??3e3,o=t.hostname??"0.0.0.0",a=new hono.Hono({strict:true,getPath:r=>{try{return new URL(r.url).pathname}catch{return r.url}}});if(t.onError?a.onError(t.onError):a.onError((r,s)=>(Kr.error("Server error",{error:r.message,stack:r.stack}),r instanceof httpException.HTTPException?r.getResponse():s.json({error:"Internal Server Error",message:r.message},500))),t.onNotFound?a.notFound(t.onNotFound):a.notFound(r=>r.json({error:"Not Found",path:r.req.path},404)),!t.websockets&&t.cors&&a.use(cors.cors(typeof t.cors=="boolean"?{origin:"*"}:t.cors)),a.use(logger.logger((r,...s)=>Kr.info(r,s))),!t.websockets&&t.secureHeaders&&a.use(secureHeaders.secureHeaders()),!t.websockets&&t.compression&&a.use(compress.compress({encoding:"gzip"})),!t.websockets&&t.timeout&&a.use(timeout.timeout(t.timeout)),t.middlewares)for(let r of t.middlewares)r.path?a.use(r.path,r.handler):a.use(r.handler);if(t.routes)for(let r of t.routes){let s=r.middlewares||[],u=r.method.toUpperCase();r.validation?a.on(u,r.path,zodValidator.zValidator("json",r.validation),...s,r.handler):a.on(u,r.path,...s,r.handler);}t.rpc&&a.post("/rpc/:method",async r=>{let s=r.req.param("method"),u=t.rpc?.[s];if(!u)return r.json({error:"RPC method not found"},404);try{let l=await r.req.json(),p=await u(l,r);return r.json({result:p})}catch(l){return Kr.error("RPC error",{method:s,error:l.message}),r.json({error:"RPC execution failed",message:l.message},500)}}),t.fetch&&a.all("*",async r=>await t.fetch(r.req.raw));let n=null,i={url:new URL(`http://${o}:${e}`),port:e,hostname:o,hono:a,async stop(r=false){return n?new Promise((s,u)=>{r&&n.closeAllConnections?.(),n.close(l=>{l?(Kr.error("Error closing server",{error:l.message}),u(l)):(n=null,Kr.info(`Server on port ${e} stopped`),s());}),setTimeout(()=>{Kr.warn(`Server shutdown timeout on port ${e}`),n=null,s();},5e3);}):Promise.resolve()},get raw(){return n||void 0}};return n=nodeServer.serve({fetch:a.fetch,port:e,hostname:o}),Kr.info(`Server running on http://${o}:${e}`),i}function Ox(t){return ni({rpc:t,port:3e3})}function Bx(t,e={}){return ni({...e,routes:t})}function qx(t,e={}){return ni({...e,websockets:t})}function Nx(t,e={}){let o=Object.entries(t).map(([a,n])=>({method:"get",path:`/stream/${a}`,handler:i=>streaming.streamSSE(i,async r=>{for await(let s of n(i))await r.writeSSE(s);})}));return ni({...e,routes:o,streaming:true})}var Kr,gd=$(()=>{k();ue();Kr=G.create({service:"server"});});var gu,uf=$(()=>{k();ue();(n=>{let t=G.create({service:"pkg-registry"});function e(){return process.platform==="win32"?"cmd":"npm"}async function o(i,r,s){return new Promise(u=>{let l=process.platform==="win32"?["/c","npm","view",i,r]:["view",i,r],p=child_process.spawn(e(),l,{cwd:s,env:{...process.env}}),d="",c="";p.stdout?.on("data",m=>{d+=m.toString();}),p.stderr?.on("data",m=>{c+=m.toString();}),p.on("close",m=>{m!==0?(t.warn("npm view failed",{pkg:i,field:r,code:m,stderr:c}),u(null)):u(d.trim());}),p.on("error",()=>{t.error("npm view error",{pkg:i,field:r,error:"unknown"}),u(null);});})}n.info=o;async function a(i,r,s){let u=await o(i,"version",s);return u?/[\s^~*xX<>|=]/.test(r)?!fd__namespace.satisfies(u,r):fd__namespace.compare(r,u)===-1:(t.warn("Failed to resolve latest version, using cached",{pkg:i,cachedVersion:r}),false)}n.isOutdated=a;})(gu||(gu={}));});var fc=JC((eU,cw)=>{k();var mf=Object.defineProperty,jP=Object.getOwnPropertyDescriptor,FP=Object.getOwnPropertyNames,GP=Object.prototype.hasOwnProperty,$P=(t,e)=>{for(var o in e)mf(t,o,{get:e[o],enumerable:true});},zP=(t,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of FP(e))!GP.call(t,n)&&n!==o&&mf(t,n,{get:()=>e[n],enumerable:!(a=jP(e,n))||a.enumerable});return t},UP=t=>zP(mf({},"__esModule",{value:true}),t),mc={};$P(mc,{analyzeMetafile:()=>bE,analyzeMetafileSync:()=>SE,build:()=>_E,buildSync:()=>vE,context:()=>xE,default:()=>TE,formatMessages:()=>yE,formatMessagesSync:()=>IE,initialize:()=>PE,stop:()=>CE,transform:()=>wE,transformSync:()=>kE,version:()=>hE});cw.exports=UP(mc);function Fx(t){let e=a=>{if(a===null)o.write8(0);else if(typeof a=="boolean")o.write8(1),o.write8(+a);else if(typeof a=="number")o.write8(2),o.write32(a|0);else if(typeof a=="string")o.write8(3),o.write(Hn(a));else if(a instanceof Uint8Array)o.write8(4),o.write(a);else if(a instanceof Array){o.write8(5),o.write32(a.length);for(let n of a)e(n);}else {let n=Object.keys(a);o.write8(6),o.write32(n.length);for(let i of n)o.write(Hn(i)),e(a[i]);}},o=new Jx;return o.write32(0),o.write32(t.id<<1|+!t.isRequest),e(t.value),cf(o.buf,o.len-4,0),o.buf.subarray(0,o.len)}function HP(t){let e=()=>{switch(o.read8()){case 0:return null;case 1:return !!o.read8();case 2:return o.read32();case 3:return es(o.read());case 4:return o.read();case 5:{let r=o.read32(),s=[];for(let u=0;u<r;u++)s.push(e());return s}case 6:{let r=o.read32(),s={};for(let u=0;u<r;u++)s[es(o.read())]=e();return s}default:throw new Error("Invalid packet")}},o=new Jx(t),a=o.read32(),n=(a&1)===0;a>>>=1;let i=e();if(o.ptr!==t.length)throw new Error("Invalid packet");return {id:a,isRequest:n,value:i}}var Jx=class{constructor(t=new Uint8Array(1024)){this.buf=t,this.len=0,this.ptr=0;}_write(t){if(this.len+t>this.buf.length){let e=new Uint8Array((this.len+t)*2);e.set(this.buf),this.buf=e;}return this.len+=t,this.len-t}write8(t){let e=this._write(1);this.buf[e]=t;}write32(t){let e=this._write(4);cf(this.buf,t,e);}write(t){let e=this._write(4+t.length);cf(this.buf,t.length,e),this.buf.set(t,e+4);}_read(t){if(this.ptr+t>this.buf.length)throw new Error("Invalid packet");return this.ptr+=t,this.ptr-t}read8(){return this.buf[this._read(1)]}read32(){return Yx(this.buf,this._read(4))}read(){let t=this.read32(),e=new Uint8Array(t),o=this._read(e.length);return e.set(this.buf.subarray(o,o+t)),e}},Hn,es,lf;if(typeof TextEncoder<"u"&&typeof TextDecoder<"u"){let t=new TextEncoder,e=new TextDecoder;Hn=o=>t.encode(o),es=o=>e.decode(o),lf='new TextEncoder().encode("")';}else if(typeof Buffer<"u")Hn=t=>Buffer.from(t),es=t=>{let{buffer:e,byteOffset:o,byteLength:a}=t;return Buffer.from(e,o,a).toString()},lf='Buffer.from("")';else throw new Error("No UTF-8 codec found");if(!(Hn("")instanceof Uint8Array))throw new Error(`Invariant violation: "${lf} instanceof Uint8Array" is incorrectly false
|
|
30
30
|
|
|
31
31
|
This indicates that your JavaScript environment is broken. You cannot use
|
|
32
32
|
esbuild in this environment because esbuild relies on this invariant. This
|
package/dist/cli.mjs
CHANGED
|
@@ -26,7 +26,7 @@ Other options (inherited from gateway):
|
|
|
26
26
|
--tls Enable TLS
|
|
27
27
|
--tls-cert <path> TLS certificate path
|
|
28
28
|
--tls-key <path> TLS key path
|
|
29
|
-
-d, --debug Enable debug mode`,"auth.login.error":"Login failed: {{error}}","auth.interactive.title":"Add Credential","auth.interactive.select_provider":"Select Provider:","auth.interactive.enter_number":"Enter number to select (default: 1)","auth.interactive.no_providers":"No providers available","auth.logout.logging_out":"Logging out from {{provider}}","auth.logout.success":"Logout successful: {{provider}}","auth.logout.not_found":"Credential not found for provider: {{provider}}","auth.logout.error":"Logout failed: {{error}}","pr.command.description":"Checkout GitHub PR and import session","pr.error.not_git_repo":"Current directory is not a Git repository","pr.error.invalid_number":"Invalid PR number: {{number}}","pr.error.checkout_failed":"PR checkout failed","pr.error.gh_not_installed":"Please ensure gh CLI is installed and authenticated","pr.checking_out":"Checking out PR #{{prNumber}}","pr.checkout_success":"PR #{{prNumber}} checked out as branch {{branch}}","pr.added_fork_remote":"Added fork remote: {{remote}}","pr.found_session":"Found easbot session: {{url}}","pr.session_imported":"Session imported: {{sessionId}}","pr.ready":"PR checkout complete!","pr.start_easbot":'Run "easbot" to start the editor (branch: {{branch}})',"pr.error.failed":"PR operation failed: {{error}}","github.command.description":"GitHub Agent management","github.command.install.description":"Install GitHub App","github.command.run.description":"Run GitHub Agent","github.option.provider":"Specify provider","github.option.model":"Specify model","github.option.event":"Mock GitHub event (JSON)","github.option.token":"GitHub Personal Access Token","github.error.not_git_repo":"Current directory is not a Git repository","github.error.parse_remote":"Failed to parse Git remote","github.field.owner":"Owner","github.field.repo":"Repo","github.install.starting":"Installing GitHub App","github.install.step1":"Step 1: Authorize App in browser","github.install.open_url":"Please visit: {{url}}","github.install.waiting":"Waiting for installation to complete...","github.install.installed":"App installed successfully!","github.install.timeout":"Installation timeout, please complete manually and retry","github.install.select_provider":"Select Provider (default: 1):","github.install.select_model":"Select Model (default: 1):","github.install.generating_workflow":"Generating workflow configuration...","github.install.workflow_created":"Workflow file created: {{file}}","github.install.next_steps":"Next Steps:","github.install.step1_hint":"Commit and push the workflow file","github.install.step2_hint":"Add environment variable secrets in {{owner}}/{{repo}} repository settings","github.install.step3_hint":'Comment "/oc" on a GitHub Issue to start the Agent',"github.install.error":"Installation failed: {{error}}","github.run.info":"GitHub Agent run mode requires execution in GitHub Actions"}},Ax=gP;});var fP,of,af,hP,Dx,_P,Rx,xP,w,Lx=$(()=>{k();md();Tx();Mx();fP=()=>{dd("zh-CN"),dd("en-US"),pd("zh-CN",Ex),pd("en-US",Ax);};fP();of=new Map,af=new Map,hP=t=>{if(af.has(t))return af.get(t);let e=/{{\s*(\w+)\s*}}/g,o=[],a;for(;(a=e.exec(t))!==null;){let r=a[1];r&&!o.includes(r)&&o.push(r);}let n=new RegExp("{{\\s*("+o.join("|")+")\\s*}}","g"),i={keys:o,regex:n};return af.set(t,i),i},Dx=(t,e)=>{if(!t||typeof t!="string")return "";if(!e||Object.keys(e).length===0)return t;let{regex:o,keys:a}=hP(t);return a.length===0||!a.some(i=>i in e)?t:t.replace(o,(i,r)=>{let s=e[r];return s==null?"":String(s)})},_P=t=>t&&Vr.locales.includes(t)?t:Vr.defaultLocale,Rx=t=>{if(!of.has(t)){let{resources:e}=dd(t);of.set(t,e);}return of.get(t)},xP=(t,e={})=>{let o=_P(e.locale),n=Rx(o)?.translation[t];if(n&&typeof n=="string"){let i=Dx(n,e.vars);return i!=null?String(i):String(t)}if(o!==Vr.defaultLocale){let r=Rx(Vr.defaultLocale)?.translation[t];if(r&&typeof r=="string"){let s=Dx(r,e.vars);return s!=null?String(s):String(t)}}return String(e.fallback??t)},w=xP;});var Ox=$(()=>{k();md();});var gt=$(()=>{k();md();Lx();Ox();});var Bx={};Be(Bx,{default:()=>rf});var rf,nf=$(()=>{rf={name:"@easbot/agent",version:"0.1.12",description:"Core Agent for the easbot monorepo ecosystem",type:"module",main:"dist/index.cjs",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.cjs"},"./package.json":"./package.json"},bin:{easbot:"./dist/cli.mjs"},scripts:{dev:"cross-env NODE_ENV=development tsx src/cli.ts -- tui",start:"cross-env NODE_ENV=production node dist/cli.mjs tui --new",build:"tsup --env.NODE_ENV production",test:"vitest","test:run":"vitest run","test:ui":"vitest --ui","test:watch":"vitest --watch","test:coverage":"vitest run --coverage","test:unit":"vitest run --config ./vitest.unit.config.ts","test:unit:watch":"vitest --config ./vitest.unit.config.ts","test:integration":"vitest run --config ./vitest.integration.config.ts","test:integration:watch":"vitest --config ./vitest.integration.config.ts","test:e2e":"vitest run --config ./vitest.e2e.config.ts","test:e2e:watch":"vitest --config ./vitest.e2e.config.ts",lint:"biome check .","lint:fix":"biome check --write .","lint:fix:unsafe":"biome check --write --unsafe ./src","lint:report":"biome check --reporter=summary .",format:"biome format .","format:fix":"biome format --write .","type-check":"tsc --noEmit",clean:"npx rimraf dist node_modules",prepare:"echo 'agent: Bun environment ready for CLI usage'","publish:npm":"bash scripts/publish.sh","publish:npm:win":"powershell -ExecutionPolicy Bypass -File scripts/publish.ps1"},keywords:["ai","agent","eas","bot","automation"],author:"houjallen",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/houjallen/easbot.git",directory:"packages/agent"},homepage:"https://github.com/houjallen/easbot/tree/main/packages/agent#readme",bugs:{url:"https://github.com/houjallen/easbot/issues"},files:["dist","README.md","README.en.md","LICENSE"],dependencies:{"@agentclientprotocol/sdk":"^0.18.0","@ai-sdk/amazon-bedrock":"4.0.82","@ai-sdk/anthropic":"3.0.63","@ai-sdk/alibaba":"^2.0.0-beta.33","@ai-sdk/azure":"3.0.49","@ai-sdk/cerebras":"^2.0.41","@ai-sdk/cohere":"3.0.27","@ai-sdk/deepinfra":"^2.0.41","@ai-sdk/gateway":"^3.0.78","@ai-sdk/google":"3.0.52","@ai-sdk/google-vertex":"^4.0.93","@ai-sdk/groq":"3.0.31","@ai-sdk/mistral":"3.0.27","@ai-sdk/openai":"3.0.48","@ai-sdk/openai-compatible":"2.0.37","@ai-sdk/perplexity":"^3.0.26","@ai-sdk/provider":"^3.0.8","@ai-sdk/provider-utils":"^4.0.21","@ai-sdk/togetherai":"^2.0.41","@ai-sdk/vercel":"^2.0.39","@ai-sdk/xai":"^3.0.73","@aws-sdk/credential-providers":"^3.1014.0","@clack/prompts":"^1.1.0","@easbot/plugin":"workspace:*","@easbot/codebase":"workspace:*","@easbot/memory":"workspace:*","@easbot/note":"workspace:*","@easbot/types":"workspace:*","@easbot/tui":"workspace:*","@easbot/utils":"workspace:*","@easbot/sdk":"workspace:*","@easbot/local-model-sdk":"workspace:*","@easbot/ollama-sdk":"workspace:*","@easbot/gateway":"workspace:*","@hono/node-server":"^2.0.0","@hono/node-ws":"^1.3.0","@hono/standard-validator":"^0.2.2","@hono/zod-validator":"^0.7.6","@mariozechner/pi-agent-core":"0.62.0","@mariozechner/pi-ai":"0.62.0","@mariozechner/pi-coding-agent":"0.62.0","@modelcontextprotocol/sdk":"^1.27.1","@openrouter/ai-sdk-provider":"^2.3.3","@parcel/watcher":"^2.5.6","@sinclair/typebox":"0.34.48","@solid-primitives/event-bus":"1.1.3","@solid-primitives/scheduled":"1.5.3","@standard-schema/spec":"1.1.0","@types/semver":"^7.7.1","@wasmer/wasi":"^1.2.2","@types/cross-spawn":"^6.0.6","@zip.js/zip.js":"^2.8.23",ai:"^6.0.136","ai-gateway-provider":"^3.1.2",ajv:"^8.18.0",axios:"^1.15.2","bash-parser":"^0.5.0","bonjour-service":"^1.3.0",chalk:"^5.6.2",clipboardy:"^5.3.1",commander:"^14.0.3","cross-spawn":"^7.0.6","decimal.js":"^10.6.0",diff:"^8.0.4","drizzle-orm":"^0.45.2",fuzzysort:"^3.1.0","fast-check":"^4.6.0","gitlab-ai-provider":"^6.6.0",glob:"^13.0.6","gray-matter":"^4.0.3",hono:"^4.12.14","hono-openapi":"^1.3.0",ignore:"^7.0.5",jiti:"^2.6.1","jsonc-parser":"^3.3.1","lru-cache":"^11.3.0",minimatch:"^10.2.4","node-gyp":"^12.3.0","node-html-parser":"^7.1.0","node-pty":"^1.1.0",open:"^11.0.0",remeda:"^2.33.6",semver:"^7.7.4","tree-sitter-bash":"^0.25.1",turndown:"^7.2.2",ulid:"^3.0.2","vscode-jsonrpc":"^8.2.1",which:"^6.0.1","xdg-basedir":"^5.1.0",zod:"^4.3.6",ws:"^8.20.0","jieba-wasm":"^2.4.0","vscode-languageserver-types":"3.17.5","why-is-node-running":"^3.2.2","zod-to-json-schema":"^3.25.1"},devDependencies:{"@actions/core":"^3.0.0","@actions/github":"^9.0.0","@octokit/graphql":"^9.0.3","@octokit/rest":"^22.0.1","@octokit/webhooks-types":"^7.6.1","@types/node":"^22.17.0","@types/which":"^3.0.4","@types/ws":"^8.18.1","@types/turndown":"^5.0.6","@vitest/coverage-v8":"^4.1.1",dotenv:"^17.3.1",esbuild:"^0.27.4","esbuild-plugin-alias":"^0.2.1",tsup:"^8.5.1",tsx:"^4.21.0",typescript:"^6.0.2",vitest:"^4.1.1"}};});var Kr={};Be(Kr,{Global:()=>de});var gd,sf,TP,AP,MP,de,kt=$(()=>{k();nf();gd="easbot",sf=Oe__default.join(xdgData,gd),TP=Oe__default.join(xdgCache,gd),AP=Oe__default.join(xdgConfig,gd),MP=Oe__default.join(xdgState,gd);(d=>{d.Path={get home(){return process.env.EASBOT_TEST_HOME||Ud.homedir()},data:sf,bin:Oe__default.join(sf,"bin"),log:Oe__default.join(sf,"log"),cache:TP,config:AP,state:MP};let e=null,o=null;async function a(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{let c=await Promise.resolve().then(()=>(nf(),Bx));e=c.default?.version||c.version||"local";}catch{e="local";}return e||"local"}function n(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{e=rf.version||"local";}catch{e="local";}return e||"local"}d.getVersion=n;function i(){if(o)return o;if(process.env.EASBOT_CHANNEL)return o=process.env.EASBOT_CHANNEL,o;let c=n();return c==="local"||c.includes("dev")?o="local":c.includes("beta")||c.includes("alpha")?o="preview":o="latest",o||"local"}d.getChannel=i;function r(){return i()==="local"}d.isLocal=r;function s(){return i()==="preview"}d.isPreview=s;let u=false,l=null;async function p(){if(!u)return l||(l=(async()=>{await a(),await Promise.all([mkdir(d.Path.data,{recursive:true}),mkdir(d.Path.config,{recursive:true}),mkdir(d.Path.state,{recursive:true}),mkdir(d.Path.log,{recursive:true}),mkdir(d.Path.bin,{recursive:true}),mkdir(d.Path.cache,{recursive:true})]).then(()=>{process.env.EASBOT_DATA_PATH=d.Path.data,process.env.EASBOT_CONFIG_PATH=d.Path.config,process.env.EASBOT_STATE_PATH=d.Path.state,process.env.EASBOT_LOG_PATH=d.Path.log,process.env.EASBOT_BIN_PATH=d.Path.bin,process.env.EASBOT_CACHE_PATH=d.Path.cache;});let c="1",m=Oe__default.join(d.Path.cache,"version");if(await readFile(m,"utf-8").catch(()=>"0")!==c){try{let _=await readdir(d.Path.cache);await Promise.all(_.map(v=>rm$1(Oe__default.join(d.Path.cache,v),{recursive:!0,force:!0})));}catch{}await writeFile(m,c);}u=true;})(),l)}d.init=p;})(de||(de={}));});var Se,Ht=$(()=>{k();le();(n=>{F.create({service:"event"});let e=new Map;function o(i,r){let s={type:i,properties:r};return e.set(i,s),s}n.define=o;function a(){return Z.discriminatedUnion("type",e.entries().map(([i,r])=>Z.object({type:Z.literal(i),properties:r.properties}).meta({ref:"Event."+r.type})).toArray()).meta({ref:"Event"})}n.payloads=a;})(Se||(Se={}));});function ii(t={}){let e=t.port??3e3,o=t.hostname??"0.0.0.0",a=new Hono({strict:true,getPath:r=>{try{return new URL(r.url).pathname}catch{return r.url}}});if(t.onError?a.onError(t.onError):a.onError((r,s)=>(Jr.error("Server error",{error:r.message,stack:r.stack}),r instanceof HTTPException?r.getResponse():s.json({error:"Internal Server Error",message:r.message},500))),t.onNotFound?a.notFound(t.onNotFound):a.notFound(r=>r.json({error:"Not Found",path:r.req.path},404)),!t.websockets&&t.cors&&a.use(cors(typeof t.cors=="boolean"?{origin:"*"}:t.cors)),a.use(logger((r,...s)=>Jr.info(r,s))),!t.websockets&&t.secureHeaders&&a.use(secureHeaders()),!t.websockets&&t.compression&&a.use(compress({encoding:"gzip"})),!t.websockets&&t.timeout&&a.use(timeout(t.timeout)),t.middlewares)for(let r of t.middlewares)r.path?a.use(r.path,r.handler):a.use(r.handler);if(t.routes)for(let r of t.routes){let s=r.middlewares||[],u=r.method.toUpperCase();r.validation?a.on(u,r.path,zValidator("json",r.validation),...s,r.handler):a.on(u,r.path,...s,r.handler);}t.rpc&&a.post("/rpc/:method",async r=>{let s=r.req.param("method"),u=t.rpc?.[s];if(!u)return r.json({error:"RPC method not found"},404);try{let l=await r.req.json(),p=await u(l,r);return r.json({result:p})}catch(l){return Jr.error("RPC error",{method:s,error:l.message}),r.json({error:"RPC execution failed",message:l.message},500)}}),t.fetch&&a.all("*",async r=>await t.fetch(r.req.raw));let n=null,i={url:new URL(`http://${o}:${e}`),port:e,hostname:o,hono:a,async stop(r=false){return n?new Promise((s,u)=>{r&&n.closeAllConnections?.(),n.close(l=>{l?(Jr.error("Error closing server",{error:l.message}),u(l)):(n=null,Jr.info(`Server on port ${e} stopped`),s());}),setTimeout(()=>{Jr.warn(`Server shutdown timeout on port ${e}`),n=null,s();},5e3);}):Promise.resolve()},get raw(){return n||void 0}};return n=serve({fetch:a.fetch,port:e,hostname:o}),Jr.info(`Server running on http://${o}:${e}`),i}function qx(t){return ii({rpc:t,port:3e3})}function Nx(t,e={}){return ii({...e,routes:t})}function jx(t,e={}){return ii({...e,websockets:t})}function Fx(t,e={}){let o=Object.entries(t).map(([a,n])=>({method:"get",path:`/stream/${a}`,handler:i=>streamSSE(i,async r=>{for await(let s of n(i))await r.writeSSE(s);})}));return ii({...e,routes:o,streaming:true})}var Jr,fd=$(()=>{k();le();Jr=F.create({service:"server"});});var fu,lf=$(()=>{k();le();(n=>{let t=F.create({service:"pkg-registry"});function e(){return process.platform==="win32"?"cmd":"npm"}async function o(i,r,s){return new Promise(u=>{let l=process.platform==="win32"?["/c","npm","view",i,r]:["view",i,r],p=spawn(e(),l,{cwd:s,env:{...process.env}}),d="",c="";p.stdout?.on("data",m=>{d+=m.toString();}),p.stderr?.on("data",m=>{c+=m.toString();}),p.on("close",m=>{m!==0?(t.warn("npm view failed",{pkg:i,field:r,code:m,stderr:c}),u(null)):u(d.trim());}),p.on("error",()=>{t.error("npm view error",{pkg:i,field:r,error:"unknown"}),u(null);});})}n.info=o;async function a(i,r,s){let u=await o(i,"version",s);return u?/[\s^~*xX<>|=]/.test(r)?!hd.satisfies(u,r):hd.compare(r,u)===-1:(t.warn("Failed to resolve latest version, using cached",{pkg:i,cachedVersion:r}),false)}n.isOutdated=a;})(fu||(fu={}));});var hc=XC((rz,dw)=>{k();var gf=Object.defineProperty,UP=Object.getOwnPropertyDescriptor,zP=Object.getOwnPropertyNames,HP=Object.prototype.hasOwnProperty,QP=(t,e)=>{for(var o in e)gf(t,o,{get:e[o],enumerable:true});},WP=(t,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of zP(e))!HP.call(t,n)&&n!==o&&gf(t,n,{get:()=>e[n],enumerable:!(a=UP(e,n))||a.enumerable});return t},VP=t=>WP(gf({},"__esModule",{value:true}),t),gc={};QP(gc,{analyzeMetafile:()=>SE,analyzeMetafileSync:()=>TE,build:()=>bE,buildSync:()=>CE,context:()=>vE,default:()=>RE,formatMessages:()=>IE,formatMessagesSync:()=>EE,initialize:()=>ME,stop:()=>AE,transform:()=>kE,transformSync:()=>PE,version:()=>yE});dw.exports=VP(gc);function $x(t){let e=a=>{if(a===null)o.write8(0);else if(typeof a=="boolean")o.write8(1),o.write8(+a);else if(typeof a=="number")o.write8(2),o.write32(a|0);else if(typeof a=="string")o.write8(3),o.write(Qn(a));else if(a instanceof Uint8Array)o.write8(4),o.write(a);else if(a instanceof Array){o.write8(5),o.write32(a.length);for(let n of a)e(n);}else {let n=Object.keys(a);o.write8(6),o.write32(n.length);for(let i of n)o.write(Qn(i)),e(a[i]);}},o=new Xx;return o.write32(0),o.write32(t.id<<1|+!t.isRequest),e(t.value),pf(o.buf,o.len-4,0),o.buf.subarray(0,o.len)}function KP(t){let e=()=>{switch(o.read8()){case 0:return null;case 1:return !!o.read8();case 2:return o.read32();case 3:return ts(o.read());case 4:return o.read();case 5:{let r=o.read32(),s=[];for(let u=0;u<r;u++)s.push(e());return s}case 6:{let r=o.read32(),s={};for(let u=0;u<r;u++)s[ts(o.read())]=e();return s}default:throw new Error("Invalid packet")}},o=new Xx(t),a=o.read32(),n=(a&1)===0;a>>>=1;let i=e();if(o.ptr!==t.length)throw new Error("Invalid packet");return {id:a,isRequest:n,value:i}}var Xx=class{constructor(t=new Uint8Array(1024)){this.buf=t,this.len=0,this.ptr=0;}_write(t){if(this.len+t>this.buf.length){let e=new Uint8Array((this.len+t)*2);e.set(this.buf),this.buf=e;}return this.len+=t,this.len-t}write8(t){let e=this._write(1);this.buf[e]=t;}write32(t){let e=this._write(4);pf(this.buf,t,e);}write(t){let e=this._write(4+t.length);pf(this.buf,t.length,e),this.buf.set(t,e+4);}_read(t){if(this.ptr+t>this.buf.length)throw new Error("Invalid packet");return this.ptr+=t,this.ptr-t}read8(){return this.buf[this._read(1)]}read32(){return Zx(this.buf,this._read(4))}read(){let t=this.read32(),e=new Uint8Array(t),o=this._read(e.length);return e.set(this.buf.subarray(o,o+t)),e}},Qn,ts,cf;if(typeof TextEncoder<"u"&&typeof TextDecoder<"u"){let t=new TextEncoder,e=new TextDecoder;Qn=o=>t.encode(o),ts=o=>e.decode(o),cf='new TextEncoder().encode("")';}else if(typeof Buffer<"u")Qn=t=>Buffer.from(t),ts=t=>{let{buffer:e,byteOffset:o,byteLength:a}=t;return Buffer.from(e,o,a).toString()},cf='Buffer.from("")';else throw new Error("No UTF-8 codec found");if(!(Qn("")instanceof Uint8Array))throw new Error(`Invariant violation: "${cf} instanceof Uint8Array" is incorrectly false
|
|
29
|
+
-d, --debug Enable debug mode`,"auth.login.error":"Login failed: {{error}}","auth.interactive.title":"Add Credential","auth.interactive.select_provider":"Select Provider:","auth.interactive.enter_number":"Enter number to select (default: 1)","auth.interactive.no_providers":"No providers available","auth.logout.logging_out":"Logging out from {{provider}}","auth.logout.success":"Logout successful: {{provider}}","auth.logout.not_found":"Credential not found for provider: {{provider}}","auth.logout.error":"Logout failed: {{error}}","pr.command.description":"Checkout GitHub PR and import session","pr.error.not_git_repo":"Current directory is not a Git repository","pr.error.invalid_number":"Invalid PR number: {{number}}","pr.error.checkout_failed":"PR checkout failed","pr.error.gh_not_installed":"Please ensure gh CLI is installed and authenticated","pr.checking_out":"Checking out PR #{{prNumber}}","pr.checkout_success":"PR #{{prNumber}} checked out as branch {{branch}}","pr.added_fork_remote":"Added fork remote: {{remote}}","pr.found_session":"Found easbot session: {{url}}","pr.session_imported":"Session imported: {{sessionId}}","pr.ready":"PR checkout complete!","pr.start_easbot":'Run "easbot" to start the editor (branch: {{branch}})',"pr.error.failed":"PR operation failed: {{error}}","github.command.description":"GitHub Agent management","github.command.install.description":"Install GitHub App","github.command.run.description":"Run GitHub Agent","github.option.provider":"Specify provider","github.option.model":"Specify model","github.option.event":"Mock GitHub event (JSON)","github.option.token":"GitHub Personal Access Token","github.error.not_git_repo":"Current directory is not a Git repository","github.error.parse_remote":"Failed to parse Git remote","github.field.owner":"Owner","github.field.repo":"Repo","github.install.starting":"Installing GitHub App","github.install.step1":"Step 1: Authorize App in browser","github.install.open_url":"Please visit: {{url}}","github.install.waiting":"Waiting for installation to complete...","github.install.installed":"App installed successfully!","github.install.timeout":"Installation timeout, please complete manually and retry","github.install.select_provider":"Select Provider (default: 1):","github.install.select_model":"Select Model (default: 1):","github.install.generating_workflow":"Generating workflow configuration...","github.install.workflow_created":"Workflow file created: {{file}}","github.install.next_steps":"Next Steps:","github.install.step1_hint":"Commit and push the workflow file","github.install.step2_hint":"Add environment variable secrets in {{owner}}/{{repo}} repository settings","github.install.step3_hint":'Comment "/oc" on a GitHub Issue to start the Agent',"github.install.error":"Installation failed: {{error}}","github.run.info":"GitHub Agent run mode requires execution in GitHub Actions"}},Ax=gP;});var fP,of,af,hP,Dx,_P,Rx,xP,w,Lx=$(()=>{k();md();Tx();Mx();fP=()=>{dd("zh-CN"),dd("en-US"),pd("zh-CN",Ex),pd("en-US",Ax);};fP();of=new Map,af=new Map,hP=t=>{if(af.has(t))return af.get(t);let e=/{{\s*(\w+)\s*}}/g,o=[],a;for(;(a=e.exec(t))!==null;){let r=a[1];r&&!o.includes(r)&&o.push(r);}let n=new RegExp("{{\\s*("+o.join("|")+")\\s*}}","g"),i={keys:o,regex:n};return af.set(t,i),i},Dx=(t,e)=>{if(!t||typeof t!="string")return "";if(!e||Object.keys(e).length===0)return t;let{regex:o,keys:a}=hP(t);return a.length===0||!a.some(i=>i in e)?t:t.replace(o,(i,r)=>{let s=e[r];return s==null?"":String(s)})},_P=t=>t&&Vr.locales.includes(t)?t:Vr.defaultLocale,Rx=t=>{if(!of.has(t)){let{resources:e}=dd(t);of.set(t,e);}return of.get(t)},xP=(t,e={})=>{let o=_P(e.locale),n=Rx(o)?.translation[t];if(n&&typeof n=="string"){let i=Dx(n,e.vars);return i!=null?String(i):String(t)}if(o!==Vr.defaultLocale){let r=Rx(Vr.defaultLocale)?.translation[t];if(r&&typeof r=="string"){let s=Dx(r,e.vars);return s!=null?String(s):String(t)}}return String(e.fallback??t)},w=xP;});var Ox=$(()=>{k();md();});var gt=$(()=>{k();md();Lx();Ox();});var Bx={};Be(Bx,{default:()=>rf});var rf,nf=$(()=>{rf={name:"@easbot/agent",version:"0.1.13",description:"Core Agent for the easbot monorepo ecosystem",type:"module",main:"dist/index.cjs",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.cjs"},"./package.json":"./package.json"},bin:{easbot:"./dist/cli.mjs"},scripts:{dev:"cross-env NODE_ENV=development tsx src/cli.ts -- tui",start:"cross-env NODE_ENV=production node dist/cli.mjs tui --new",build:"tsup --env.NODE_ENV production",test:"vitest","test:run":"vitest run","test:ui":"vitest --ui","test:watch":"vitest --watch","test:coverage":"vitest run --coverage","test:unit":"vitest run --config ./vitest.unit.config.ts","test:unit:watch":"vitest --config ./vitest.unit.config.ts","test:integration":"vitest run --config ./vitest.integration.config.ts","test:integration:watch":"vitest --config ./vitest.integration.config.ts","test:e2e":"vitest run --config ./vitest.e2e.config.ts","test:e2e:watch":"vitest --config ./vitest.e2e.config.ts",lint:"biome check .","lint:fix":"biome check --write .","lint:fix:unsafe":"biome check --write --unsafe ./src","lint:report":"biome check --reporter=summary .",format:"biome format .","format:fix":"biome format --write .","type-check":"tsc --noEmit",clean:"npx rimraf dist node_modules",prepare:"echo 'agent: Bun environment ready for CLI usage'","publish:npm":"bash scripts/publish.sh","publish:npm:win":"powershell -ExecutionPolicy Bypass -File scripts/publish.ps1"},keywords:["ai","agent","eas","bot","automation"],author:"houjallen",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/houjallen/easbot.git",directory:"packages/agent"},homepage:"https://github.com/houjallen/easbot/tree/main/packages/agent#readme",bugs:{url:"https://github.com/houjallen/easbot/issues"},files:["dist","README.md","README.en.md","LICENSE"],dependencies:{"@agentclientprotocol/sdk":"^0.18.0","@ai-sdk/amazon-bedrock":"4.0.82","@ai-sdk/anthropic":"3.0.63","@ai-sdk/alibaba":"^2.0.0-beta.33","@ai-sdk/azure":"3.0.49","@ai-sdk/cerebras":"^2.0.41","@ai-sdk/cohere":"3.0.27","@ai-sdk/deepinfra":"^2.0.41","@ai-sdk/gateway":"^3.0.78","@ai-sdk/google":"3.0.52","@ai-sdk/google-vertex":"^4.0.93","@ai-sdk/groq":"3.0.31","@ai-sdk/mistral":"3.0.27","@ai-sdk/openai":"3.0.48","@ai-sdk/openai-compatible":"2.0.37","@ai-sdk/perplexity":"^3.0.26","@ai-sdk/provider":"^3.0.8","@ai-sdk/provider-utils":"^4.0.21","@ai-sdk/togetherai":"^2.0.41","@ai-sdk/vercel":"^2.0.39","@ai-sdk/xai":"^3.0.73","@aws-sdk/credential-providers":"^3.1014.0","@clack/prompts":"^1.1.0","@easbot/plugin":"workspace:*","@easbot/codebase":"workspace:*","@easbot/memory":"workspace:*","@easbot/note":"workspace:*","@easbot/types":"workspace:*","@easbot/tui":"workspace:*","@easbot/utils":"workspace:*","@easbot/sdk":"workspace:*","@easbot/local-model-sdk":"workspace:*","@easbot/ollama-sdk":"workspace:*","@easbot/gateway":"workspace:*","@hono/node-server":"^2.0.0","@hono/node-ws":"^1.3.0","@hono/standard-validator":"^0.2.2","@hono/zod-validator":"^0.7.6","@mariozechner/pi-agent-core":"0.62.0","@mariozechner/pi-ai":"0.62.0","@mariozechner/pi-coding-agent":"0.62.0","@modelcontextprotocol/sdk":"^1.27.1","@openrouter/ai-sdk-provider":"^2.3.3","@parcel/watcher":"^2.5.6","@sinclair/typebox":"0.34.48","@solid-primitives/event-bus":"1.1.3","@solid-primitives/scheduled":"1.5.3","@standard-schema/spec":"1.1.0","@types/semver":"^7.7.1","@wasmer/wasi":"^1.2.2","@types/cross-spawn":"^6.0.6","@zip.js/zip.js":"^2.8.23",ai:"^6.0.136","ai-gateway-provider":"^3.1.2",ajv:"^8.18.0",axios:"^1.15.2","bash-parser":"^0.5.0","bonjour-service":"^1.3.0",chalk:"^5.6.2",clipboardy:"^5.3.1",commander:"^14.0.3","cross-spawn":"^7.0.6","decimal.js":"^10.6.0",diff:"^8.0.4","drizzle-orm":"^0.45.2",fuzzysort:"^3.1.0","fast-check":"^4.6.0","gitlab-ai-provider":"^6.6.0",glob:"^13.0.6","gray-matter":"^4.0.3",hono:"^4.12.14","hono-openapi":"^1.3.0",ignore:"^7.0.5",jiti:"^2.6.1","jsonc-parser":"^3.3.1","lru-cache":"^11.3.0",minimatch:"^10.2.4","node-gyp":"^12.3.0","node-html-parser":"^7.1.0","node-pty":"^1.1.0",open:"^11.0.0",remeda:"^2.33.6",semver:"^7.7.4","tree-sitter-bash":"^0.25.1",turndown:"^7.2.2",ulid:"^3.0.2","vscode-jsonrpc":"^8.2.1",which:"^6.0.1","xdg-basedir":"^5.1.0",zod:"^4.3.6",ws:"^8.20.0","jieba-wasm":"^2.4.0","vscode-languageserver-types":"3.17.5","why-is-node-running":"^3.2.2","zod-to-json-schema":"^3.25.1"},devDependencies:{"@actions/core":"^3.0.0","@actions/github":"^9.0.0","@octokit/graphql":"^9.0.3","@octokit/rest":"^22.0.1","@octokit/webhooks-types":"^7.6.1","@types/node":"^22.17.0","@types/which":"^3.0.4","@types/ws":"^8.18.1","@types/turndown":"^5.0.6","@vitest/coverage-v8":"^4.1.1",dotenv:"^17.3.1",esbuild:"^0.27.4","esbuild-plugin-alias":"^0.2.1",tsup:"^8.5.1",tsx:"^4.21.0",typescript:"^6.0.2",vitest:"^4.1.1"}};});var Kr={};Be(Kr,{Global:()=>de});var gd,sf,TP,AP,MP,de,kt=$(()=>{k();nf();gd="easbot",sf=Oe__default.join(xdgData,gd),TP=Oe__default.join(xdgCache,gd),AP=Oe__default.join(xdgConfig,gd),MP=Oe__default.join(xdgState,gd);(d=>{d.Path={get home(){return process.env.EASBOT_TEST_HOME||Ud.homedir()},data:sf,bin:Oe__default.join(sf,"bin"),log:Oe__default.join(sf,"log"),cache:TP,config:AP,state:MP};let e=null,o=null;async function a(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{let c=await Promise.resolve().then(()=>(nf(),Bx));e=c.default?.version||c.version||"local";}catch{e="local";}return e||"local"}function n(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{e=rf.version||"local";}catch{e="local";}return e||"local"}d.getVersion=n;function i(){if(o)return o;if(process.env.EASBOT_CHANNEL)return o=process.env.EASBOT_CHANNEL,o;let c=n();return c==="local"||c.includes("dev")?o="local":c.includes("beta")||c.includes("alpha")?o="preview":o="latest",o||"local"}d.getChannel=i;function r(){return i()==="local"}d.isLocal=r;function s(){return i()==="preview"}d.isPreview=s;let u=false,l=null;async function p(){if(!u)return l||(l=(async()=>{await a(),await Promise.all([mkdir(d.Path.data,{recursive:true}),mkdir(d.Path.config,{recursive:true}),mkdir(d.Path.state,{recursive:true}),mkdir(d.Path.log,{recursive:true}),mkdir(d.Path.bin,{recursive:true}),mkdir(d.Path.cache,{recursive:true})]).then(()=>{process.env.EASBOT_DATA_PATH=d.Path.data,process.env.EASBOT_CONFIG_PATH=d.Path.config,process.env.EASBOT_STATE_PATH=d.Path.state,process.env.EASBOT_LOG_PATH=d.Path.log,process.env.EASBOT_BIN_PATH=d.Path.bin,process.env.EASBOT_CACHE_PATH=d.Path.cache;});let c="1",m=Oe__default.join(d.Path.cache,"version");if(await readFile(m,"utf-8").catch(()=>"0")!==c){try{let _=await readdir(d.Path.cache);await Promise.all(_.map(v=>rm$1(Oe__default.join(d.Path.cache,v),{recursive:!0,force:!0})));}catch{}await writeFile(m,c);}u=true;})(),l)}d.init=p;})(de||(de={}));});var Se,Ht=$(()=>{k();le();(n=>{F.create({service:"event"});let e=new Map;function o(i,r){let s={type:i,properties:r};return e.set(i,s),s}n.define=o;function a(){return Z.discriminatedUnion("type",e.entries().map(([i,r])=>Z.object({type:Z.literal(i),properties:r.properties}).meta({ref:"Event."+r.type})).toArray()).meta({ref:"Event"})}n.payloads=a;})(Se||(Se={}));});function ii(t={}){let e=t.port??3e3,o=t.hostname??"0.0.0.0",a=new Hono({strict:true,getPath:r=>{try{return new URL(r.url).pathname}catch{return r.url}}});if(t.onError?a.onError(t.onError):a.onError((r,s)=>(Jr.error("Server error",{error:r.message,stack:r.stack}),r instanceof HTTPException?r.getResponse():s.json({error:"Internal Server Error",message:r.message},500))),t.onNotFound?a.notFound(t.onNotFound):a.notFound(r=>r.json({error:"Not Found",path:r.req.path},404)),!t.websockets&&t.cors&&a.use(cors(typeof t.cors=="boolean"?{origin:"*"}:t.cors)),a.use(logger((r,...s)=>Jr.info(r,s))),!t.websockets&&t.secureHeaders&&a.use(secureHeaders()),!t.websockets&&t.compression&&a.use(compress({encoding:"gzip"})),!t.websockets&&t.timeout&&a.use(timeout(t.timeout)),t.middlewares)for(let r of t.middlewares)r.path?a.use(r.path,r.handler):a.use(r.handler);if(t.routes)for(let r of t.routes){let s=r.middlewares||[],u=r.method.toUpperCase();r.validation?a.on(u,r.path,zValidator("json",r.validation),...s,r.handler):a.on(u,r.path,...s,r.handler);}t.rpc&&a.post("/rpc/:method",async r=>{let s=r.req.param("method"),u=t.rpc?.[s];if(!u)return r.json({error:"RPC method not found"},404);try{let l=await r.req.json(),p=await u(l,r);return r.json({result:p})}catch(l){return Jr.error("RPC error",{method:s,error:l.message}),r.json({error:"RPC execution failed",message:l.message},500)}}),t.fetch&&a.all("*",async r=>await t.fetch(r.req.raw));let n=null,i={url:new URL(`http://${o}:${e}`),port:e,hostname:o,hono:a,async stop(r=false){return n?new Promise((s,u)=>{r&&n.closeAllConnections?.(),n.close(l=>{l?(Jr.error("Error closing server",{error:l.message}),u(l)):(n=null,Jr.info(`Server on port ${e} stopped`),s());}),setTimeout(()=>{Jr.warn(`Server shutdown timeout on port ${e}`),n=null,s();},5e3);}):Promise.resolve()},get raw(){return n||void 0}};return n=serve({fetch:a.fetch,port:e,hostname:o}),Jr.info(`Server running on http://${o}:${e}`),i}function qx(t){return ii({rpc:t,port:3e3})}function Nx(t,e={}){return ii({...e,routes:t})}function jx(t,e={}){return ii({...e,websockets:t})}function Fx(t,e={}){let o=Object.entries(t).map(([a,n])=>({method:"get",path:`/stream/${a}`,handler:i=>streamSSE(i,async r=>{for await(let s of n(i))await r.writeSSE(s);})}));return ii({...e,routes:o,streaming:true})}var Jr,fd=$(()=>{k();le();Jr=F.create({service:"server"});});var fu,lf=$(()=>{k();le();(n=>{let t=F.create({service:"pkg-registry"});function e(){return process.platform==="win32"?"cmd":"npm"}async function o(i,r,s){return new Promise(u=>{let l=process.platform==="win32"?["/c","npm","view",i,r]:["view",i,r],p=spawn(e(),l,{cwd:s,env:{...process.env}}),d="",c="";p.stdout?.on("data",m=>{d+=m.toString();}),p.stderr?.on("data",m=>{c+=m.toString();}),p.on("close",m=>{m!==0?(t.warn("npm view failed",{pkg:i,field:r,code:m,stderr:c}),u(null)):u(d.trim());}),p.on("error",()=>{t.error("npm view error",{pkg:i,field:r,error:"unknown"}),u(null);});})}n.info=o;async function a(i,r,s){let u=await o(i,"version",s);return u?/[\s^~*xX<>|=]/.test(r)?!hd.satisfies(u,r):hd.compare(r,u)===-1:(t.warn("Failed to resolve latest version, using cached",{pkg:i,cachedVersion:r}),false)}n.isOutdated=a;})(fu||(fu={}));});var hc=XC((rz,dw)=>{k();var gf=Object.defineProperty,UP=Object.getOwnPropertyDescriptor,zP=Object.getOwnPropertyNames,HP=Object.prototype.hasOwnProperty,QP=(t,e)=>{for(var o in e)gf(t,o,{get:e[o],enumerable:true});},WP=(t,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of zP(e))!HP.call(t,n)&&n!==o&&gf(t,n,{get:()=>e[n],enumerable:!(a=UP(e,n))||a.enumerable});return t},VP=t=>WP(gf({},"__esModule",{value:true}),t),gc={};QP(gc,{analyzeMetafile:()=>SE,analyzeMetafileSync:()=>TE,build:()=>bE,buildSync:()=>CE,context:()=>vE,default:()=>RE,formatMessages:()=>IE,formatMessagesSync:()=>EE,initialize:()=>ME,stop:()=>AE,transform:()=>kE,transformSync:()=>PE,version:()=>yE});dw.exports=VP(gc);function $x(t){let e=a=>{if(a===null)o.write8(0);else if(typeof a=="boolean")o.write8(1),o.write8(+a);else if(typeof a=="number")o.write8(2),o.write32(a|0);else if(typeof a=="string")o.write8(3),o.write(Qn(a));else if(a instanceof Uint8Array)o.write8(4),o.write(a);else if(a instanceof Array){o.write8(5),o.write32(a.length);for(let n of a)e(n);}else {let n=Object.keys(a);o.write8(6),o.write32(n.length);for(let i of n)o.write(Qn(i)),e(a[i]);}},o=new Xx;return o.write32(0),o.write32(t.id<<1|+!t.isRequest),e(t.value),pf(o.buf,o.len-4,0),o.buf.subarray(0,o.len)}function KP(t){let e=()=>{switch(o.read8()){case 0:return null;case 1:return !!o.read8();case 2:return o.read32();case 3:return ts(o.read());case 4:return o.read();case 5:{let r=o.read32(),s=[];for(let u=0;u<r;u++)s.push(e());return s}case 6:{let r=o.read32(),s={};for(let u=0;u<r;u++)s[ts(o.read())]=e();return s}default:throw new Error("Invalid packet")}},o=new Xx(t),a=o.read32(),n=(a&1)===0;a>>>=1;let i=e();if(o.ptr!==t.length)throw new Error("Invalid packet");return {id:a,isRequest:n,value:i}}var Xx=class{constructor(t=new Uint8Array(1024)){this.buf=t,this.len=0,this.ptr=0;}_write(t){if(this.len+t>this.buf.length){let e=new Uint8Array((this.len+t)*2);e.set(this.buf),this.buf=e;}return this.len+=t,this.len-t}write8(t){let e=this._write(1);this.buf[e]=t;}write32(t){let e=this._write(4);pf(this.buf,t,e);}write(t){let e=this._write(4+t.length);pf(this.buf,t.length,e),this.buf.set(t,e+4);}_read(t){if(this.ptr+t>this.buf.length)throw new Error("Invalid packet");return this.ptr+=t,this.ptr-t}read8(){return this.buf[this._read(1)]}read32(){return Zx(this.buf,this._read(4))}read(){let t=this.read32(),e=new Uint8Array(t),o=this._read(e.length);return e.set(this.buf.subarray(o,o+t)),e}},Qn,ts,cf;if(typeof TextEncoder<"u"&&typeof TextDecoder<"u"){let t=new TextEncoder,e=new TextDecoder;Qn=o=>t.encode(o),ts=o=>e.decode(o),cf='new TextEncoder().encode("")';}else if(typeof Buffer<"u")Qn=t=>Buffer.from(t),ts=t=>{let{buffer:e,byteOffset:o,byteLength:a}=t;return Buffer.from(e,o,a).toString()},cf='Buffer.from("")';else throw new Error("No UTF-8 codec found");if(!(Qn("")instanceof Uint8Array))throw new Error(`Invariant violation: "${cf} instanceof Uint8Array" is incorrectly false
|
|
30
30
|
|
|
31
31
|
This indicates that your JavaScript environment is broken. You cannot use
|
|
32
32
|
esbuild in this environment because esbuild relies on this invariant. This
|
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use strict';var Oe=require('path'),ko=require('fs/promises'),ui=require('fs'),Z=require('zod'),glob=require('glob'),utils=require('@easbot/utils'),crypto$1=require('crypto'),xdgBasedir=require('xdg-basedir'),km=require('os'),hono=require('hono'),nodeServer=require('@hono/node-server'),nodeWs=require('@hono/node-ws'),streaming=require('hono/streaming'),cors=require('hono/cors'),logger=require('hono/logger'),compress=require('hono/compress'),secureHeaders=require('hono/secure-headers'),timeout=require('hono/timeout'),httpException=require('hono/http-exception');require('hono/validator');var zodValidator=require('@hono/zod-validator'),child_process=require('child_process'),Dd=require('semver'),minimatch=require('minimatch'),remeda=require('remeda'),jsoncParser=require('jsonc-parser'),I1=require('gray-matter'),url=require('url'),gateway=require('@easbot/gateway'),events=require('events'),node_js=require('vscode-jsonrpc/node.js'),zip_js=require('@zip.js/zip.js'),diff=require('diff'),CA=require('ignore'),m4=require('fuzzysort'),http=require('http'),net=require('net'),ai$1=require('ai'),index_js=require('@modelcontextprotocol/sdk/client/index.js'),streamableHttp_js=require('@modelcontextprotocol/sdk/client/streamableHttp.js'),sse_js=require('@modelcontextprotocol/sdk/client/sse.js'),stdio_js=require('@modelcontextprotocol/sdk/client/stdio.js'),auth_js=require('@modelcontextprotocol/sdk/client/auth.js'),types_js=require('@modelcontextprotocol/sdk/types.js'),so=require('zod/v4'),p8=require('open'),plugin=require('@easbot/plugin'),lruCache=require('lru-cache'),GD=require('bash-parser'),wrapper_js=require('@parcel/watcher/wrapper.js'),module$1=require('module'),readline=require('readline'),KM=require('turndown'),nodeHtmlParser=require('node-html-parser'),d7=require('node-pty'),memory=require('@easbot/memory'),note=require('@easbot/note'),codebase=require('@easbot/codebase'),types=require('@easbot/types'),ulid=require('ulid'),sdk$1=require('@agentclientprotocol/sdk'),ws$1=require('ws'),honoOpenapi=require('hono-openapi'),zodToJsonSchema=require('zod-to-json-schema'),bonjourService=require('bonjour-service'),proxy=require('hono/proxy'),basicAuth=require('hono/basic-auth'),sdk=require('@easbot/sdk'),provider=require('@ai-sdk/provider'),providerUtils=require('@ai-sdk/provider-utils'),amazonBedrock=require('@ai-sdk/amazon-bedrock'),anthropic$1=require('@ai-sdk/anthropic'),azure=require('@ai-sdk/azure'),google=require('@ai-sdk/google'),googleVertex=require('@ai-sdk/google-vertex'),anthropic=require('@ai-sdk/google-vertex/anthropic'),openai=require('@ai-sdk/openai'),openaiCompatible=require('@ai-sdk/openai-compatible'),aiSdkProvider=require('@openrouter/ai-sdk-provider'),xai=require('@ai-sdk/xai'),mistral=require('@ai-sdk/mistral'),groq=require('@ai-sdk/groq'),deepinfra=require('@ai-sdk/deepinfra'),cerebras=require('@ai-sdk/cerebras'),cohere=require('@ai-sdk/cohere'),gateway$1=require('@ai-sdk/gateway'),togetherai=require('@ai-sdk/togetherai'),perplexity=require('@ai-sdk/perplexity'),vercel=require('@ai-sdk/vercel'),gitlabAiProvider=require('gitlab-ai-provider'),ollamaSdk=require('@easbot/ollama-sdk'),localModelSdk=require('@easbot/local-model-sdk'),alibaba=require('@ai-sdk/alibaba'),decimal_js=require('decimal.js'),Vj=require('chalk'),tui=require('@easbot/tui'),commander=require('commander');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var Oe__namespace=/*#__PURE__*/_interopNamespace(Oe);var ko__namespace=/*#__PURE__*/_interopNamespace(ko);var ui__default=/*#__PURE__*/_interopDefault(ui);var Z__default=/*#__PURE__*/_interopDefault(Z);var km__default=/*#__PURE__*/_interopDefault(km);var Dd__namespace=/*#__PURE__*/_interopNamespace(Dd);var I1__default=/*#__PURE__*/_interopDefault(I1);var CA__default=/*#__PURE__*/_interopDefault(CA);var m4__default=/*#__PURE__*/_interopDefault(m4);var so__default=/*#__PURE__*/_interopDefault(so);var p8__default=/*#__PURE__*/_interopDefault(p8);var GD__default=/*#__PURE__*/_interopDefault(GD);var KM__default=/*#__PURE__*/_interopDefault(KM);var d7__namespace=/*#__PURE__*/_interopNamespace(d7);var Vj__default=/*#__PURE__*/_interopDefault(Vj);var xP=Object.create;var kd=Object.defineProperty;var wP=Object.getOwnPropertyDescriptor;var yP=Object.getOwnPropertyNames;var bP=Object.getPrototypeOf,vP=Object.prototype.hasOwnProperty;var aw=(t,e)=>(e=Symbol[t])?e:Symbol.for("Symbol."+t),nw=t=>{throw TypeError(t)};var kP=(t,e,o)=>e in t?kd(t,e,{enumerable:true,configurable:true,writable:true,value:o}):t[e]=o;var Yo=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,o)=>(typeof require<"u"?require:e)[o]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var $=(t,e)=>()=>(t&&(e=t(t=0)),e);var IP=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Le=(t,e)=>{for(var o in e)kd(t,o,{get:e[o],enumerable:true});},SP=(t,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of yP(e))!vP.call(t,n)&&n!==o&&kd(t,n,{get:()=>e[n],enumerable:!(a=wP(e,n))||a.enumerable});return t};var Id=(t,e,o)=>(o=t!=null?xP(bP(t)):{},SP(kd(o,"default",{value:t,enumerable:true}),t));var Y=(t,e,o)=>kP(t,typeof e!="symbol"?e+"":e,o);var bo=(t,e,o)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&nw("Object expected");var a,n;o&&(a=e[aw("asyncDispose")]),a===void 0&&(a=e[aw("dispose")],o&&(n=a)),typeof a!="function"&&nw("Object not disposable"),n&&(a=function(){try{n.call(this);}catch(i){return Promise.reject(i)}}),t.push([o,a,e]);}else o&&t.push([o]);return e},vo=(t,e,o)=>{var a=typeof SuppressedError=="function"?SuppressedError:function(r,s,u,l){return l=Error(u),l.name="SuppressedError",l.error=r,l.suppressed=s,l},n=r=>e=o?new a(r,e,"An error was suppressed during disposal"):(o=true,r),i=r=>{for(;r=t.pop();)try{var s=r[1]&&r[1].call(r[2]);if(r[0])return Promise.resolve(s).then(i,u=>(n(u),i()))}catch(u){n(u);}if(o)throw e};return i()};var CP,L,k=$(()=>{CP=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.tagName.toUpperCase()==="SCRIPT"?document.currentScript.src:new URL("main.js",document.baseURI).href,L=CP();});var iw=$(()=>{k();});var G,ue=$(()=>{k();(v=>{v.Level=Z__default.default.enum(["DEBUG","INFO","WARN","ERROR"]).meta({ref:"LogLevel",description:"Log level"});let e={DEBUG:0,INFO:1,WARN:2,ERROR:3},o="INFO";function a(S){return e[S]>=e[o]}function n(){return o}v.getLevel=n;let i=new Map;v.Default=_({service:"default"});let s="";function u(){return s}v.file=u;let l,c,d=false,p=S=>{try{process.stderr.write(S);}catch{}},m=false;async function g(S){if(d)return;S.level&&(o=S.level);let h=S.logDir||Oe__namespace.default.join(process.env.EASBOT_LOG_PATH??process.cwd(),"logs");if(b(h).catch(I=>{}),await utils.initLog(S),S.print){d=true;return}S.logFile?s=Oe__namespace.default.join(h,S.logFile):s=Oe__namespace.default.join(h,S.dev?"dev.log":(new Date().toISOString().split(".")[0]??"").replace(/:/g,"")+".log");try{l=await ko__namespace.default.open(s,"w"),c=ui.createWriteStream("",{fd:l.fd,autoClose:!1}),p=I=>{if(!(m||!c||c.destroyed))try{if(!c.writable)return;c.write(I,P=>{P&&!m&&(m=!0,setTimeout(()=>{m=!1;},1e3));});}catch{m||(m=!0,setTimeout(()=>{m=!1;},1e3));}},d=!0;}catch{p=P=>{try{process.stderr.write(P);}catch{}},d=true;}}v.init=g;async function f(){d&&(c&&!c.destroyed&&(await new Promise((S,h)=>{c.end(I=>{I?h(I):S();});}).catch(S=>{console.error("Failed to close log stream:",S);}),c=void 0),l&&(await l.close().catch(S=>{console.error("Failed to close log file handle:",S);}),l=void 0),p=S=>{try{process.stderr.write(S);}catch{}},d=false);}v.close=f;async function b(S){let h=await glob.glob("????-??-??T??????.log",{cwd:S,absolute:true});if(h.length<=5)return;let I=h.slice(0,-10);await Promise.all(I.map(P=>ko__namespace.default.unlink(P).catch(()=>{})));}function y(S,h=0){let I=S.message;return S.cause instanceof Error&&h<10?I+" Caused by: "+y(S.cause,h+1):I}let x=Date.now();function _(S){S=S||{};let h=S.service;if(h&&typeof h=="string"){let T=i.get(h);if(T)return T}function I(T,D){let M=Object.entries({...S,...D}).filter(([V,N])=>N!=null).map(([V,N])=>{let z=`${V}=`;return N instanceof Error?z+y(N):typeof N=="object"?z+JSON.stringify(N):z+N}).join(" "),B=new Date,H=B.getTime()-x;return x=B.getTime(),[B.getFullYear()+"-"+String(B.getMonth()+1).padStart(2,"0")+"-"+String(B.getDate()).padStart(2,"0")+"T"+String(B.getHours()).padStart(2,"0")+":"+String(B.getMinutes()).padStart(2,"0")+":"+String(B.getSeconds()).padStart(2,"0"),"+"+H+"ms",M,T].filter(Boolean).join(" ")+`
|
|
2
|
-
`}let P={debug(T,D){a("DEBUG")&&p("DEBUG "+I(T,D));},info(T,D){a("INFO")&&p("INFO "+I(T,D));},error(T,D){a("ERROR")&&p("ERROR "+I(T,D));},warn(T,D){a("WARN")&&p("WARN "+I(T,D));},tag(T,D){return S&&(S[T]=D),P},clone(){return v.create({...S})},time(T,D){let M=Date.now();P.info(T,{status:"started",...D});function B(){P.info(T,{status:"completed",duration:Date.now()-M,...D});}return {stop:B,[Symbol.dispose](){B();}}}};return h&&typeof h=="string"&&i.set(h,P),P}v.create=_;})(G||(G={}));});var dn;exports.ConnectionRegistry=void 0;var Cd=$(()=>{k();ue();dn=G.create({service:"connection-registry"}),exports.ConnectionRegistry=class t{constructor(e){Y(this,"storagePath");Y(this,"defaultHistoryScope");Y(this,"defaultHistoryWindowSize");Y(this,"defaultDegradePolicy");Y(this,"peerIndex",new Map);Y(this,"serviceIndex",new Map);Y(this,"connections",new Map);this.storagePath=e?.storagePath??".easbot/client-connections.json",this.defaultHistoryScope=e?.defaultHistoryScope??"session",this.defaultHistoryWindowSize=e?.defaultHistoryWindowSize??10,this.defaultDegradePolicy=e?.defaultDegradePolicy??"streaming_first",dn.info("connection registry created",{storagePath:this.storagePath,defaultHistoryScope:this.defaultHistoryScope});}static async create(e){let o=new t(e);return await o.load(),o}connect(e,o,a,n,i){let r=this.peerIndex.get(o);if(r)for(let c of r){let d=this.connections.get(c);if(d&&d.baseUrl===e&&d.status!=="closed")return n&&d.sessionId!==n&&(d.sessionId=n,d.sessionSequence=d.sessionSequence??[],d.sessionSequence.includes(n)||d.sessionSequence.push(n)),i&&(d.localSessionId=i),d.updatedAt=Date.now(),dn.debug("reused existing connection",{connectionId:c,localPeerId:o,baseUrl:e}),{connectionId:d.connectionId,sessionId:d.sessionId,localPeerId:d.localPeerId,peerId:d.peerId,baseUrl:d.baseUrl}}let s=this.generateConnectionId(),u=n??`session-${this.generateShortId()}`,l={localPeerId:o,peerId:a,connectionId:s,sessionId:u,...i?{localSessionId:i}:{},baseUrl:e,historyScope:this.defaultHistoryScope,historyWindowSize:this.defaultHistoryWindowSize,degradePolicy:this.defaultDegradePolicy,updatedAt:Date.now(),status:"active"};return this.connections.set(s,l),this.peerIndex.has(o)||this.peerIndex.set(o,new Set),this.peerIndex.get(o).add(s),this.serviceIndex.has(e)||this.serviceIndex.set(e,new Set),this.serviceIndex.get(e).add(s),this.save().catch(c=>{dn.warn("failed to persist connections",{error:String(c)});}),dn.debug("new connection created",{connectionId:s,localPeerId:o,peerId:a,baseUrl:e}),{connectionId:s,sessionId:u,localPeerId:o,peerId:a,baseUrl:e}}resolve(e,o=false){let a=this.connections.get(e);if(a)return a;let n=this.peerIndex.get(e);if(n&&n.size>0)for(let i of n){let r=this.connections.get(i);if(r&&r.status!=="closed")return r}for(let i of this.connections.values())if(i.status!=="closed"&&(i.sessionId===e||i.localSessionId===e))return i;if(o){let s=this.connect("http://localhost","system-local","system-remote",e);return this.connections.get(s.connectionId)}}closeConnection(e){let o=this.connections.get(e);if(!o)return;this.connections.delete(e);let a=this.peerIndex.get(o.localPeerId);a&&(a.delete(e),a.size===0&&this.peerIndex.delete(o.localPeerId));let n=this.serviceIndex.get(o.baseUrl);n&&(n.delete(e),n.size===0&&this.serviceIndex.delete(o.baseUrl)),dn.info("connection closed and removed",{connectionId:e,localPeerId:o.localPeerId,peerId:o.peerId}),this.save().catch(i=>{dn.warn("failed to persist connections",{error:String(i)});});}markDegraded(e,o){let a=this.connections.get(e);a&&(a.status="degraded",a.updatedAt=Date.now(),dn.debug("connection marked degraded",{connectionId:e,reason:o}),this.save().catch(n=>{dn.warn("failed to persist connections",{error:String(n)});}));}getConnectionsByPeer(e){let o=this.peerIndex.get(e);return o?Array.from(o).map(a=>this.connections.get(a)).filter(a=>a!==void 0&&a.status!=="closed"):[]}getConnectionsByService(e){let o=this.serviceIndex.get(e);return o?Array.from(o).map(a=>this.connections.get(a)).filter(a=>a!==void 0&&a.status!=="closed"):[]}getAllActiveConnections(){return Array.from(this.connections.values()).filter(e=>e.status!=="closed")}updateLastSeenMessageId(e,o){let a=this.connections.get(e);a&&(a.lastSeenMessageId=o,a.updatedAt=Date.now());}generateConnectionId(){return `conn-${this.generateShortId()}`}generateShortId(){return crypto$1.createHash("sha256").update(`${Date.now()}-${Math.random()}`).digest("hex").substring(0,8)}async save(){try{let e={version:1,connections:Array.from(this.connections.values()),peerIndex:Array.from(this.peerIndex.entries()).map(([a,n])=>({peerId:a,connectionIds:Array.from(n)})),serviceIndex:Array.from(this.serviceIndex.entries()).map(([a,n])=>({baseUrl:a,connectionIds:Array.from(n)})),savedAt:Date.now()},o=Oe__namespace.default.dirname(this.storagePath);await ko__namespace.default.mkdir(o,{recursive:!0}),await ko__namespace.default.writeFile(this.storagePath,JSON.stringify(e,null,2),"utf-8"),dn.debug("connections saved",{count:this.connections.size,path:this.storagePath});}catch(e){throw dn.error("failed to save connections",{error:String(e)}),e}}async load(){try{if(!await ko__namespace.default.access(this.storagePath).then(()=>!0,()=>!1))return;let o=await ko__namespace.default.readFile(this.storagePath,"utf-8"),a=JSON.parse(o);if(a.connections)for(let n of a.connections)this.connections.set(n.connectionId,n);if(a.peerIndex)for(let n of a.peerIndex)this.peerIndex.set(n.peerId,new Set(n.connectionIds));if(a.serviceIndex)for(let n of a.serviceIndex)this.serviceIndex.set(n.baseUrl,new Set(n.connectionIds));dn.info("connections loaded",{count:this.connections.size,path:this.storagePath});}catch(e){dn.warn("failed to load connections",{error:String(e)});}}async close(){await this.save(),this.connections.clear(),this.peerIndex.clear(),this.serviceIndex.clear(),dn.info("connection registry closed");}};});var Bi;exports.RoutingErrorCode=void 0;exports.RoutingError=void 0;exports.SessionRouter=void 0;exports.RegistrySessionRouter=void 0;var xf=$(()=>{k();ue();Bi=G.create({service:"session-router"}),exports.RoutingErrorCode=(i=>(i.EMPTY_CONTEXT="EMPTY_CONTEXT",i.AMBIGUOUS_ROUTE="AMBIGUOUS_ROUTE",i.NOT_FOUND="NOT_FOUND",i.CONNECTION_CLOSED="CONNECTION_CLOSED",i.MISSING_REQUIRED_PARAMS="MISSING_REQUIRED_PARAMS",i))(exports.RoutingErrorCode||{}),exports.RoutingError=class extends Error{constructor(o,a,n){super(a);this.code=o;this.context=n;this.name="RoutingError";}},exports.SessionRouter=class t{static create(){return new t}constructor(){Bi.info("session router created");}route(e){if(!this.isValidContext(e))return {success:false,error:"routing context is empty or invalid"};try{return e.connectionId?this.routeByConnectionId(e.connectionId):e.localPeerId&&e.baseUrl?this.routeByPeerAndBaseUrl(e.localPeerId,e.baseUrl):e.baseUrl&&e.sessionId?this.routeByBaseUrlAndSessionId(e.baseUrl,e.sessionId):{success:!1,error:"insufficient routing parameters: need connectionId, or peerId+baseUrl, or baseUrl+sessionId"}}catch(o){let a=o instanceof Error?o.message:String(o);return Bi.error("routing failed",{context:e,error:a}),{success:false,error:a}}}routeOrThrow(e){let o=this.route(e);if(!o.success)throw new exports.RoutingError(this.getErrorCode(o.error),o.error??"routing failed",e);if(!o.connectionId)throw new exports.RoutingError("NOT_FOUND","connection not found",e);let a=this.getConnectionState(o.connectionId);if(!a)throw new exports.RoutingError("NOT_FOUND","connection state not found",e);if(a.status==="closed")throw new exports.RoutingError("CONNECTION_CLOSED","connection is closed",e);return a}registerConnection(e){return !e.connectionId||!e.localPeerId||!e.peerId||!e.baseUrl||!e.sessionId?{success:false,error:"invalid connection state: missing required fields"}:(Bi.debug("connection registered",{connectionId:e.connectionId,localPeerId:e.localPeerId,peerId:e.peerId,baseUrl:e.baseUrl}),{success:true,connectionId:e.connectionId,sessionId:e.sessionId,localPeerId:e.localPeerId,peerId:e.peerId,baseUrl:e.baseUrl})}unregisterConnection(e){let o=this.getConnectionState(e);return o?(Bi.debug("connection unregistered",{connectionId:e,localPeerId:o.localPeerId,peerId:o.peerId,baseUrl:o.baseUrl}),true):(Bi.debug("connection not found for unregister",{connectionId:e}),false)}isValidContext(e){return !!(e.connectionId||e.peerId||e.baseUrl||e.sessionId)}routeByConnectionId(e){let o=this.getConnectionState(e);return o?o.status==="closed"?{success:false,error:`connection is closed: ${e}`}:{success:true,connectionId:o.connectionId,sessionId:o.sessionId,localPeerId:o.localPeerId,peerId:o.peerId,baseUrl:o.baseUrl}:{success:false,error:`connection not found: ${e}`}}routeByPeerAndBaseUrl(e,o){let n=this.getConnectionsByPeer(e).filter(r=>r.baseUrl===o&&r.status!=="closed");if(n.length===0)return {success:false,error:`no connection found for localPeerId=${e}, baseUrl=${o}`};if(n.length>1)return {success:false,error:`ambiguous route: multiple connections found for localPeerId=${e}, baseUrl=${o}`};let i=n[0];return {success:true,connectionId:i.connectionId,sessionId:i.sessionId,localPeerId:i.localPeerId,peerId:i.peerId,baseUrl:i.baseUrl}}routeByBaseUrlAndSessionId(e,o){let n=this.getConnectionsByService(e).filter(r=>r.sessionId===o&&r.status!=="closed");if(n.length===0)return {success:false,error:`no connection found for baseUrl=${e}, sessionId=${o}`};if(n.length>1)return {success:false,error:`ambiguous route: multiple connections found for baseUrl=${e}, sessionId=${o}`};let i=n[0];return {success:true,connectionId:i.connectionId,sessionId:i.sessionId,localPeerId:i.localPeerId,peerId:i.peerId,baseUrl:i.baseUrl}}getConnectionState(e){Bi.warn("getConnectionState not implemented, returning undefined",{connectionId:e});}getConnectionsByPeer(e){return Bi.warn("getConnectionsByPeer not implemented, returning empty array",{peerId:e}),[]}getConnectionsByService(e){return Bi.warn("getConnectionsByService not implemented, returning empty array",{baseUrl:e}),[]}getErrorCode(e){return e?e.includes("empty")||e.includes("invalid")?"EMPTY_CONTEXT":e.includes("ambiguous")?"AMBIGUOUS_ROUTE":e.includes("not found")?"NOT_FOUND":e.includes("closed")?"CONNECTION_CLOSED":e.includes("insufficient")||e.includes("missing")?"MISSING_REQUIRED_PARAMS":"NOT_FOUND":"NOT_FOUND"}},exports.RegistrySessionRouter=class t extends exports.SessionRouter{constructor(o){super();Y(this,"registry");this.registry=o,Bi.info("registry session router created");}static fromRegistry(o){return new t(o)}getConnectionState(o){return this.registry.resolve(o)}getConnectionsByPeer(o){return this.registry.getConnectionsByPeer(o)}getConnectionsByService(o){return this.registry.getConnectionsByService(o)}};});var pa,OP,BP;exports.HistorySelector=void 0;var uw=$(()=>{k();ue();pa=G.create({service:"history-selector"}),OP=10,BP=1e5,exports.HistorySelector=class t{constructor(e){Y(this,"storagePath");Y(this,"defaultHistoryWindowSize");Y(this,"defaultTokenBudget");Y(this,"avgTokensPerMessage");Y(this,"sessionCache",new Map);Y(this,"registry");this.storagePath=e?.storagePath??".easbot/session-history.json",this.defaultHistoryWindowSize=e?.defaultHistoryWindowSize??OP,this.defaultTokenBudget=e?.defaultTokenBudget??BP,this.avgTokensPerMessage=e?.avgTokensPerMessage??500,pa.info("history selector created",{storagePath:this.storagePath,defaultHistoryScope:"session",defaultHistoryWindowSize:this.defaultHistoryWindowSize});}static create(e){return new t(e)}static fromRegistry(e,o){let a=new t(o);return a.registry=e,a}async select(e){let{scope:o,windowSize:a,currentSessionId:n,peerId:i,tokenBudget:r}=e,s=r??this.defaultTokenBudget,u=a??this.defaultHistoryWindowSize;switch(pa.debug("selecting history",{scope:o,windowSize:u,peerId:i,currentSessionId:n}),await this.ensureStorageLoaded(),o){case "session":return this.loadSessionHistory(n,s);case "peer":return this.loadPeerHistory(i,n,u,s);case "global":return this.loadGlobalHistory(i,u,s);default:return this.loadSessionHistory(n,s)}}async composeContext(e,o){let a=o??this.defaultTokenBudget;await this.ensureStorageLoaded();let n=[],i=[],r=0;for(let s of e){let u=await this.loadSessionMessages(s);if(u.length===0)continue;let l=this.estimateTokens(u);if(r+l>a){let c=a-r,d=this.truncateMessages(u,c);n.push(...d),r+=this.estimateTokens(d);break}n.push(...u),i.push(s),r+=l;}return pa.debug("composed context",{sessionCount:e.length,selectedSessions:i.length,totalTokens:r}),{messages:n,sourceSessions:i,totalTokens:r}}async addMessage(e,o){await this.ensureStorageLoaded();let a=this.sessionCache.get(e);a||(a={sessionId:e,peerId:"unknown",baseUrl:"unknown",messages:[],createdAt:Date.now(),updatedAt:Date.now(),isGlobal:false},this.sessionCache.set(e,a)),a.messages.push({...o,timestamp:Date.now()}),a.updatedAt=Date.now(),await this.saveStorage(),pa.debug("message added to session",{sessionId:e,messageId:o.id});}async markAsGlobal(e,o,a){await this.ensureStorageLoaded();let n=this.sessionCache.get(e);n?(n.isGlobal=true,n.peerId=o,n.baseUrl=a,n.updatedAt=Date.now()):(n={sessionId:e,peerId:o,baseUrl:a,messages:[],createdAt:Date.now(),updatedAt:Date.now(),isGlobal:true},this.sessionCache.set(e,n)),await this.saveStorage(),pa.debug("session marked as global",{sessionId:e,peerId:o});}async loadSessionHistory(e,o){pa.debug("loading session history",{sessionId:e,tokenBudget:o});let a=await this.loadSessionMessages(e),i=this.estimateTokens(a)>o?this.truncateMessages(a,o):a;return {messages:i,sourceSessions:[e],totalTokens:this.estimateTokens(i)}}async loadPeerHistory(e,o,a,n){pa.debug("loading peer history",{peerId:e,currentSessionId:o,windowSize:a,tokenBudget:n});let i=await this.getRecentSessionsForPeer(e,a);return this.composeContext(i,n)}async loadGlobalHistory(e,o,a){pa.debug("loading global history",{peerId:e,windowSize:o,tokenBudget:a});let n=await this.getSharedSessions(e,o);return this.composeContext(n,a)}async getRecentSessionsForPeer(e,o){if(this.registry){let i=this.registry.getConnectionsByPeer(e).map(r=>r.sessionId).filter(r=>r!==void 0);if(i.length>0)return i.slice(0,o)}let a=Array.from(this.sessionCache.values()).filter(n=>n.peerId===e).sort((n,i)=>i.updatedAt-n.updatedAt).slice(0,o).map(n=>n.sessionId);return pa.debug("recent sessions for peer",{peerId:e,count:a.length,limit:o}),a}async getSharedSessions(e,o){let a=Array.from(this.sessionCache.values()).filter(n=>n.isGlobal).sort((n,i)=>i.updatedAt-n.updatedAt).slice(0,o).map(n=>n.sessionId);return pa.debug("shared sessions",{peerId:e,count:a.length,limit:o}),a}async loadSessionMessages(e){let o=this.sessionCache.get(e);return !o||o.messages.length===0?(pa.debug("no messages found for session",{sessionId:e}),[]):o.messages.map(a=>({id:a.id,role:a.role,content:a.content,metadata:a.metadata}))}estimateTokens(e){return e.length===0?0:e.length*this.avgTokensPerMessage}truncateMessages(e,o){if(e.length===0||o<=0)return [];let a=Math.floor(o/this.avgTokensPerMessage);if(e.length<=a)return e;let n=e.slice(-a);return pa.debug("messages truncated",{originalCount:e.length,truncatedCount:n.length,maxTokens:o}),n}async ensureStorageLoaded(){if(!(this.sessionCache.size>0))try{if(!await ko__namespace.default.access(this.storagePath).then(()=>!0,()=>!1))return;let o=await ko__namespace.default.readFile(this.storagePath,"utf-8"),a=JSON.parse(o);if(a.sessions)for(let n of a.sessions)this.sessionCache.set(n.sessionId,n);pa.debug("session storage loaded",{count:this.sessionCache.size});}catch(e){pa.warn("failed to load session storage",{error:String(e)});}}async saveStorage(){try{let e=Array.from(this.sessionCache.values()),o={version:1,sessions:e,savedAt:Date.now()},a=Oe__namespace.default.dirname(this.storagePath);await ko__namespace.default.mkdir(a,{recursive:!0}),await ko__namespace.default.writeFile(this.storagePath,JSON.stringify(o,null,2),"utf-8"),pa.debug("session storage saved",{count:e.length});}catch(e){throw pa.error("failed to save session storage",{error:String(e)}),e}}async close(){await this.saveStorage(),this.sessionCache.clear(),this.registry=void 0,pa.info("history selector closed");}};});var lw={};Le(lw,{default:()=>yf});var yf,wf=$(()=>{yf={name:"@easbot/agent",version:"0.1.12",description:"Core Agent for the easbot monorepo ecosystem",type:"module",main:"dist/index.cjs",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.cjs"},"./package.json":"./package.json"},bin:{easbot:"./dist/cli.mjs"},scripts:{dev:"cross-env NODE_ENV=development tsx src/cli.ts -- tui",start:"cross-env NODE_ENV=production node dist/cli.mjs tui --new",build:"tsup --env.NODE_ENV production",test:"vitest","test:run":"vitest run","test:ui":"vitest --ui","test:watch":"vitest --watch","test:coverage":"vitest run --coverage","test:unit":"vitest run --config ./vitest.unit.config.ts","test:unit:watch":"vitest --config ./vitest.unit.config.ts","test:integration":"vitest run --config ./vitest.integration.config.ts","test:integration:watch":"vitest --config ./vitest.integration.config.ts","test:e2e":"vitest run --config ./vitest.e2e.config.ts","test:e2e:watch":"vitest --config ./vitest.e2e.config.ts",lint:"biome check .","lint:fix":"biome check --write .","lint:fix:unsafe":"biome check --write --unsafe ./src","lint:report":"biome check --reporter=summary .",format:"biome format .","format:fix":"biome format --write .","type-check":"tsc --noEmit",clean:"npx rimraf dist node_modules",prepare:"echo 'agent: Bun environment ready for CLI usage'","publish:npm":"bash scripts/publish.sh","publish:npm:win":"powershell -ExecutionPolicy Bypass -File scripts/publish.ps1"},keywords:["ai","agent","eas","bot","automation"],author:"houjallen",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/houjallen/easbot.git",directory:"packages/agent"},homepage:"https://github.com/houjallen/easbot/tree/main/packages/agent#readme",bugs:{url:"https://github.com/houjallen/easbot/issues"},files:["dist","README.md","README.en.md","LICENSE"],dependencies:{"@agentclientprotocol/sdk":"^0.18.0","@ai-sdk/amazon-bedrock":"4.0.82","@ai-sdk/anthropic":"3.0.63","@ai-sdk/alibaba":"^2.0.0-beta.33","@ai-sdk/azure":"3.0.49","@ai-sdk/cerebras":"^2.0.41","@ai-sdk/cohere":"3.0.27","@ai-sdk/deepinfra":"^2.0.41","@ai-sdk/gateway":"^3.0.78","@ai-sdk/google":"3.0.52","@ai-sdk/google-vertex":"^4.0.93","@ai-sdk/groq":"3.0.31","@ai-sdk/mistral":"3.0.27","@ai-sdk/openai":"3.0.48","@ai-sdk/openai-compatible":"2.0.37","@ai-sdk/perplexity":"^3.0.26","@ai-sdk/provider":"^3.0.8","@ai-sdk/provider-utils":"^4.0.21","@ai-sdk/togetherai":"^2.0.41","@ai-sdk/vercel":"^2.0.39","@ai-sdk/xai":"^3.0.73","@aws-sdk/credential-providers":"^3.1014.0","@clack/prompts":"^1.1.0","@easbot/plugin":"workspace:*","@easbot/codebase":"workspace:*","@easbot/memory":"workspace:*","@easbot/note":"workspace:*","@easbot/types":"workspace:*","@easbot/tui":"workspace:*","@easbot/utils":"workspace:*","@easbot/sdk":"workspace:*","@easbot/local-model-sdk":"workspace:*","@easbot/ollama-sdk":"workspace:*","@easbot/gateway":"workspace:*","@hono/node-server":"^2.0.0","@hono/node-ws":"^1.3.0","@hono/standard-validator":"^0.2.2","@hono/zod-validator":"^0.7.6","@mariozechner/pi-agent-core":"0.62.0","@mariozechner/pi-ai":"0.62.0","@mariozechner/pi-coding-agent":"0.62.0","@modelcontextprotocol/sdk":"^1.27.1","@openrouter/ai-sdk-provider":"^2.3.3","@parcel/watcher":"^2.5.6","@sinclair/typebox":"0.34.48","@solid-primitives/event-bus":"1.1.3","@solid-primitives/scheduled":"1.5.3","@standard-schema/spec":"1.1.0","@types/semver":"^7.7.1","@wasmer/wasi":"^1.2.2","@types/cross-spawn":"^6.0.6","@zip.js/zip.js":"^2.8.23",ai:"^6.0.136","ai-gateway-provider":"^3.1.2",ajv:"^8.18.0",axios:"^1.15.2","bash-parser":"^0.5.0","bonjour-service":"^1.3.0",chalk:"^5.6.2",clipboardy:"^5.3.1",commander:"^14.0.3","cross-spawn":"^7.0.6","decimal.js":"^10.6.0",diff:"^8.0.4","drizzle-orm":"^0.45.2",fuzzysort:"^3.1.0","fast-check":"^4.6.0","gitlab-ai-provider":"^6.6.0",glob:"^13.0.6","gray-matter":"^4.0.3",hono:"^4.12.14","hono-openapi":"^1.3.0",ignore:"^7.0.5",jiti:"^2.6.1","jsonc-parser":"^3.3.1","lru-cache":"^11.3.0",minimatch:"^10.2.4","node-gyp":"^12.3.0","node-html-parser":"^7.1.0","node-pty":"^1.1.0",open:"^11.0.0",remeda:"^2.33.6",semver:"^7.7.4","tree-sitter-bash":"^0.25.1",turndown:"^7.2.2",ulid:"^3.0.2","vscode-jsonrpc":"^8.2.1",which:"^6.0.1","xdg-basedir":"^5.1.0",zod:"^4.3.6",ws:"^8.20.0","jieba-wasm":"^2.4.0","vscode-languageserver-types":"3.17.5","why-is-node-running":"^3.2.2","zod-to-json-schema":"^3.25.1"},devDependencies:{"@actions/core":"^3.0.0","@actions/github":"^9.0.0","@octokit/graphql":"^9.0.3","@octokit/rest":"^22.0.1","@octokit/webhooks-types":"^7.6.1","@types/node":"^22.17.0","@types/which":"^3.0.4","@types/ws":"^8.18.1","@types/turndown":"^5.0.6","@vitest/coverage-v8":"^4.1.1",dotenv:"^17.3.1",esbuild:"^0.27.4","esbuild-plugin-alias":"^0.2.1",tsup:"^8.5.1",tsx:"^4.21.0",typescript:"^6.0.2",vitest:"^4.1.1"}};});var as={};Le(as,{Global:()=>exports.Global});var Td,bf,WP,VP,KP;exports.Global=void 0;var bt=$(()=>{k();wf();Td="easbot",bf=Oe__namespace.default.join(xdgBasedir.xdgData,Td),WP=Oe__namespace.default.join(xdgBasedir.xdgCache,Td),VP=Oe__namespace.default.join(xdgBasedir.xdgConfig,Td),KP=Oe__namespace.default.join(xdgBasedir.xdgState,Td);(d=>{d.Path={get home(){return process.env.EASBOT_TEST_HOME||km__default.default.homedir()},data:bf,bin:Oe__namespace.default.join(bf,"bin"),log:Oe__namespace.default.join(bf,"log"),cache:WP,config:VP,state:KP};let e=null,o=null;async function a(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{let p=await Promise.resolve().then(()=>(wf(),lw));e=p.default?.version||p.version||"local";}catch{e="local";}return e||"local"}function n(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{e=yf.version||"local";}catch{e="local";}return e||"local"}d.getVersion=n;function i(){if(o)return o;if(process.env.EASBOT_CHANNEL)return o=process.env.EASBOT_CHANNEL,o;let p=n();return p==="local"||p.includes("dev")?o="local":p.includes("beta")||p.includes("alpha")?o="preview":o="latest",o||"local"}d.getChannel=i;function r(){return i()==="local"}d.isLocal=r;function s(){return i()==="preview"}d.isPreview=s;let u=false,l=null;async function c(){if(!u)return l||(l=(async()=>{await a(),await Promise.all([ko.mkdir(d.Path.data,{recursive:true}),ko.mkdir(d.Path.config,{recursive:true}),ko.mkdir(d.Path.state,{recursive:true}),ko.mkdir(d.Path.log,{recursive:true}),ko.mkdir(d.Path.bin,{recursive:true}),ko.mkdir(d.Path.cache,{recursive:true})]).then(()=>{process.env.EASBOT_DATA_PATH=d.Path.data,process.env.EASBOT_CONFIG_PATH=d.Path.config,process.env.EASBOT_STATE_PATH=d.Path.state,process.env.EASBOT_LOG_PATH=d.Path.log,process.env.EASBOT_BIN_PATH=d.Path.bin,process.env.EASBOT_CACHE_PATH=d.Path.cache;});let p="1",m=Oe__namespace.default.join(d.Path.cache,"version");if(await ko.readFile(m,"utf-8").catch(()=>"0")!==p){try{let f=await ko.readdir(d.Path.cache);await Promise.all(f.map(b=>ko.rm(Oe__namespace.default.join(d.Path.cache,b),{recursive:!0,force:!0})));}catch{}await ko.writeFile(m,p);}u=true;})(),l)}d.init=c;})(exports.Global||(exports.Global={}));});function li(t={}){let e=t.port??3e3,o=t.hostname??"0.0.0.0",a=new hono.Hono({strict:true,getPath:r=>{try{return new URL(r.url).pathname}catch{return r.url}}});if(t.onError?a.onError(t.onError):a.onError((r,s)=>(ns.error("Server error",{error:r.message,stack:r.stack}),r instanceof httpException.HTTPException?r.getResponse():s.json({error:"Internal Server Error",message:r.message},500))),t.onNotFound?a.notFound(t.onNotFound):a.notFound(r=>r.json({error:"Not Found",path:r.req.path},404)),!t.websockets&&t.cors&&a.use(cors.cors(typeof t.cors=="boolean"?{origin:"*"}:t.cors)),a.use(logger.logger((r,...s)=>ns.info(r,s))),!t.websockets&&t.secureHeaders&&a.use(secureHeaders.secureHeaders()),!t.websockets&&t.compression&&a.use(compress.compress({encoding:"gzip"})),!t.websockets&&t.timeout&&a.use(timeout.timeout(t.timeout)),t.middlewares)for(let r of t.middlewares)r.path?a.use(r.path,r.handler):a.use(r.handler);if(t.routes)for(let r of t.routes){let s=r.middlewares||[],u=r.method.toUpperCase();r.validation?a.on(u,r.path,zodValidator.zValidator("json",r.validation),...s,r.handler):a.on(u,r.path,...s,r.handler);}t.rpc&&a.post("/rpc/:method",async r=>{let s=r.req.param("method"),u=t.rpc?.[s];if(!u)return r.json({error:"RPC method not found"},404);try{let l=await r.req.json(),c=await u(l,r);return r.json({result:c})}catch(l){return ns.error("RPC error",{method:s,error:l.message}),r.json({error:"RPC execution failed",message:l.message},500)}}),t.fetch&&a.all("*",async r=>await t.fetch(r.req.raw));let n=null,i={url:new URL(`http://${o}:${e}`),port:e,hostname:o,hono:a,async stop(r=false){return n?new Promise((s,u)=>{r&&n.closeAllConnections?.(),n.close(l=>{l?(ns.error("Error closing server",{error:l.message}),u(l)):(n=null,ns.info(`Server on port ${e} stopped`),s());}),setTimeout(()=>{ns.warn(`Server shutdown timeout on port ${e}`),n=null,s();},5e3);}):Promise.resolve()},get raw(){return n||void 0}};return n=nodeServer.serve({fetch:a.fetch,port:e,hostname:o}),ns.info(`Server running on http://${o}:${e}`),i}function cw(t){return li({rpc:t,port:3e3})}function pw(t,e={}){return li({...e,routes:t})}function dw(t,e={}){return li({...e,websockets:t})}function mw(t,e={}){let o=Object.entries(t).map(([a,n])=>({method:"get",path:`/stream/${a}`,handler:i=>streaming.streamSSE(i,async r=>{for await(let s of n(i))await r.writeSSE(s);})}));return li({...e,routes:o,streaming:true})}var ns,Ad=$(()=>{k();ue();ns=G.create({service:"server"});});var ku,vf=$(()=>{k();ue();(n=>{let t=G.create({service:"pkg-registry"});function e(){return process.platform==="win32"?"cmd":"npm"}async function o(i,r,s){return new Promise(u=>{let l=process.platform==="win32"?["/c","npm","view",i,r]:["view",i,r],c=child_process.spawn(e(),l,{cwd:s,env:{...process.env}}),d="",p="";c.stdout?.on("data",m=>{d+=m.toString();}),c.stderr?.on("data",m=>{p+=m.toString();}),c.on("close",m=>{m!==0?(t.warn("npm view failed",{pkg:i,field:r,code:m,stderr:p}),u(null)):u(d.trim());}),c.on("error",()=>{t.error("npm view error",{pkg:i,field:r,error:"unknown"}),u(null);});})}n.info=o;async function a(i,r,s){let u=await o(i,"version",s);return u?/[\s^~*xX<>|=]/.test(r)?!Dd__namespace.satisfies(u,r):Dd__namespace.compare(r,u)===-1:(t.warn("Failed to resolve latest version, using cached",{pkg:i,cachedVersion:r}),false)}n.isOutdated=a;})(ku||(ku={}));});var Ac=IP((SU,jw)=>{k();var Pf=Object.defineProperty,sE=Object.getOwnPropertyDescriptor,uE=Object.getOwnPropertyNames,lE=Object.prototype.hasOwnProperty,cE=(t,e)=>{for(var o in e)Pf(t,o,{get:e[o],enumerable:true});},pE=(t,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of uE(e))!lE.call(t,n)&&n!==o&&Pf(t,n,{get:()=>e[n],enumerable:!(a=sE(e,n))||a.enumerable});return t},dE=t=>pE(Pf({},"__esModule",{value:true}),t),Ec={};cE(Ec,{analyzeMetafile:()=>zE,analyzeMetafileSync:()=>WE,build:()=>jE,buildSync:()=>UE,context:()=>FE,default:()=>YE,formatMessages:()=>$E,formatMessagesSync:()=>QE,initialize:()=>KE,stop:()=>VE,transform:()=>GE,transformSync:()=>HE,version:()=>NE});jw.exports=dE(Ec);function fw(t){let e=a=>{if(a===null)o.write8(0);else if(typeof a=="boolean")o.write8(1),o.write8(+a);else if(typeof a=="number")o.write8(2),o.write32(a|0);else if(typeof a=="string")o.write8(3),o.write(Yn(a));else if(a instanceof Uint8Array)o.write8(4),o.write(a);else if(a instanceof Array){o.write8(5),o.write32(a.length);for(let n of a)e(n);}else {let n=Object.keys(a);o.write8(6),o.write32(n.length);for(let i of n)o.write(Yn(i)),e(a[i]);}},o=new Sw;return o.write32(0),o.write32(t.id<<1|+!t.isRequest),e(t.value),If(o.buf,o.len-4,0),o.buf.subarray(0,o.len)}function mE(t){let e=()=>{switch(o.read8()){case 0:return null;case 1:return !!o.read8();case 2:return o.read32();case 3:return ls(o.read());case 4:return o.read();case 5:{let r=o.read32(),s=[];for(let u=0;u<r;u++)s.push(e());return s}case 6:{let r=o.read32(),s={};for(let u=0;u<r;u++)s[ls(o.read())]=e();return s}default:throw new Error("Invalid packet")}},o=new Sw(t),a=o.read32(),n=(a&1)===0;a>>>=1;let i=e();if(o.ptr!==t.length)throw new Error("Invalid packet");return {id:a,isRequest:n,value:i}}var Sw=class{constructor(t=new Uint8Array(1024)){this.buf=t,this.len=0,this.ptr=0;}_write(t){if(this.len+t>this.buf.length){let e=new Uint8Array((this.len+t)*2);e.set(this.buf),this.buf=e;}return this.len+=t,this.len-t}write8(t){let e=this._write(1);this.buf[e]=t;}write32(t){let e=this._write(4);If(this.buf,t,e);}write(t){let e=this._write(4+t.length);If(this.buf,t.length,e),this.buf.set(t,e+4);}_read(t){if(this.ptr+t>this.buf.length)throw new Error("Invalid packet");return this.ptr+=t,this.ptr-t}read8(){return this.buf[this._read(1)]}read32(){return Cw(this.buf,this._read(4))}read(){let t=this.read32(),e=new Uint8Array(t),o=this._read(e.length);return e.set(this.buf.subarray(o,o+t)),e}},Yn,ls,kf;if(typeof TextEncoder<"u"&&typeof TextDecoder<"u"){let t=new TextEncoder,e=new TextDecoder;Yn=o=>t.encode(o),ls=o=>e.decode(o),kf='new TextEncoder().encode("")';}else if(typeof Buffer<"u")Yn=t=>Buffer.from(t),ls=t=>{let{buffer:e,byteOffset:o,byteLength:a}=t;return Buffer.from(e,o,a).toString()},kf='Buffer.from("")';else throw new Error("No UTF-8 codec found");if(!(Yn("")instanceof Uint8Array))throw new Error(`Invariant violation: "${kf} instanceof Uint8Array" is incorrectly false
|
|
2
|
+
`}let P={debug(T,D){a("DEBUG")&&p("DEBUG "+I(T,D));},info(T,D){a("INFO")&&p("INFO "+I(T,D));},error(T,D){a("ERROR")&&p("ERROR "+I(T,D));},warn(T,D){a("WARN")&&p("WARN "+I(T,D));},tag(T,D){return S&&(S[T]=D),P},clone(){return v.create({...S})},time(T,D){let M=Date.now();P.info(T,{status:"started",...D});function B(){P.info(T,{status:"completed",duration:Date.now()-M,...D});}return {stop:B,[Symbol.dispose](){B();}}}};return h&&typeof h=="string"&&i.set(h,P),P}v.create=_;})(G||(G={}));});var dn;exports.ConnectionRegistry=void 0;var Cd=$(()=>{k();ue();dn=G.create({service:"connection-registry"}),exports.ConnectionRegistry=class t{constructor(e){Y(this,"storagePath");Y(this,"defaultHistoryScope");Y(this,"defaultHistoryWindowSize");Y(this,"defaultDegradePolicy");Y(this,"peerIndex",new Map);Y(this,"serviceIndex",new Map);Y(this,"connections",new Map);this.storagePath=e?.storagePath??".easbot/client-connections.json",this.defaultHistoryScope=e?.defaultHistoryScope??"session",this.defaultHistoryWindowSize=e?.defaultHistoryWindowSize??10,this.defaultDegradePolicy=e?.defaultDegradePolicy??"streaming_first",dn.info("connection registry created",{storagePath:this.storagePath,defaultHistoryScope:this.defaultHistoryScope});}static async create(e){let o=new t(e);return await o.load(),o}connect(e,o,a,n,i){let r=this.peerIndex.get(o);if(r)for(let c of r){let d=this.connections.get(c);if(d&&d.baseUrl===e&&d.status!=="closed")return n&&d.sessionId!==n&&(d.sessionId=n,d.sessionSequence=d.sessionSequence??[],d.sessionSequence.includes(n)||d.sessionSequence.push(n)),i&&(d.localSessionId=i),d.updatedAt=Date.now(),dn.debug("reused existing connection",{connectionId:c,localPeerId:o,baseUrl:e}),{connectionId:d.connectionId,sessionId:d.sessionId,localPeerId:d.localPeerId,peerId:d.peerId,baseUrl:d.baseUrl}}let s=this.generateConnectionId(),u=n??`session-${this.generateShortId()}`,l={localPeerId:o,peerId:a,connectionId:s,sessionId:u,...i?{localSessionId:i}:{},baseUrl:e,historyScope:this.defaultHistoryScope,historyWindowSize:this.defaultHistoryWindowSize,degradePolicy:this.defaultDegradePolicy,updatedAt:Date.now(),status:"active"};return this.connections.set(s,l),this.peerIndex.has(o)||this.peerIndex.set(o,new Set),this.peerIndex.get(o).add(s),this.serviceIndex.has(e)||this.serviceIndex.set(e,new Set),this.serviceIndex.get(e).add(s),this.save().catch(c=>{dn.warn("failed to persist connections",{error:String(c)});}),dn.debug("new connection created",{connectionId:s,localPeerId:o,peerId:a,baseUrl:e}),{connectionId:s,sessionId:u,localPeerId:o,peerId:a,baseUrl:e}}resolve(e,o=false){let a=this.connections.get(e);if(a)return a;let n=this.peerIndex.get(e);if(n&&n.size>0)for(let i of n){let r=this.connections.get(i);if(r&&r.status!=="closed")return r}for(let i of this.connections.values())if(i.status!=="closed"&&(i.sessionId===e||i.localSessionId===e))return i;if(o){let s=this.connect("http://localhost","system-local","system-remote",e);return this.connections.get(s.connectionId)}}closeConnection(e){let o=this.connections.get(e);if(!o)return;this.connections.delete(e);let a=this.peerIndex.get(o.localPeerId);a&&(a.delete(e),a.size===0&&this.peerIndex.delete(o.localPeerId));let n=this.serviceIndex.get(o.baseUrl);n&&(n.delete(e),n.size===0&&this.serviceIndex.delete(o.baseUrl)),dn.info("connection closed and removed",{connectionId:e,localPeerId:o.localPeerId,peerId:o.peerId}),this.save().catch(i=>{dn.warn("failed to persist connections",{error:String(i)});});}markDegraded(e,o){let a=this.connections.get(e);a&&(a.status="degraded",a.updatedAt=Date.now(),dn.debug("connection marked degraded",{connectionId:e,reason:o}),this.save().catch(n=>{dn.warn("failed to persist connections",{error:String(n)});}));}getConnectionsByPeer(e){let o=this.peerIndex.get(e);return o?Array.from(o).map(a=>this.connections.get(a)).filter(a=>a!==void 0&&a.status!=="closed"):[]}getConnectionsByService(e){let o=this.serviceIndex.get(e);return o?Array.from(o).map(a=>this.connections.get(a)).filter(a=>a!==void 0&&a.status!=="closed"):[]}getAllActiveConnections(){return Array.from(this.connections.values()).filter(e=>e.status!=="closed")}updateLastSeenMessageId(e,o){let a=this.connections.get(e);a&&(a.lastSeenMessageId=o,a.updatedAt=Date.now());}generateConnectionId(){return `conn-${this.generateShortId()}`}generateShortId(){return crypto$1.createHash("sha256").update(`${Date.now()}-${Math.random()}`).digest("hex").substring(0,8)}async save(){try{let e={version:1,connections:Array.from(this.connections.values()),peerIndex:Array.from(this.peerIndex.entries()).map(([a,n])=>({peerId:a,connectionIds:Array.from(n)})),serviceIndex:Array.from(this.serviceIndex.entries()).map(([a,n])=>({baseUrl:a,connectionIds:Array.from(n)})),savedAt:Date.now()},o=Oe__namespace.default.dirname(this.storagePath);await ko__namespace.default.mkdir(o,{recursive:!0}),await ko__namespace.default.writeFile(this.storagePath,JSON.stringify(e,null,2),"utf-8"),dn.debug("connections saved",{count:this.connections.size,path:this.storagePath});}catch(e){throw dn.error("failed to save connections",{error:String(e)}),e}}async load(){try{if(!await ko__namespace.default.access(this.storagePath).then(()=>!0,()=>!1))return;let o=await ko__namespace.default.readFile(this.storagePath,"utf-8"),a=JSON.parse(o);if(a.connections)for(let n of a.connections)this.connections.set(n.connectionId,n);if(a.peerIndex)for(let n of a.peerIndex)this.peerIndex.set(n.peerId,new Set(n.connectionIds));if(a.serviceIndex)for(let n of a.serviceIndex)this.serviceIndex.set(n.baseUrl,new Set(n.connectionIds));dn.info("connections loaded",{count:this.connections.size,path:this.storagePath});}catch(e){dn.warn("failed to load connections",{error:String(e)});}}async close(){await this.save(),this.connections.clear(),this.peerIndex.clear(),this.serviceIndex.clear(),dn.info("connection registry closed");}};});var Bi;exports.RoutingErrorCode=void 0;exports.RoutingError=void 0;exports.SessionRouter=void 0;exports.RegistrySessionRouter=void 0;var xf=$(()=>{k();ue();Bi=G.create({service:"session-router"}),exports.RoutingErrorCode=(i=>(i.EMPTY_CONTEXT="EMPTY_CONTEXT",i.AMBIGUOUS_ROUTE="AMBIGUOUS_ROUTE",i.NOT_FOUND="NOT_FOUND",i.CONNECTION_CLOSED="CONNECTION_CLOSED",i.MISSING_REQUIRED_PARAMS="MISSING_REQUIRED_PARAMS",i))(exports.RoutingErrorCode||{}),exports.RoutingError=class extends Error{constructor(o,a,n){super(a);this.code=o;this.context=n;this.name="RoutingError";}},exports.SessionRouter=class t{static create(){return new t}constructor(){Bi.info("session router created");}route(e){if(!this.isValidContext(e))return {success:false,error:"routing context is empty or invalid"};try{return e.connectionId?this.routeByConnectionId(e.connectionId):e.localPeerId&&e.baseUrl?this.routeByPeerAndBaseUrl(e.localPeerId,e.baseUrl):e.baseUrl&&e.sessionId?this.routeByBaseUrlAndSessionId(e.baseUrl,e.sessionId):{success:!1,error:"insufficient routing parameters: need connectionId, or peerId+baseUrl, or baseUrl+sessionId"}}catch(o){let a=o instanceof Error?o.message:String(o);return Bi.error("routing failed",{context:e,error:a}),{success:false,error:a}}}routeOrThrow(e){let o=this.route(e);if(!o.success)throw new exports.RoutingError(this.getErrorCode(o.error),o.error??"routing failed",e);if(!o.connectionId)throw new exports.RoutingError("NOT_FOUND","connection not found",e);let a=this.getConnectionState(o.connectionId);if(!a)throw new exports.RoutingError("NOT_FOUND","connection state not found",e);if(a.status==="closed")throw new exports.RoutingError("CONNECTION_CLOSED","connection is closed",e);return a}registerConnection(e){return !e.connectionId||!e.localPeerId||!e.peerId||!e.baseUrl||!e.sessionId?{success:false,error:"invalid connection state: missing required fields"}:(Bi.debug("connection registered",{connectionId:e.connectionId,localPeerId:e.localPeerId,peerId:e.peerId,baseUrl:e.baseUrl}),{success:true,connectionId:e.connectionId,sessionId:e.sessionId,localPeerId:e.localPeerId,peerId:e.peerId,baseUrl:e.baseUrl})}unregisterConnection(e){let o=this.getConnectionState(e);return o?(Bi.debug("connection unregistered",{connectionId:e,localPeerId:o.localPeerId,peerId:o.peerId,baseUrl:o.baseUrl}),true):(Bi.debug("connection not found for unregister",{connectionId:e}),false)}isValidContext(e){return !!(e.connectionId||e.peerId||e.baseUrl||e.sessionId)}routeByConnectionId(e){let o=this.getConnectionState(e);return o?o.status==="closed"?{success:false,error:`connection is closed: ${e}`}:{success:true,connectionId:o.connectionId,sessionId:o.sessionId,localPeerId:o.localPeerId,peerId:o.peerId,baseUrl:o.baseUrl}:{success:false,error:`connection not found: ${e}`}}routeByPeerAndBaseUrl(e,o){let n=this.getConnectionsByPeer(e).filter(r=>r.baseUrl===o&&r.status!=="closed");if(n.length===0)return {success:false,error:`no connection found for localPeerId=${e}, baseUrl=${o}`};if(n.length>1)return {success:false,error:`ambiguous route: multiple connections found for localPeerId=${e}, baseUrl=${o}`};let i=n[0];return {success:true,connectionId:i.connectionId,sessionId:i.sessionId,localPeerId:i.localPeerId,peerId:i.peerId,baseUrl:i.baseUrl}}routeByBaseUrlAndSessionId(e,o){let n=this.getConnectionsByService(e).filter(r=>r.sessionId===o&&r.status!=="closed");if(n.length===0)return {success:false,error:`no connection found for baseUrl=${e}, sessionId=${o}`};if(n.length>1)return {success:false,error:`ambiguous route: multiple connections found for baseUrl=${e}, sessionId=${o}`};let i=n[0];return {success:true,connectionId:i.connectionId,sessionId:i.sessionId,localPeerId:i.localPeerId,peerId:i.peerId,baseUrl:i.baseUrl}}getConnectionState(e){Bi.warn("getConnectionState not implemented, returning undefined",{connectionId:e});}getConnectionsByPeer(e){return Bi.warn("getConnectionsByPeer not implemented, returning empty array",{peerId:e}),[]}getConnectionsByService(e){return Bi.warn("getConnectionsByService not implemented, returning empty array",{baseUrl:e}),[]}getErrorCode(e){return e?e.includes("empty")||e.includes("invalid")?"EMPTY_CONTEXT":e.includes("ambiguous")?"AMBIGUOUS_ROUTE":e.includes("not found")?"NOT_FOUND":e.includes("closed")?"CONNECTION_CLOSED":e.includes("insufficient")||e.includes("missing")?"MISSING_REQUIRED_PARAMS":"NOT_FOUND":"NOT_FOUND"}},exports.RegistrySessionRouter=class t extends exports.SessionRouter{constructor(o){super();Y(this,"registry");this.registry=o,Bi.info("registry session router created");}static fromRegistry(o){return new t(o)}getConnectionState(o){return this.registry.resolve(o)}getConnectionsByPeer(o){return this.registry.getConnectionsByPeer(o)}getConnectionsByService(o){return this.registry.getConnectionsByService(o)}};});var pa,OP,BP;exports.HistorySelector=void 0;var uw=$(()=>{k();ue();pa=G.create({service:"history-selector"}),OP=10,BP=1e5,exports.HistorySelector=class t{constructor(e){Y(this,"storagePath");Y(this,"defaultHistoryWindowSize");Y(this,"defaultTokenBudget");Y(this,"avgTokensPerMessage");Y(this,"sessionCache",new Map);Y(this,"registry");this.storagePath=e?.storagePath??".easbot/session-history.json",this.defaultHistoryWindowSize=e?.defaultHistoryWindowSize??OP,this.defaultTokenBudget=e?.defaultTokenBudget??BP,this.avgTokensPerMessage=e?.avgTokensPerMessage??500,pa.info("history selector created",{storagePath:this.storagePath,defaultHistoryScope:"session",defaultHistoryWindowSize:this.defaultHistoryWindowSize});}static create(e){return new t(e)}static fromRegistry(e,o){let a=new t(o);return a.registry=e,a}async select(e){let{scope:o,windowSize:a,currentSessionId:n,peerId:i,tokenBudget:r}=e,s=r??this.defaultTokenBudget,u=a??this.defaultHistoryWindowSize;switch(pa.debug("selecting history",{scope:o,windowSize:u,peerId:i,currentSessionId:n}),await this.ensureStorageLoaded(),o){case "session":return this.loadSessionHistory(n,s);case "peer":return this.loadPeerHistory(i,n,u,s);case "global":return this.loadGlobalHistory(i,u,s);default:return this.loadSessionHistory(n,s)}}async composeContext(e,o){let a=o??this.defaultTokenBudget;await this.ensureStorageLoaded();let n=[],i=[],r=0;for(let s of e){let u=await this.loadSessionMessages(s);if(u.length===0)continue;let l=this.estimateTokens(u);if(r+l>a){let c=a-r,d=this.truncateMessages(u,c);n.push(...d),r+=this.estimateTokens(d);break}n.push(...u),i.push(s),r+=l;}return pa.debug("composed context",{sessionCount:e.length,selectedSessions:i.length,totalTokens:r}),{messages:n,sourceSessions:i,totalTokens:r}}async addMessage(e,o){await this.ensureStorageLoaded();let a=this.sessionCache.get(e);a||(a={sessionId:e,peerId:"unknown",baseUrl:"unknown",messages:[],createdAt:Date.now(),updatedAt:Date.now(),isGlobal:false},this.sessionCache.set(e,a)),a.messages.push({...o,timestamp:Date.now()}),a.updatedAt=Date.now(),await this.saveStorage(),pa.debug("message added to session",{sessionId:e,messageId:o.id});}async markAsGlobal(e,o,a){await this.ensureStorageLoaded();let n=this.sessionCache.get(e);n?(n.isGlobal=true,n.peerId=o,n.baseUrl=a,n.updatedAt=Date.now()):(n={sessionId:e,peerId:o,baseUrl:a,messages:[],createdAt:Date.now(),updatedAt:Date.now(),isGlobal:true},this.sessionCache.set(e,n)),await this.saveStorage(),pa.debug("session marked as global",{sessionId:e,peerId:o});}async loadSessionHistory(e,o){pa.debug("loading session history",{sessionId:e,tokenBudget:o});let a=await this.loadSessionMessages(e),i=this.estimateTokens(a)>o?this.truncateMessages(a,o):a;return {messages:i,sourceSessions:[e],totalTokens:this.estimateTokens(i)}}async loadPeerHistory(e,o,a,n){pa.debug("loading peer history",{peerId:e,currentSessionId:o,windowSize:a,tokenBudget:n});let i=await this.getRecentSessionsForPeer(e,a);return this.composeContext(i,n)}async loadGlobalHistory(e,o,a){pa.debug("loading global history",{peerId:e,windowSize:o,tokenBudget:a});let n=await this.getSharedSessions(e,o);return this.composeContext(n,a)}async getRecentSessionsForPeer(e,o){if(this.registry){let i=this.registry.getConnectionsByPeer(e).map(r=>r.sessionId).filter(r=>r!==void 0);if(i.length>0)return i.slice(0,o)}let a=Array.from(this.sessionCache.values()).filter(n=>n.peerId===e).sort((n,i)=>i.updatedAt-n.updatedAt).slice(0,o).map(n=>n.sessionId);return pa.debug("recent sessions for peer",{peerId:e,count:a.length,limit:o}),a}async getSharedSessions(e,o){let a=Array.from(this.sessionCache.values()).filter(n=>n.isGlobal).sort((n,i)=>i.updatedAt-n.updatedAt).slice(0,o).map(n=>n.sessionId);return pa.debug("shared sessions",{peerId:e,count:a.length,limit:o}),a}async loadSessionMessages(e){let o=this.sessionCache.get(e);return !o||o.messages.length===0?(pa.debug("no messages found for session",{sessionId:e}),[]):o.messages.map(a=>({id:a.id,role:a.role,content:a.content,metadata:a.metadata}))}estimateTokens(e){return e.length===0?0:e.length*this.avgTokensPerMessage}truncateMessages(e,o){if(e.length===0||o<=0)return [];let a=Math.floor(o/this.avgTokensPerMessage);if(e.length<=a)return e;let n=e.slice(-a);return pa.debug("messages truncated",{originalCount:e.length,truncatedCount:n.length,maxTokens:o}),n}async ensureStorageLoaded(){if(!(this.sessionCache.size>0))try{if(!await ko__namespace.default.access(this.storagePath).then(()=>!0,()=>!1))return;let o=await ko__namespace.default.readFile(this.storagePath,"utf-8"),a=JSON.parse(o);if(a.sessions)for(let n of a.sessions)this.sessionCache.set(n.sessionId,n);pa.debug("session storage loaded",{count:this.sessionCache.size});}catch(e){pa.warn("failed to load session storage",{error:String(e)});}}async saveStorage(){try{let e=Array.from(this.sessionCache.values()),o={version:1,sessions:e,savedAt:Date.now()},a=Oe__namespace.default.dirname(this.storagePath);await ko__namespace.default.mkdir(a,{recursive:!0}),await ko__namespace.default.writeFile(this.storagePath,JSON.stringify(o,null,2),"utf-8"),pa.debug("session storage saved",{count:e.length});}catch(e){throw pa.error("failed to save session storage",{error:String(e)}),e}}async close(){await this.saveStorage(),this.sessionCache.clear(),this.registry=void 0,pa.info("history selector closed");}};});var lw={};Le(lw,{default:()=>yf});var yf,wf=$(()=>{yf={name:"@easbot/agent",version:"0.1.13",description:"Core Agent for the easbot monorepo ecosystem",type:"module",main:"dist/index.cjs",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.cjs"},"./package.json":"./package.json"},bin:{easbot:"./dist/cli.mjs"},scripts:{dev:"cross-env NODE_ENV=development tsx src/cli.ts -- tui",start:"cross-env NODE_ENV=production node dist/cli.mjs tui --new",build:"tsup --env.NODE_ENV production",test:"vitest","test:run":"vitest run","test:ui":"vitest --ui","test:watch":"vitest --watch","test:coverage":"vitest run --coverage","test:unit":"vitest run --config ./vitest.unit.config.ts","test:unit:watch":"vitest --config ./vitest.unit.config.ts","test:integration":"vitest run --config ./vitest.integration.config.ts","test:integration:watch":"vitest --config ./vitest.integration.config.ts","test:e2e":"vitest run --config ./vitest.e2e.config.ts","test:e2e:watch":"vitest --config ./vitest.e2e.config.ts",lint:"biome check .","lint:fix":"biome check --write .","lint:fix:unsafe":"biome check --write --unsafe ./src","lint:report":"biome check --reporter=summary .",format:"biome format .","format:fix":"biome format --write .","type-check":"tsc --noEmit",clean:"npx rimraf dist node_modules",prepare:"echo 'agent: Bun environment ready for CLI usage'","publish:npm":"bash scripts/publish.sh","publish:npm:win":"powershell -ExecutionPolicy Bypass -File scripts/publish.ps1"},keywords:["ai","agent","eas","bot","automation"],author:"houjallen",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/houjallen/easbot.git",directory:"packages/agent"},homepage:"https://github.com/houjallen/easbot/tree/main/packages/agent#readme",bugs:{url:"https://github.com/houjallen/easbot/issues"},files:["dist","README.md","README.en.md","LICENSE"],dependencies:{"@agentclientprotocol/sdk":"^0.18.0","@ai-sdk/amazon-bedrock":"4.0.82","@ai-sdk/anthropic":"3.0.63","@ai-sdk/alibaba":"^2.0.0-beta.33","@ai-sdk/azure":"3.0.49","@ai-sdk/cerebras":"^2.0.41","@ai-sdk/cohere":"3.0.27","@ai-sdk/deepinfra":"^2.0.41","@ai-sdk/gateway":"^3.0.78","@ai-sdk/google":"3.0.52","@ai-sdk/google-vertex":"^4.0.93","@ai-sdk/groq":"3.0.31","@ai-sdk/mistral":"3.0.27","@ai-sdk/openai":"3.0.48","@ai-sdk/openai-compatible":"2.0.37","@ai-sdk/perplexity":"^3.0.26","@ai-sdk/provider":"^3.0.8","@ai-sdk/provider-utils":"^4.0.21","@ai-sdk/togetherai":"^2.0.41","@ai-sdk/vercel":"^2.0.39","@ai-sdk/xai":"^3.0.73","@aws-sdk/credential-providers":"^3.1014.0","@clack/prompts":"^1.1.0","@easbot/plugin":"workspace:*","@easbot/codebase":"workspace:*","@easbot/memory":"workspace:*","@easbot/note":"workspace:*","@easbot/types":"workspace:*","@easbot/tui":"workspace:*","@easbot/utils":"workspace:*","@easbot/sdk":"workspace:*","@easbot/local-model-sdk":"workspace:*","@easbot/ollama-sdk":"workspace:*","@easbot/gateway":"workspace:*","@hono/node-server":"^2.0.0","@hono/node-ws":"^1.3.0","@hono/standard-validator":"^0.2.2","@hono/zod-validator":"^0.7.6","@mariozechner/pi-agent-core":"0.62.0","@mariozechner/pi-ai":"0.62.0","@mariozechner/pi-coding-agent":"0.62.0","@modelcontextprotocol/sdk":"^1.27.1","@openrouter/ai-sdk-provider":"^2.3.3","@parcel/watcher":"^2.5.6","@sinclair/typebox":"0.34.48","@solid-primitives/event-bus":"1.1.3","@solid-primitives/scheduled":"1.5.3","@standard-schema/spec":"1.1.0","@types/semver":"^7.7.1","@wasmer/wasi":"^1.2.2","@types/cross-spawn":"^6.0.6","@zip.js/zip.js":"^2.8.23",ai:"^6.0.136","ai-gateway-provider":"^3.1.2",ajv:"^8.18.0",axios:"^1.15.2","bash-parser":"^0.5.0","bonjour-service":"^1.3.0",chalk:"^5.6.2",clipboardy:"^5.3.1",commander:"^14.0.3","cross-spawn":"^7.0.6","decimal.js":"^10.6.0",diff:"^8.0.4","drizzle-orm":"^0.45.2",fuzzysort:"^3.1.0","fast-check":"^4.6.0","gitlab-ai-provider":"^6.6.0",glob:"^13.0.6","gray-matter":"^4.0.3",hono:"^4.12.14","hono-openapi":"^1.3.0",ignore:"^7.0.5",jiti:"^2.6.1","jsonc-parser":"^3.3.1","lru-cache":"^11.3.0",minimatch:"^10.2.4","node-gyp":"^12.3.0","node-html-parser":"^7.1.0","node-pty":"^1.1.0",open:"^11.0.0",remeda:"^2.33.6",semver:"^7.7.4","tree-sitter-bash":"^0.25.1",turndown:"^7.2.2",ulid:"^3.0.2","vscode-jsonrpc":"^8.2.1",which:"^6.0.1","xdg-basedir":"^5.1.0",zod:"^4.3.6",ws:"^8.20.0","jieba-wasm":"^2.4.0","vscode-languageserver-types":"3.17.5","why-is-node-running":"^3.2.2","zod-to-json-schema":"^3.25.1"},devDependencies:{"@actions/core":"^3.0.0","@actions/github":"^9.0.0","@octokit/graphql":"^9.0.3","@octokit/rest":"^22.0.1","@octokit/webhooks-types":"^7.6.1","@types/node":"^22.17.0","@types/which":"^3.0.4","@types/ws":"^8.18.1","@types/turndown":"^5.0.6","@vitest/coverage-v8":"^4.1.1",dotenv:"^17.3.1",esbuild:"^0.27.4","esbuild-plugin-alias":"^0.2.1",tsup:"^8.5.1",tsx:"^4.21.0",typescript:"^6.0.2",vitest:"^4.1.1"}};});var as={};Le(as,{Global:()=>exports.Global});var Td,bf,WP,VP,KP;exports.Global=void 0;var bt=$(()=>{k();wf();Td="easbot",bf=Oe__namespace.default.join(xdgBasedir.xdgData,Td),WP=Oe__namespace.default.join(xdgBasedir.xdgCache,Td),VP=Oe__namespace.default.join(xdgBasedir.xdgConfig,Td),KP=Oe__namespace.default.join(xdgBasedir.xdgState,Td);(d=>{d.Path={get home(){return process.env.EASBOT_TEST_HOME||km__default.default.homedir()},data:bf,bin:Oe__namespace.default.join(bf,"bin"),log:Oe__namespace.default.join(bf,"log"),cache:WP,config:VP,state:KP};let e=null,o=null;async function a(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{let p=await Promise.resolve().then(()=>(wf(),lw));e=p.default?.version||p.version||"local";}catch{e="local";}return e||"local"}function n(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{e=yf.version||"local";}catch{e="local";}return e||"local"}d.getVersion=n;function i(){if(o)return o;if(process.env.EASBOT_CHANNEL)return o=process.env.EASBOT_CHANNEL,o;let p=n();return p==="local"||p.includes("dev")?o="local":p.includes("beta")||p.includes("alpha")?o="preview":o="latest",o||"local"}d.getChannel=i;function r(){return i()==="local"}d.isLocal=r;function s(){return i()==="preview"}d.isPreview=s;let u=false,l=null;async function c(){if(!u)return l||(l=(async()=>{await a(),await Promise.all([ko.mkdir(d.Path.data,{recursive:true}),ko.mkdir(d.Path.config,{recursive:true}),ko.mkdir(d.Path.state,{recursive:true}),ko.mkdir(d.Path.log,{recursive:true}),ko.mkdir(d.Path.bin,{recursive:true}),ko.mkdir(d.Path.cache,{recursive:true})]).then(()=>{process.env.EASBOT_DATA_PATH=d.Path.data,process.env.EASBOT_CONFIG_PATH=d.Path.config,process.env.EASBOT_STATE_PATH=d.Path.state,process.env.EASBOT_LOG_PATH=d.Path.log,process.env.EASBOT_BIN_PATH=d.Path.bin,process.env.EASBOT_CACHE_PATH=d.Path.cache;});let p="1",m=Oe__namespace.default.join(d.Path.cache,"version");if(await ko.readFile(m,"utf-8").catch(()=>"0")!==p){try{let f=await ko.readdir(d.Path.cache);await Promise.all(f.map(b=>ko.rm(Oe__namespace.default.join(d.Path.cache,b),{recursive:!0,force:!0})));}catch{}await ko.writeFile(m,p);}u=true;})(),l)}d.init=c;})(exports.Global||(exports.Global={}));});function li(t={}){let e=t.port??3e3,o=t.hostname??"0.0.0.0",a=new hono.Hono({strict:true,getPath:r=>{try{return new URL(r.url).pathname}catch{return r.url}}});if(t.onError?a.onError(t.onError):a.onError((r,s)=>(ns.error("Server error",{error:r.message,stack:r.stack}),r instanceof httpException.HTTPException?r.getResponse():s.json({error:"Internal Server Error",message:r.message},500))),t.onNotFound?a.notFound(t.onNotFound):a.notFound(r=>r.json({error:"Not Found",path:r.req.path},404)),!t.websockets&&t.cors&&a.use(cors.cors(typeof t.cors=="boolean"?{origin:"*"}:t.cors)),a.use(logger.logger((r,...s)=>ns.info(r,s))),!t.websockets&&t.secureHeaders&&a.use(secureHeaders.secureHeaders()),!t.websockets&&t.compression&&a.use(compress.compress({encoding:"gzip"})),!t.websockets&&t.timeout&&a.use(timeout.timeout(t.timeout)),t.middlewares)for(let r of t.middlewares)r.path?a.use(r.path,r.handler):a.use(r.handler);if(t.routes)for(let r of t.routes){let s=r.middlewares||[],u=r.method.toUpperCase();r.validation?a.on(u,r.path,zodValidator.zValidator("json",r.validation),...s,r.handler):a.on(u,r.path,...s,r.handler);}t.rpc&&a.post("/rpc/:method",async r=>{let s=r.req.param("method"),u=t.rpc?.[s];if(!u)return r.json({error:"RPC method not found"},404);try{let l=await r.req.json(),c=await u(l,r);return r.json({result:c})}catch(l){return ns.error("RPC error",{method:s,error:l.message}),r.json({error:"RPC execution failed",message:l.message},500)}}),t.fetch&&a.all("*",async r=>await t.fetch(r.req.raw));let n=null,i={url:new URL(`http://${o}:${e}`),port:e,hostname:o,hono:a,async stop(r=false){return n?new Promise((s,u)=>{r&&n.closeAllConnections?.(),n.close(l=>{l?(ns.error("Error closing server",{error:l.message}),u(l)):(n=null,ns.info(`Server on port ${e} stopped`),s());}),setTimeout(()=>{ns.warn(`Server shutdown timeout on port ${e}`),n=null,s();},5e3);}):Promise.resolve()},get raw(){return n||void 0}};return n=nodeServer.serve({fetch:a.fetch,port:e,hostname:o}),ns.info(`Server running on http://${o}:${e}`),i}function cw(t){return li({rpc:t,port:3e3})}function pw(t,e={}){return li({...e,routes:t})}function dw(t,e={}){return li({...e,websockets:t})}function mw(t,e={}){let o=Object.entries(t).map(([a,n])=>({method:"get",path:`/stream/${a}`,handler:i=>streaming.streamSSE(i,async r=>{for await(let s of n(i))await r.writeSSE(s);})}));return li({...e,routes:o,streaming:true})}var ns,Ad=$(()=>{k();ue();ns=G.create({service:"server"});});var ku,vf=$(()=>{k();ue();(n=>{let t=G.create({service:"pkg-registry"});function e(){return process.platform==="win32"?"cmd":"npm"}async function o(i,r,s){return new Promise(u=>{let l=process.platform==="win32"?["/c","npm","view",i,r]:["view",i,r],c=child_process.spawn(e(),l,{cwd:s,env:{...process.env}}),d="",p="";c.stdout?.on("data",m=>{d+=m.toString();}),c.stderr?.on("data",m=>{p+=m.toString();}),c.on("close",m=>{m!==0?(t.warn("npm view failed",{pkg:i,field:r,code:m,stderr:p}),u(null)):u(d.trim());}),c.on("error",()=>{t.error("npm view error",{pkg:i,field:r,error:"unknown"}),u(null);});})}n.info=o;async function a(i,r,s){let u=await o(i,"version",s);return u?/[\s^~*xX<>|=]/.test(r)?!Dd__namespace.satisfies(u,r):Dd__namespace.compare(r,u)===-1:(t.warn("Failed to resolve latest version, using cached",{pkg:i,cachedVersion:r}),false)}n.isOutdated=a;})(ku||(ku={}));});var Ac=IP((SU,jw)=>{k();var Pf=Object.defineProperty,sE=Object.getOwnPropertyDescriptor,uE=Object.getOwnPropertyNames,lE=Object.prototype.hasOwnProperty,cE=(t,e)=>{for(var o in e)Pf(t,o,{get:e[o],enumerable:true});},pE=(t,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of uE(e))!lE.call(t,n)&&n!==o&&Pf(t,n,{get:()=>e[n],enumerable:!(a=sE(e,n))||a.enumerable});return t},dE=t=>pE(Pf({},"__esModule",{value:true}),t),Ec={};cE(Ec,{analyzeMetafile:()=>zE,analyzeMetafileSync:()=>WE,build:()=>jE,buildSync:()=>UE,context:()=>FE,default:()=>YE,formatMessages:()=>$E,formatMessagesSync:()=>QE,initialize:()=>KE,stop:()=>VE,transform:()=>GE,transformSync:()=>HE,version:()=>NE});jw.exports=dE(Ec);function fw(t){let e=a=>{if(a===null)o.write8(0);else if(typeof a=="boolean")o.write8(1),o.write8(+a);else if(typeof a=="number")o.write8(2),o.write32(a|0);else if(typeof a=="string")o.write8(3),o.write(Yn(a));else if(a instanceof Uint8Array)o.write8(4),o.write(a);else if(a instanceof Array){o.write8(5),o.write32(a.length);for(let n of a)e(n);}else {let n=Object.keys(a);o.write8(6),o.write32(n.length);for(let i of n)o.write(Yn(i)),e(a[i]);}},o=new Sw;return o.write32(0),o.write32(t.id<<1|+!t.isRequest),e(t.value),If(o.buf,o.len-4,0),o.buf.subarray(0,o.len)}function mE(t){let e=()=>{switch(o.read8()){case 0:return null;case 1:return !!o.read8();case 2:return o.read32();case 3:return ls(o.read());case 4:return o.read();case 5:{let r=o.read32(),s=[];for(let u=0;u<r;u++)s.push(e());return s}case 6:{let r=o.read32(),s={};for(let u=0;u<r;u++)s[ls(o.read())]=e();return s}default:throw new Error("Invalid packet")}},o=new Sw(t),a=o.read32(),n=(a&1)===0;a>>>=1;let i=e();if(o.ptr!==t.length)throw new Error("Invalid packet");return {id:a,isRequest:n,value:i}}var Sw=class{constructor(t=new Uint8Array(1024)){this.buf=t,this.len=0,this.ptr=0;}_write(t){if(this.len+t>this.buf.length){let e=new Uint8Array((this.len+t)*2);e.set(this.buf),this.buf=e;}return this.len+=t,this.len-t}write8(t){let e=this._write(1);this.buf[e]=t;}write32(t){let e=this._write(4);If(this.buf,t,e);}write(t){let e=this._write(4+t.length);If(this.buf,t.length,e),this.buf.set(t,e+4);}_read(t){if(this.ptr+t>this.buf.length)throw new Error("Invalid packet");return this.ptr+=t,this.ptr-t}read8(){return this.buf[this._read(1)]}read32(){return Cw(this.buf,this._read(4))}read(){let t=this.read32(),e=new Uint8Array(t),o=this._read(e.length);return e.set(this.buf.subarray(o,o+t)),e}},Yn,ls,kf;if(typeof TextEncoder<"u"&&typeof TextDecoder<"u"){let t=new TextEncoder,e=new TextDecoder;Yn=o=>t.encode(o),ls=o=>e.decode(o),kf='new TextEncoder().encode("")';}else if(typeof Buffer<"u")Yn=t=>Buffer.from(t),ls=t=>{let{buffer:e,byteOffset:o,byteLength:a}=t;return Buffer.from(e,o,a).toString()},kf='Buffer.from("")';else throw new Error("No UTF-8 codec found");if(!(Yn("")instanceof Uint8Array))throw new Error(`Invariant violation: "${kf} instanceof Uint8Array" is incorrectly false
|
|
3
3
|
|
|
4
4
|
This indicates that your JavaScript environment is broken. You cannot use
|
|
5
5
|
esbuild in this environment because esbuild relies on this invariant. This
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import*as Be from'path';import Be__default,{sep,basename,join}from'path';import {pathToFileURL,fileURLToPath}from'url';import*as Io from'fs/promises';import Io__default,{readFile,mkdir,access,readdir,writeFile,realpath,rm as rm$1,unlink,copyFile,stat}from'fs/promises';import li,{existsSync,createReadStream,createWriteStream,readFileSync,constants,promises,readdirSync}from'fs';import ee,{z}from'zod';import {glob,globSync}from'glob';import {NamedError,loadTextFile,loadEnv,lazy,parseModelId,Wildcard,lazyAsync,fn,iife,Filesystem,work,Lock,AsyncQueue,formatLocalISOCompact,defer,withTimeout,abortAfterAny,initLog,git,Context,proxied,Archive,Token,TruncateContent,Slug,Locale,loadTextFileAsync}from'@easbot/utils';import {createHash,randomBytes,randomUUID}from'crypto';import {xdgData,xdgCache,xdgConfig,xdgState}from'xdg-basedir';import Im,{EOL}from'os';import {Hono}from'hono';import {serve}from'@hono/node-server';import {createNodeWebSocket}from'@hono/node-ws';import {streamSSE,stream}from'hono/streaming';import {cors}from'hono/cors';import {logger}from'hono/logger';import {compress}from'hono/compress';import {secureHeaders}from'hono/secure-headers';import {timeout}from'hono/timeout';import {HTTPException}from'hono/http-exception';import'hono/validator';import {zValidator}from'@hono/zod-validator';import {spawn,execSync}from'child_process';import*as Dd from'semver';import {minimatch}from'minimatch';import {pipe,values,sortBy,mapValues,splitWhen,unique,mergeDeep,filter,map,fromEntries,clone,pickBy,omit}from'remeda';import {parse as parse$1,printParseErrorCode,modify,applyEdits}from'jsonc-parser';import C1 from'gray-matter';import {GatewayClient,loadConfig,GatewayConfigSchema,getSessionConfig,getMessageQueueConfig,getHTTPSConfig,getServerConfig,getClusterConfig,getConnectionPoolConfig,getChannelConfig,getAuthConfig,getAgentRegistryConfig,Gateway}from'@easbot/gateway';import {EventEmitter}from'events';import {createMessageConnection,StreamMessageReader,StreamMessageWriter}from'vscode-jsonrpc/node.js';import {ZipReader,BlobReader,BlobWriter}from'@zip.js/zip.js';import {createTwoFilesPatch,diffLines,applyPatch,structuredPatch,formatPatch}from'diff';import AA from'ignore';import f4 from'fuzzysort';import {createServer,STATUS_CODES}from'http';import {connect}from'net';import {embed,streamText,convertToModelMessages,APICallError,LoadAPIKeyError,streamObject,generateObject,tool,jsonSchema,asSchema,wrapLanguageModel,NoSuchModelError,dynamicTool}from'ai';import {Client}from'@modelcontextprotocol/sdk/client/index.js';import {StreamableHTTPClientTransport}from'@modelcontextprotocol/sdk/client/streamableHttp.js';import {SSEClientTransport}from'@modelcontextprotocol/sdk/client/sse.js';import {StdioClientTransport}from'@modelcontextprotocol/sdk/client/stdio.js';import {UnauthorizedError}from'@modelcontextprotocol/sdk/client/auth.js';import {ToolListChangedNotificationSchema,CallToolResultSchema}from'@modelcontextprotocol/sdk/types.js';import uo,{z as z$1}from'zod/v4';import f8 from'open';import {HookEvent,CommandMetadataSchema}from'@easbot/plugin';import {LRUCache}from'lru-cache';import HM from'bash-parser';import {createWrapper}from'@parcel/watcher/wrapper.js';import {createRequire}from'module';import {createInterface}from'readline';import ZD from'turndown';import {parse}from'node-html-parser';import*as h7 from'node-pty';import {createMemorySystem}from'@easbot/memory';import {createNoteKnowledge}from'@easbot/note';import {createCodebase}from'@easbot/codebase';import {SubAgentStatus}from'@easbot/types';export{SubAgentStatus}from'@easbot/types';import {ulid}from'ulid';import {ndJsonStream,AgentSideConnection,RequestError}from'@agentclientprotocol/sdk';import {WebSocketServer}from'ws';import {describeRoute,resolver,validator,openAPIRouteHandler,generateSpecs}from'hono-openapi';import {zodToJsonSchema}from'zod-to-json-schema';import {Bonjour}from'bonjour-service';import {proxy}from'hono/proxy';import {basicAuth}from'hono/basic-auth';import {createEasbotClient}from'@easbot/sdk';import {InvalidResponseDataError,APICallError as APICallError$1,UnsupportedFunctionalityError}from'@ai-sdk/provider';import {withoutTrailingSlash,createJsonErrorResponseHandler,parseProviderOptions,postJsonToApi,createJsonResponseHandler,combineHeaders,generateId,createEventSourceResponseHandler,isParsableJson,convertToBase64,createProviderToolFactoryWithOutputSchema,withUserAgentSuffix,createProviderToolFactory}from'@ai-sdk/provider-utils';import {createAmazonBedrock}from'@ai-sdk/amazon-bedrock';import {createAnthropic}from'@ai-sdk/anthropic';import {createAzure}from'@ai-sdk/azure';import {createGoogleGenerativeAI}from'@ai-sdk/google';import {createVertex}from'@ai-sdk/google-vertex';import {createVertexAnthropic}from'@ai-sdk/google-vertex/anthropic';import {createOpenAI}from'@ai-sdk/openai';import {createOpenAICompatible}from'@ai-sdk/openai-compatible';import {createOpenRouter}from'@openrouter/ai-sdk-provider';import {createXai}from'@ai-sdk/xai';import {createMistral}from'@ai-sdk/mistral';import {createGroq}from'@ai-sdk/groq';import {createDeepInfra}from'@ai-sdk/deepinfra';import {createCerebras}from'@ai-sdk/cerebras';import {createCohere}from'@ai-sdk/cohere';import {createGateway}from'@ai-sdk/gateway';import {createTogetherAI}from'@ai-sdk/togetherai';import {createPerplexity}from'@ai-sdk/perplexity';import {createVercel}from'@ai-sdk/vercel';import {createGitLab,VERSION}from'gitlab-ai-provider';import {createOllama}from'@easbot/ollama-sdk';import {createLocal}from'@easbot/local-model-sdk';import {createAlibaba}from'@ai-sdk/alibaba';import {Decimal}from'decimal.js';import Xj,{Chalk}from'chalk';import {Input,truncateToWidth,isKeyRelease,matchesKey,getEditorKeybindings,SettingsList,SelectList,Container,Text,Editor,Key,Markdown}from'@easbot/tui';import {Command}from'commander';var yP=Object.create;var Id=Object.defineProperty;var bP=Object.getOwnPropertyDescriptor;var vP=Object.getOwnPropertyNames;var kP=Object.getPrototypeOf,IP=Object.prototype.hasOwnProperty;var nw=(t,e)=>(e=Symbol[t])?e:Symbol.for("Symbol."+t),iw=t=>{throw TypeError(t)};var SP=(t,e,o)=>e in t?Id(t,e,{enumerable:true,configurable:true,writable:true,value:o}):t[e]=o;var Xo=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,o)=>(typeof require<"u"?require:e)[o]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var U=(t,e)=>()=>(t&&(e=t(t=0)),e);var CP=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Oe=(t,e)=>{for(var o in e)Id(t,o,{get:e[o],enumerable:true});},PP=(t,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of vP(e))!IP.call(t,n)&&n!==o&&Id(t,n,{get:()=>e[n],enumerable:!(a=bP(e,n))||a.enumerable});return t};var Sd=(t,e,o)=>(o=t!=null?yP(kP(t)):{},PP(Id(o,"default",{value:t,enumerable:true}),t));var X=(t,e,o)=>SP(t,typeof e!="symbol"?e+"":e,o);var vo=(t,e,o)=>{if(e!=null){typeof e!="object"&&typeof e!="function"&&iw("Object expected");var a,n;o&&(a=e[nw("asyncDispose")]),a===void 0&&(a=e[nw("dispose")],o&&(n=a)),typeof a!="function"&&iw("Object not disposable"),n&&(a=function(){try{n.call(this);}catch(i){return Promise.reject(i)}}),t.push([o,a,e]);}else o&&t.push([o]);return e},ko=(t,e,o)=>{var a=typeof SuppressedError=="function"?SuppressedError:function(r,s,u,l){return l=Error(u),l.name="SuppressedError",l.error=r,l.suppressed=s,l},n=r=>e=o?new a(r,e,"An error was suppressed during disposal"):(o=true,r),i=r=>{for(;r=t.pop();)try{var s=r[1]&&r[1].call(r[2]);if(r[0])return Promise.resolve(s).then(i,u=>(n(u),i()))}catch(u){n(u);}if(o)throw e};return i()};var rw,AP,$,G,k=U(()=>{rw=()=>fileURLToPath(import.meta.url),AP=()=>Be__default.dirname(rw()),$=AP(),G=rw();});var sw=U(()=>{k();});var F,le=U(()=>{k();(v=>{v.Level=ee.enum(["DEBUG","INFO","WARN","ERROR"]).meta({ref:"LogLevel",description:"Log level"});let e={DEBUG:0,INFO:1,WARN:2,ERROR:3},o="INFO";function a(S){return e[S]>=e[o]}function n(){return o}v.getLevel=n;let i=new Map;v.Default=_({service:"default"});let s="";function u(){return s}v.file=u;let l,c,d=false,p=S=>{try{process.stderr.write(S);}catch{}},m=false;async function g(S){if(d)return;S.level&&(o=S.level);let h=S.logDir||Be__default.join(process.env.EASBOT_LOG_PATH??process.cwd(),"logs");if(b(h).catch(I=>{}),await initLog(S),S.print){d=true;return}S.logFile?s=Be__default.join(h,S.logFile):s=Be__default.join(h,S.dev?"dev.log":(new Date().toISOString().split(".")[0]??"").replace(/:/g,"")+".log");try{l=await Io__default.open(s,"w"),c=createWriteStream("",{fd:l.fd,autoClose:!1}),p=I=>{if(!(m||!c||c.destroyed))try{if(!c.writable)return;c.write(I,P=>{P&&!m&&(m=!0,setTimeout(()=>{m=!1;},1e3));});}catch{m||(m=!0,setTimeout(()=>{m=!1;},1e3));}},d=!0;}catch{p=P=>{try{process.stderr.write(P);}catch{}},d=true;}}v.init=g;async function f(){d&&(c&&!c.destroyed&&(await new Promise((S,h)=>{c.end(I=>{I?h(I):S();});}).catch(S=>{console.error("Failed to close log stream:",S);}),c=void 0),l&&(await l.close().catch(S=>{console.error("Failed to close log file handle:",S);}),l=void 0),p=S=>{try{process.stderr.write(S);}catch{}},d=false);}v.close=f;async function b(S){let h=await glob("????-??-??T??????.log",{cwd:S,absolute:true});if(h.length<=5)return;let I=h.slice(0,-10);await Promise.all(I.map(P=>Io__default.unlink(P).catch(()=>{})));}function y(S,h=0){let I=S.message;return S.cause instanceof Error&&h<10?I+" Caused by: "+y(S.cause,h+1):I}let x=Date.now();function _(S){S=S||{};let h=S.service;if(h&&typeof h=="string"){let T=i.get(h);if(T)return T}function I(T,M){let D=Object.entries({...S,...M}).filter(([K,q])=>q!=null).map(([K,q])=>{let z=`${K}=`;return q instanceof Error?z+y(q):typeof q=="object"?z+JSON.stringify(q):z+q}).join(" "),O=new Date,Q=O.getTime()-x;return x=O.getTime(),[O.getFullYear()+"-"+String(O.getMonth()+1).padStart(2,"0")+"-"+String(O.getDate()).padStart(2,"0")+"T"+String(O.getHours()).padStart(2,"0")+":"+String(O.getMinutes()).padStart(2,"0")+":"+String(O.getSeconds()).padStart(2,"0"),"+"+Q+"ms",D,T].filter(Boolean).join(" ")+`
|
|
2
|
-
`}let P={debug(T,M){a("DEBUG")&&p("DEBUG "+I(T,M));},info(T,M){a("INFO")&&p("INFO "+I(T,M));},error(T,M){a("ERROR")&&p("ERROR "+I(T,M));},warn(T,M){a("WARN")&&p("WARN "+I(T,M));},tag(T,M){return S&&(S[T]=M),P},clone(){return v.create({...S})},time(T,M){let D=Date.now();P.info(T,{status:"started",...M});function O(){P.info(T,{status:"completed",duration:Date.now()-D,...M});}return {stop:O,[Symbol.dispose](){O();}}}};return h&&typeof h=="string"&&i.set(h,P),P}v.create=_;})(F||(F={}));});var mn,Bi,Pd=U(()=>{k();le();mn=F.create({service:"connection-registry"}),Bi=class t{constructor(e){X(this,"storagePath");X(this,"defaultHistoryScope");X(this,"defaultHistoryWindowSize");X(this,"defaultDegradePolicy");X(this,"peerIndex",new Map);X(this,"serviceIndex",new Map);X(this,"connections",new Map);this.storagePath=e?.storagePath??".easbot/client-connections.json",this.defaultHistoryScope=e?.defaultHistoryScope??"session",this.defaultHistoryWindowSize=e?.defaultHistoryWindowSize??10,this.defaultDegradePolicy=e?.defaultDegradePolicy??"streaming_first",mn.info("connection registry created",{storagePath:this.storagePath,defaultHistoryScope:this.defaultHistoryScope});}static async create(e){let o=new t(e);return await o.load(),o}connect(e,o,a,n,i){let r=this.peerIndex.get(o);if(r)for(let c of r){let d=this.connections.get(c);if(d&&d.baseUrl===e&&d.status!=="closed")return n&&d.sessionId!==n&&(d.sessionId=n,d.sessionSequence=d.sessionSequence??[],d.sessionSequence.includes(n)||d.sessionSequence.push(n)),i&&(d.localSessionId=i),d.updatedAt=Date.now(),mn.debug("reused existing connection",{connectionId:c,localPeerId:o,baseUrl:e}),{connectionId:d.connectionId,sessionId:d.sessionId,localPeerId:d.localPeerId,peerId:d.peerId,baseUrl:d.baseUrl}}let s=this.generateConnectionId(),u=n??`session-${this.generateShortId()}`,l={localPeerId:o,peerId:a,connectionId:s,sessionId:u,...i?{localSessionId:i}:{},baseUrl:e,historyScope:this.defaultHistoryScope,historyWindowSize:this.defaultHistoryWindowSize,degradePolicy:this.defaultDegradePolicy,updatedAt:Date.now(),status:"active"};return this.connections.set(s,l),this.peerIndex.has(o)||this.peerIndex.set(o,new Set),this.peerIndex.get(o).add(s),this.serviceIndex.has(e)||this.serviceIndex.set(e,new Set),this.serviceIndex.get(e).add(s),this.save().catch(c=>{mn.warn("failed to persist connections",{error:String(c)});}),mn.debug("new connection created",{connectionId:s,localPeerId:o,peerId:a,baseUrl:e}),{connectionId:s,sessionId:u,localPeerId:o,peerId:a,baseUrl:e}}resolve(e,o=false){let a=this.connections.get(e);if(a)return a;let n=this.peerIndex.get(e);if(n&&n.size>0)for(let i of n){let r=this.connections.get(i);if(r&&r.status!=="closed")return r}for(let i of this.connections.values())if(i.status!=="closed"&&(i.sessionId===e||i.localSessionId===e))return i;if(o){let s=this.connect("http://localhost","system-local","system-remote",e);return this.connections.get(s.connectionId)}}closeConnection(e){let o=this.connections.get(e);if(!o)return;this.connections.delete(e);let a=this.peerIndex.get(o.localPeerId);a&&(a.delete(e),a.size===0&&this.peerIndex.delete(o.localPeerId));let n=this.serviceIndex.get(o.baseUrl);n&&(n.delete(e),n.size===0&&this.serviceIndex.delete(o.baseUrl)),mn.info("connection closed and removed",{connectionId:e,localPeerId:o.localPeerId,peerId:o.peerId}),this.save().catch(i=>{mn.warn("failed to persist connections",{error:String(i)});});}markDegraded(e,o){let a=this.connections.get(e);a&&(a.status="degraded",a.updatedAt=Date.now(),mn.debug("connection marked degraded",{connectionId:e,reason:o}),this.save().catch(n=>{mn.warn("failed to persist connections",{error:String(n)});}));}getConnectionsByPeer(e){let o=this.peerIndex.get(e);return o?Array.from(o).map(a=>this.connections.get(a)).filter(a=>a!==void 0&&a.status!=="closed"):[]}getConnectionsByService(e){let o=this.serviceIndex.get(e);return o?Array.from(o).map(a=>this.connections.get(a)).filter(a=>a!==void 0&&a.status!=="closed"):[]}getAllActiveConnections(){return Array.from(this.connections.values()).filter(e=>e.status!=="closed")}updateLastSeenMessageId(e,o){let a=this.connections.get(e);a&&(a.lastSeenMessageId=o,a.updatedAt=Date.now());}generateConnectionId(){return `conn-${this.generateShortId()}`}generateShortId(){return createHash("sha256").update(`${Date.now()}-${Math.random()}`).digest("hex").substring(0,8)}async save(){try{let e={version:1,connections:Array.from(this.connections.values()),peerIndex:Array.from(this.peerIndex.entries()).map(([a,n])=>({peerId:a,connectionIds:Array.from(n)})),serviceIndex:Array.from(this.serviceIndex.entries()).map(([a,n])=>({baseUrl:a,connectionIds:Array.from(n)})),savedAt:Date.now()},o=Be__default.dirname(this.storagePath);await Io__default.mkdir(o,{recursive:!0}),await Io__default.writeFile(this.storagePath,JSON.stringify(e,null,2),"utf-8"),mn.debug("connections saved",{count:this.connections.size,path:this.storagePath});}catch(e){throw mn.error("failed to save connections",{error:String(e)}),e}}async load(){try{if(!await Io__default.access(this.storagePath).then(()=>!0,()=>!1))return;let o=await Io__default.readFile(this.storagePath,"utf-8"),a=JSON.parse(o);if(a.connections)for(let n of a.connections)this.connections.set(n.connectionId,n);if(a.peerIndex)for(let n of a.peerIndex)this.peerIndex.set(n.peerId,new Set(n.connectionIds));if(a.serviceIndex)for(let n of a.serviceIndex)this.serviceIndex.set(n.baseUrl,new Set(n.connectionIds));mn.info("connections loaded",{count:this.connections.size,path:this.storagePath});}catch(e){mn.warn("failed to load connections",{error:String(e)});}}async close(){await this.save(),this.connections.clear(),this.peerIndex.clear(),this.serviceIndex.clear(),mn.info("connection registry closed");}};});var qi,qP,vu,xf,Ed,wf=U(()=>{k();le();qi=F.create({service:"session-router"}),qP=(i=>(i.EMPTY_CONTEXT="EMPTY_CONTEXT",i.AMBIGUOUS_ROUTE="AMBIGUOUS_ROUTE",i.NOT_FOUND="NOT_FOUND",i.CONNECTION_CLOSED="CONNECTION_CLOSED",i.MISSING_REQUIRED_PARAMS="MISSING_REQUIRED_PARAMS",i))(qP||{}),vu=class extends Error{constructor(o,a,n){super(a);this.code=o;this.context=n;this.name="RoutingError";}},xf=class t{static create(){return new t}constructor(){qi.info("session router created");}route(e){if(!this.isValidContext(e))return {success:false,error:"routing context is empty or invalid"};try{return e.connectionId?this.routeByConnectionId(e.connectionId):e.localPeerId&&e.baseUrl?this.routeByPeerAndBaseUrl(e.localPeerId,e.baseUrl):e.baseUrl&&e.sessionId?this.routeByBaseUrlAndSessionId(e.baseUrl,e.sessionId):{success:!1,error:"insufficient routing parameters: need connectionId, or peerId+baseUrl, or baseUrl+sessionId"}}catch(o){let a=o instanceof Error?o.message:String(o);return qi.error("routing failed",{context:e,error:a}),{success:false,error:a}}}routeOrThrow(e){let o=this.route(e);if(!o.success)throw new vu(this.getErrorCode(o.error),o.error??"routing failed",e);if(!o.connectionId)throw new vu("NOT_FOUND","connection not found",e);let a=this.getConnectionState(o.connectionId);if(!a)throw new vu("NOT_FOUND","connection state not found",e);if(a.status==="closed")throw new vu("CONNECTION_CLOSED","connection is closed",e);return a}registerConnection(e){return !e.connectionId||!e.localPeerId||!e.peerId||!e.baseUrl||!e.sessionId?{success:false,error:"invalid connection state: missing required fields"}:(qi.debug("connection registered",{connectionId:e.connectionId,localPeerId:e.localPeerId,peerId:e.peerId,baseUrl:e.baseUrl}),{success:true,connectionId:e.connectionId,sessionId:e.sessionId,localPeerId:e.localPeerId,peerId:e.peerId,baseUrl:e.baseUrl})}unregisterConnection(e){let o=this.getConnectionState(e);return o?(qi.debug("connection unregistered",{connectionId:e,localPeerId:o.localPeerId,peerId:o.peerId,baseUrl:o.baseUrl}),true):(qi.debug("connection not found for unregister",{connectionId:e}),false)}isValidContext(e){return !!(e.connectionId||e.peerId||e.baseUrl||e.sessionId)}routeByConnectionId(e){let o=this.getConnectionState(e);return o?o.status==="closed"?{success:false,error:`connection is closed: ${e}`}:{success:true,connectionId:o.connectionId,sessionId:o.sessionId,localPeerId:o.localPeerId,peerId:o.peerId,baseUrl:o.baseUrl}:{success:false,error:`connection not found: ${e}`}}routeByPeerAndBaseUrl(e,o){let n=this.getConnectionsByPeer(e).filter(r=>r.baseUrl===o&&r.status!=="closed");if(n.length===0)return {success:false,error:`no connection found for localPeerId=${e}, baseUrl=${o}`};if(n.length>1)return {success:false,error:`ambiguous route: multiple connections found for localPeerId=${e}, baseUrl=${o}`};let i=n[0];return {success:true,connectionId:i.connectionId,sessionId:i.sessionId,localPeerId:i.localPeerId,peerId:i.peerId,baseUrl:i.baseUrl}}routeByBaseUrlAndSessionId(e,o){let n=this.getConnectionsByService(e).filter(r=>r.sessionId===o&&r.status!=="closed");if(n.length===0)return {success:false,error:`no connection found for baseUrl=${e}, sessionId=${o}`};if(n.length>1)return {success:false,error:`ambiguous route: multiple connections found for baseUrl=${e}, sessionId=${o}`};let i=n[0];return {success:true,connectionId:i.connectionId,sessionId:i.sessionId,localPeerId:i.localPeerId,peerId:i.peerId,baseUrl:i.baseUrl}}getConnectionState(e){qi.warn("getConnectionState not implemented, returning undefined",{connectionId:e});}getConnectionsByPeer(e){return qi.warn("getConnectionsByPeer not implemented, returning empty array",{peerId:e}),[]}getConnectionsByService(e){return qi.warn("getConnectionsByService not implemented, returning empty array",{baseUrl:e}),[]}getErrorCode(e){return e?e.includes("empty")||e.includes("invalid")?"EMPTY_CONTEXT":e.includes("ambiguous")?"AMBIGUOUS_ROUTE":e.includes("not found")?"NOT_FOUND":e.includes("closed")?"CONNECTION_CLOSED":e.includes("insufficient")||e.includes("missing")?"MISSING_REQUIRED_PARAMS":"NOT_FOUND":"NOT_FOUND"}},Ed=class t extends xf{constructor(o){super();X(this,"registry");this.registry=o,qi.info("registry session router created");}static fromRegistry(o){return new t(o)}getConnectionState(o){return this.registry.resolve(o)}getConnectionsByPeer(o){return this.registry.getConnectionsByPeer(o)}getConnectionsByService(o){return this.registry.getConnectionsByService(o)}};});var da,jP,FP,lw,cw=U(()=>{k();le();da=F.create({service:"history-selector"}),jP=10,FP=1e5,lw=class t{constructor(e){X(this,"storagePath");X(this,"defaultHistoryWindowSize");X(this,"defaultTokenBudget");X(this,"avgTokensPerMessage");X(this,"sessionCache",new Map);X(this,"registry");this.storagePath=e?.storagePath??".easbot/session-history.json",this.defaultHistoryWindowSize=e?.defaultHistoryWindowSize??jP,this.defaultTokenBudget=e?.defaultTokenBudget??FP,this.avgTokensPerMessage=e?.avgTokensPerMessage??500,da.info("history selector created",{storagePath:this.storagePath,defaultHistoryScope:"session",defaultHistoryWindowSize:this.defaultHistoryWindowSize});}static create(e){return new t(e)}static fromRegistry(e,o){let a=new t(o);return a.registry=e,a}async select(e){let{scope:o,windowSize:a,currentSessionId:n,peerId:i,tokenBudget:r}=e,s=r??this.defaultTokenBudget,u=a??this.defaultHistoryWindowSize;switch(da.debug("selecting history",{scope:o,windowSize:u,peerId:i,currentSessionId:n}),await this.ensureStorageLoaded(),o){case "session":return this.loadSessionHistory(n,s);case "peer":return this.loadPeerHistory(i,n,u,s);case "global":return this.loadGlobalHistory(i,u,s);default:return this.loadSessionHistory(n,s)}}async composeContext(e,o){let a=o??this.defaultTokenBudget;await this.ensureStorageLoaded();let n=[],i=[],r=0;for(let s of e){let u=await this.loadSessionMessages(s);if(u.length===0)continue;let l=this.estimateTokens(u);if(r+l>a){let c=a-r,d=this.truncateMessages(u,c);n.push(...d),r+=this.estimateTokens(d);break}n.push(...u),i.push(s),r+=l;}return da.debug("composed context",{sessionCount:e.length,selectedSessions:i.length,totalTokens:r}),{messages:n,sourceSessions:i,totalTokens:r}}async addMessage(e,o){await this.ensureStorageLoaded();let a=this.sessionCache.get(e);a||(a={sessionId:e,peerId:"unknown",baseUrl:"unknown",messages:[],createdAt:Date.now(),updatedAt:Date.now(),isGlobal:false},this.sessionCache.set(e,a)),a.messages.push({...o,timestamp:Date.now()}),a.updatedAt=Date.now(),await this.saveStorage(),da.debug("message added to session",{sessionId:e,messageId:o.id});}async markAsGlobal(e,o,a){await this.ensureStorageLoaded();let n=this.sessionCache.get(e);n?(n.isGlobal=true,n.peerId=o,n.baseUrl=a,n.updatedAt=Date.now()):(n={sessionId:e,peerId:o,baseUrl:a,messages:[],createdAt:Date.now(),updatedAt:Date.now(),isGlobal:true},this.sessionCache.set(e,n)),await this.saveStorage(),da.debug("session marked as global",{sessionId:e,peerId:o});}async loadSessionHistory(e,o){da.debug("loading session history",{sessionId:e,tokenBudget:o});let a=await this.loadSessionMessages(e),i=this.estimateTokens(a)>o?this.truncateMessages(a,o):a;return {messages:i,sourceSessions:[e],totalTokens:this.estimateTokens(i)}}async loadPeerHistory(e,o,a,n){da.debug("loading peer history",{peerId:e,currentSessionId:o,windowSize:a,tokenBudget:n});let i=await this.getRecentSessionsForPeer(e,a);return this.composeContext(i,n)}async loadGlobalHistory(e,o,a){da.debug("loading global history",{peerId:e,windowSize:o,tokenBudget:a});let n=await this.getSharedSessions(e,o);return this.composeContext(n,a)}async getRecentSessionsForPeer(e,o){if(this.registry){let i=this.registry.getConnectionsByPeer(e).map(r=>r.sessionId).filter(r=>r!==void 0);if(i.length>0)return i.slice(0,o)}let a=Array.from(this.sessionCache.values()).filter(n=>n.peerId===e).sort((n,i)=>i.updatedAt-n.updatedAt).slice(0,o).map(n=>n.sessionId);return da.debug("recent sessions for peer",{peerId:e,count:a.length,limit:o}),a}async getSharedSessions(e,o){let a=Array.from(this.sessionCache.values()).filter(n=>n.isGlobal).sort((n,i)=>i.updatedAt-n.updatedAt).slice(0,o).map(n=>n.sessionId);return da.debug("shared sessions",{peerId:e,count:a.length,limit:o}),a}async loadSessionMessages(e){let o=this.sessionCache.get(e);return !o||o.messages.length===0?(da.debug("no messages found for session",{sessionId:e}),[]):o.messages.map(a=>({id:a.id,role:a.role,content:a.content,metadata:a.metadata}))}estimateTokens(e){return e.length===0?0:e.length*this.avgTokensPerMessage}truncateMessages(e,o){if(e.length===0||o<=0)return [];let a=Math.floor(o/this.avgTokensPerMessage);if(e.length<=a)return e;let n=e.slice(-a);return da.debug("messages truncated",{originalCount:e.length,truncatedCount:n.length,maxTokens:o}),n}async ensureStorageLoaded(){if(!(this.sessionCache.size>0))try{if(!await Io__default.access(this.storagePath).then(()=>!0,()=>!1))return;let o=await Io__default.readFile(this.storagePath,"utf-8"),a=JSON.parse(o);if(a.sessions)for(let n of a.sessions)this.sessionCache.set(n.sessionId,n);da.debug("session storage loaded",{count:this.sessionCache.size});}catch(e){da.warn("failed to load session storage",{error:String(e)});}}async saveStorage(){try{let e=Array.from(this.sessionCache.values()),o={version:1,sessions:e,savedAt:Date.now()},a=Be__default.dirname(this.storagePath);await Io__default.mkdir(a,{recursive:!0}),await Io__default.writeFile(this.storagePath,JSON.stringify(o,null,2),"utf-8"),da.debug("session storage saved",{count:e.length});}catch(e){throw da.error("failed to save session storage",{error:String(e)}),e}}async close(){await this.saveStorage(),this.sessionCache.clear(),this.registry=void 0,da.info("history selector closed");}};});var pw={};Oe(pw,{default:()=>bf});var bf,yf=U(()=>{bf={name:"@easbot/agent",version:"0.1.12",description:"Core Agent for the easbot monorepo ecosystem",type:"module",main:"dist/index.cjs",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.cjs"},"./package.json":"./package.json"},bin:{easbot:"./dist/cli.mjs"},scripts:{dev:"cross-env NODE_ENV=development tsx src/cli.ts -- tui",start:"cross-env NODE_ENV=production node dist/cli.mjs tui --new",build:"tsup --env.NODE_ENV production",test:"vitest","test:run":"vitest run","test:ui":"vitest --ui","test:watch":"vitest --watch","test:coverage":"vitest run --coverage","test:unit":"vitest run --config ./vitest.unit.config.ts","test:unit:watch":"vitest --config ./vitest.unit.config.ts","test:integration":"vitest run --config ./vitest.integration.config.ts","test:integration:watch":"vitest --config ./vitest.integration.config.ts","test:e2e":"vitest run --config ./vitest.e2e.config.ts","test:e2e:watch":"vitest --config ./vitest.e2e.config.ts",lint:"biome check .","lint:fix":"biome check --write .","lint:fix:unsafe":"biome check --write --unsafe ./src","lint:report":"biome check --reporter=summary .",format:"biome format .","format:fix":"biome format --write .","type-check":"tsc --noEmit",clean:"npx rimraf dist node_modules",prepare:"echo 'agent: Bun environment ready for CLI usage'","publish:npm":"bash scripts/publish.sh","publish:npm:win":"powershell -ExecutionPolicy Bypass -File scripts/publish.ps1"},keywords:["ai","agent","eas","bot","automation"],author:"houjallen",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/houjallen/easbot.git",directory:"packages/agent"},homepage:"https://github.com/houjallen/easbot/tree/main/packages/agent#readme",bugs:{url:"https://github.com/houjallen/easbot/issues"},files:["dist","README.md","README.en.md","LICENSE"],dependencies:{"@agentclientprotocol/sdk":"^0.18.0","@ai-sdk/amazon-bedrock":"4.0.82","@ai-sdk/anthropic":"3.0.63","@ai-sdk/alibaba":"^2.0.0-beta.33","@ai-sdk/azure":"3.0.49","@ai-sdk/cerebras":"^2.0.41","@ai-sdk/cohere":"3.0.27","@ai-sdk/deepinfra":"^2.0.41","@ai-sdk/gateway":"^3.0.78","@ai-sdk/google":"3.0.52","@ai-sdk/google-vertex":"^4.0.93","@ai-sdk/groq":"3.0.31","@ai-sdk/mistral":"3.0.27","@ai-sdk/openai":"3.0.48","@ai-sdk/openai-compatible":"2.0.37","@ai-sdk/perplexity":"^3.0.26","@ai-sdk/provider":"^3.0.8","@ai-sdk/provider-utils":"^4.0.21","@ai-sdk/togetherai":"^2.0.41","@ai-sdk/vercel":"^2.0.39","@ai-sdk/xai":"^3.0.73","@aws-sdk/credential-providers":"^3.1014.0","@clack/prompts":"^1.1.0","@easbot/plugin":"workspace:*","@easbot/codebase":"workspace:*","@easbot/memory":"workspace:*","@easbot/note":"workspace:*","@easbot/types":"workspace:*","@easbot/tui":"workspace:*","@easbot/utils":"workspace:*","@easbot/sdk":"workspace:*","@easbot/local-model-sdk":"workspace:*","@easbot/ollama-sdk":"workspace:*","@easbot/gateway":"workspace:*","@hono/node-server":"^2.0.0","@hono/node-ws":"^1.3.0","@hono/standard-validator":"^0.2.2","@hono/zod-validator":"^0.7.6","@mariozechner/pi-agent-core":"0.62.0","@mariozechner/pi-ai":"0.62.0","@mariozechner/pi-coding-agent":"0.62.0","@modelcontextprotocol/sdk":"^1.27.1","@openrouter/ai-sdk-provider":"^2.3.3","@parcel/watcher":"^2.5.6","@sinclair/typebox":"0.34.48","@solid-primitives/event-bus":"1.1.3","@solid-primitives/scheduled":"1.5.3","@standard-schema/spec":"1.1.0","@types/semver":"^7.7.1","@wasmer/wasi":"^1.2.2","@types/cross-spawn":"^6.0.6","@zip.js/zip.js":"^2.8.23",ai:"^6.0.136","ai-gateway-provider":"^3.1.2",ajv:"^8.18.0",axios:"^1.15.2","bash-parser":"^0.5.0","bonjour-service":"^1.3.0",chalk:"^5.6.2",clipboardy:"^5.3.1",commander:"^14.0.3","cross-spawn":"^7.0.6","decimal.js":"^10.6.0",diff:"^8.0.4","drizzle-orm":"^0.45.2",fuzzysort:"^3.1.0","fast-check":"^4.6.0","gitlab-ai-provider":"^6.6.0",glob:"^13.0.6","gray-matter":"^4.0.3",hono:"^4.12.14","hono-openapi":"^1.3.0",ignore:"^7.0.5",jiti:"^2.6.1","jsonc-parser":"^3.3.1","lru-cache":"^11.3.0",minimatch:"^10.2.4","node-gyp":"^12.3.0","node-html-parser":"^7.1.0","node-pty":"^1.1.0",open:"^11.0.0",remeda:"^2.33.6",semver:"^7.7.4","tree-sitter-bash":"^0.25.1",turndown:"^7.2.2",ulid:"^3.0.2","vscode-jsonrpc":"^8.2.1",which:"^6.0.1","xdg-basedir":"^5.1.0",zod:"^4.3.6",ws:"^8.20.0","jieba-wasm":"^2.4.0","vscode-languageserver-types":"3.17.5","why-is-node-running":"^3.2.2","zod-to-json-schema":"^3.25.1"},devDependencies:{"@actions/core":"^3.0.0","@actions/github":"^9.0.0","@octokit/graphql":"^9.0.3","@octokit/rest":"^22.0.1","@octokit/webhooks-types":"^7.6.1","@types/node":"^22.17.0","@types/which":"^3.0.4","@types/ws":"^8.18.1","@types/turndown":"^5.0.6","@vitest/coverage-v8":"^4.1.1",dotenv:"^17.3.1",esbuild:"^0.27.4","esbuild-plugin-alias":"^0.2.1",tsup:"^8.5.1",tsx:"^4.21.0",typescript:"^6.0.2",vitest:"^4.1.1"}};});var ns={};Oe(ns,{Global:()=>pe});var Ad,vf,YP,XP,ZP,pe,vt=U(()=>{k();yf();Ad="easbot",vf=Be__default.join(xdgData,Ad),YP=Be__default.join(xdgCache,Ad),XP=Be__default.join(xdgConfig,Ad),ZP=Be__default.join(xdgState,Ad);(d=>{d.Path={get home(){return process.env.EASBOT_TEST_HOME||Im.homedir()},data:vf,bin:Be__default.join(vf,"bin"),log:Be__default.join(vf,"log"),cache:YP,config:XP,state:ZP};let e=null,o=null;async function a(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{let p=await Promise.resolve().then(()=>(yf(),pw));e=p.default?.version||p.version||"local";}catch{e="local";}return e||"local"}function n(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{e=bf.version||"local";}catch{e="local";}return e||"local"}d.getVersion=n;function i(){if(o)return o;if(process.env.EASBOT_CHANNEL)return o=process.env.EASBOT_CHANNEL,o;let p=n();return p==="local"||p.includes("dev")?o="local":p.includes("beta")||p.includes("alpha")?o="preview":o="latest",o||"local"}d.getChannel=i;function r(){return i()==="local"}d.isLocal=r;function s(){return i()==="preview"}d.isPreview=s;let u=false,l=null;async function c(){if(!u)return l||(l=(async()=>{await a(),await Promise.all([mkdir(d.Path.data,{recursive:true}),mkdir(d.Path.config,{recursive:true}),mkdir(d.Path.state,{recursive:true}),mkdir(d.Path.log,{recursive:true}),mkdir(d.Path.bin,{recursive:true}),mkdir(d.Path.cache,{recursive:true})]).then(()=>{process.env.EASBOT_DATA_PATH=d.Path.data,process.env.EASBOT_CONFIG_PATH=d.Path.config,process.env.EASBOT_STATE_PATH=d.Path.state,process.env.EASBOT_LOG_PATH=d.Path.log,process.env.EASBOT_BIN_PATH=d.Path.bin,process.env.EASBOT_CACHE_PATH=d.Path.cache;});let p="1",m=Be__default.join(d.Path.cache,"version");if(await readFile(m,"utf-8").catch(()=>"0")!==p){try{let f=await readdir(d.Path.cache);await Promise.all(f.map(b=>rm$1(Be__default.join(d.Path.cache,b),{recursive:!0,force:!0})));}catch{}await writeFile(m,p);}u=true;})(),l)}d.init=c;})(pe||(pe={}));});function ci(t={}){let e=t.port??3e3,o=t.hostname??"0.0.0.0",a=new Hono({strict:true,getPath:r=>{try{return new URL(r.url).pathname}catch{return r.url}}});if(t.onError?a.onError(t.onError):a.onError((r,s)=>(is.error("Server error",{error:r.message,stack:r.stack}),r instanceof HTTPException?r.getResponse():s.json({error:"Internal Server Error",message:r.message},500))),t.onNotFound?a.notFound(t.onNotFound):a.notFound(r=>r.json({error:"Not Found",path:r.req.path},404)),!t.websockets&&t.cors&&a.use(cors(typeof t.cors=="boolean"?{origin:"*"}:t.cors)),a.use(logger((r,...s)=>is.info(r,s))),!t.websockets&&t.secureHeaders&&a.use(secureHeaders()),!t.websockets&&t.compression&&a.use(compress({encoding:"gzip"})),!t.websockets&&t.timeout&&a.use(timeout(t.timeout)),t.middlewares)for(let r of t.middlewares)r.path?a.use(r.path,r.handler):a.use(r.handler);if(t.routes)for(let r of t.routes){let s=r.middlewares||[],u=r.method.toUpperCase();r.validation?a.on(u,r.path,zValidator("json",r.validation),...s,r.handler):a.on(u,r.path,...s,r.handler);}t.rpc&&a.post("/rpc/:method",async r=>{let s=r.req.param("method"),u=t.rpc?.[s];if(!u)return r.json({error:"RPC method not found"},404);try{let l=await r.req.json(),c=await u(l,r);return r.json({result:c})}catch(l){return is.error("RPC error",{method:s,error:l.message}),r.json({error:"RPC execution failed",message:l.message},500)}}),t.fetch&&a.all("*",async r=>await t.fetch(r.req.raw));let n=null,i={url:new URL(`http://${o}:${e}`),port:e,hostname:o,hono:a,async stop(r=false){return n?new Promise((s,u)=>{r&&n.closeAllConnections?.(),n.close(l=>{l?(is.error("Error closing server",{error:l.message}),u(l)):(n=null,is.info(`Server on port ${e} stopped`),s());}),setTimeout(()=>{is.warn(`Server shutdown timeout on port ${e}`),n=null,s();},5e3);}):Promise.resolve()},get raw(){return n||void 0}};return n=serve({fetch:a.fetch,port:e,hostname:o}),is.info(`Server running on http://${o}:${e}`),i}function dw(t){return ci({rpc:t,port:3e3})}function mw(t,e={}){return ci({...e,routes:t})}function gw(t,e={}){return ci({...e,websockets:t})}function fw(t,e={}){let o=Object.entries(t).map(([a,n])=>({method:"get",path:`/stream/${a}`,handler:i=>streamSSE(i,async r=>{for await(let s of n(i))await r.writeSSE(s);})}));return ci({...e,routes:o,streaming:true})}var is,Md=U(()=>{k();le();is=F.create({service:"server"});});var Iu,kf=U(()=>{k();le();(n=>{let t=F.create({service:"pkg-registry"});function e(){return process.platform==="win32"?"cmd":"npm"}async function o(i,r,s){return new Promise(u=>{let l=process.platform==="win32"?["/c","npm","view",i,r]:["view",i,r],c=spawn(e(),l,{cwd:s,env:{...process.env}}),d="",p="";c.stdout?.on("data",m=>{d+=m.toString();}),c.stderr?.on("data",m=>{p+=m.toString();}),c.on("close",m=>{m!==0?(t.warn("npm view failed",{pkg:i,field:r,code:m,stderr:p}),u(null)):u(d.trim());}),c.on("error",()=>{t.error("npm view error",{pkg:i,field:r,error:"unknown"}),u(null);});})}n.info=o;async function a(i,r,s){let u=await o(i,"version",s);return u?/[\s^~*xX<>|=]/.test(r)?!Dd.satisfies(u,r):Dd.compare(r,u)===-1:(t.warn("Failed to resolve latest version, using cached",{pkg:i,cachedVersion:r}),false)}n.isOutdated=a;})(Iu||(Iu={}));});var Mc=CP((Mz,Gw)=>{k();var Ef=Object.defineProperty,pE=Object.getOwnPropertyDescriptor,dE=Object.getOwnPropertyNames,mE=Object.prototype.hasOwnProperty,gE=(t,e)=>{for(var o in e)Ef(t,o,{get:e[o],enumerable:true});},fE=(t,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of dE(e))!mE.call(t,n)&&n!==o&&Ef(t,n,{get:()=>e[n],enumerable:!(a=pE(e,n))||a.enumerable});return t},hE=t=>fE(Ef({},"__esModule",{value:true}),t),Tc={};gE(Tc,{analyzeMetafile:()=>WE,analyzeMetafileSync:()=>YE,build:()=>UE,buildSync:()=>VE,context:()=>zE,default:()=>tT,formatMessages:()=>QE,formatMessagesSync:()=>JE,initialize:()=>ZE,stop:()=>XE,transform:()=>HE,transformSync:()=>KE,version:()=>$E});Gw.exports=hE(Tc);function _w(t){let e=a=>{if(a===null)o.write8(0);else if(typeof a=="boolean")o.write8(1),o.write8(+a);else if(typeof a=="number")o.write8(2),o.write32(a|0);else if(typeof a=="string")o.write8(3),o.write(Xn(a));else if(a instanceof Uint8Array)o.write8(4),o.write(a);else if(a instanceof Array){o.write8(5),o.write32(a.length);for(let n of a)e(n);}else {let n=Object.keys(a);o.write8(6),o.write32(n.length);for(let i of n)o.write(Xn(i)),e(a[i]);}},o=new Pw;return o.write32(0),o.write32(t.id<<1|+!t.isRequest),e(t.value),Sf(o.buf,o.len-4,0),o.buf.subarray(0,o.len)}function _E(t){let e=()=>{switch(o.read8()){case 0:return null;case 1:return !!o.read8();case 2:return o.read32();case 3:return cs(o.read());case 4:return o.read();case 5:{let r=o.read32(),s=[];for(let u=0;u<r;u++)s.push(e());return s}case 6:{let r=o.read32(),s={};for(let u=0;u<r;u++)s[cs(o.read())]=e();return s}default:throw new Error("Invalid packet")}},o=new Pw(t),a=o.read32(),n=(a&1)===0;a>>>=1;let i=e();if(o.ptr!==t.length)throw new Error("Invalid packet");return {id:a,isRequest:n,value:i}}var Pw=class{constructor(t=new Uint8Array(1024)){this.buf=t,this.len=0,this.ptr=0;}_write(t){if(this.len+t>this.buf.length){let e=new Uint8Array((this.len+t)*2);e.set(this.buf),this.buf=e;}return this.len+=t,this.len-t}write8(t){let e=this._write(1);this.buf[e]=t;}write32(t){let e=this._write(4);Sf(this.buf,t,e);}write(t){let e=this._write(4+t.length);Sf(this.buf,t.length,e),this.buf.set(t,e+4);}_read(t){if(this.ptr+t>this.buf.length)throw new Error("Invalid packet");return this.ptr+=t,this.ptr-t}read8(){return this.buf[this._read(1)]}read32(){return Ew(this.buf,this._read(4))}read(){let t=this.read32(),e=new Uint8Array(t),o=this._read(e.length);return e.set(this.buf.subarray(o,o+t)),e}},Xn,cs,If;if(typeof TextEncoder<"u"&&typeof TextDecoder<"u"){let t=new TextEncoder,e=new TextDecoder;Xn=o=>t.encode(o),cs=o=>e.decode(o),If='new TextEncoder().encode("")';}else if(typeof Buffer<"u")Xn=t=>Buffer.from(t),cs=t=>{let{buffer:e,byteOffset:o,byteLength:a}=t;return Buffer.from(e,o,a).toString()},If='Buffer.from("")';else throw new Error("No UTF-8 codec found");if(!(Xn("")instanceof Uint8Array))throw new Error(`Invariant violation: "${If} instanceof Uint8Array" is incorrectly false
|
|
2
|
+
`}let P={debug(T,M){a("DEBUG")&&p("DEBUG "+I(T,M));},info(T,M){a("INFO")&&p("INFO "+I(T,M));},error(T,M){a("ERROR")&&p("ERROR "+I(T,M));},warn(T,M){a("WARN")&&p("WARN "+I(T,M));},tag(T,M){return S&&(S[T]=M),P},clone(){return v.create({...S})},time(T,M){let D=Date.now();P.info(T,{status:"started",...M});function O(){P.info(T,{status:"completed",duration:Date.now()-D,...M});}return {stop:O,[Symbol.dispose](){O();}}}};return h&&typeof h=="string"&&i.set(h,P),P}v.create=_;})(F||(F={}));});var mn,Bi,Pd=U(()=>{k();le();mn=F.create({service:"connection-registry"}),Bi=class t{constructor(e){X(this,"storagePath");X(this,"defaultHistoryScope");X(this,"defaultHistoryWindowSize");X(this,"defaultDegradePolicy");X(this,"peerIndex",new Map);X(this,"serviceIndex",new Map);X(this,"connections",new Map);this.storagePath=e?.storagePath??".easbot/client-connections.json",this.defaultHistoryScope=e?.defaultHistoryScope??"session",this.defaultHistoryWindowSize=e?.defaultHistoryWindowSize??10,this.defaultDegradePolicy=e?.defaultDegradePolicy??"streaming_first",mn.info("connection registry created",{storagePath:this.storagePath,defaultHistoryScope:this.defaultHistoryScope});}static async create(e){let o=new t(e);return await o.load(),o}connect(e,o,a,n,i){let r=this.peerIndex.get(o);if(r)for(let c of r){let d=this.connections.get(c);if(d&&d.baseUrl===e&&d.status!=="closed")return n&&d.sessionId!==n&&(d.sessionId=n,d.sessionSequence=d.sessionSequence??[],d.sessionSequence.includes(n)||d.sessionSequence.push(n)),i&&(d.localSessionId=i),d.updatedAt=Date.now(),mn.debug("reused existing connection",{connectionId:c,localPeerId:o,baseUrl:e}),{connectionId:d.connectionId,sessionId:d.sessionId,localPeerId:d.localPeerId,peerId:d.peerId,baseUrl:d.baseUrl}}let s=this.generateConnectionId(),u=n??`session-${this.generateShortId()}`,l={localPeerId:o,peerId:a,connectionId:s,sessionId:u,...i?{localSessionId:i}:{},baseUrl:e,historyScope:this.defaultHistoryScope,historyWindowSize:this.defaultHistoryWindowSize,degradePolicy:this.defaultDegradePolicy,updatedAt:Date.now(),status:"active"};return this.connections.set(s,l),this.peerIndex.has(o)||this.peerIndex.set(o,new Set),this.peerIndex.get(o).add(s),this.serviceIndex.has(e)||this.serviceIndex.set(e,new Set),this.serviceIndex.get(e).add(s),this.save().catch(c=>{mn.warn("failed to persist connections",{error:String(c)});}),mn.debug("new connection created",{connectionId:s,localPeerId:o,peerId:a,baseUrl:e}),{connectionId:s,sessionId:u,localPeerId:o,peerId:a,baseUrl:e}}resolve(e,o=false){let a=this.connections.get(e);if(a)return a;let n=this.peerIndex.get(e);if(n&&n.size>0)for(let i of n){let r=this.connections.get(i);if(r&&r.status!=="closed")return r}for(let i of this.connections.values())if(i.status!=="closed"&&(i.sessionId===e||i.localSessionId===e))return i;if(o){let s=this.connect("http://localhost","system-local","system-remote",e);return this.connections.get(s.connectionId)}}closeConnection(e){let o=this.connections.get(e);if(!o)return;this.connections.delete(e);let a=this.peerIndex.get(o.localPeerId);a&&(a.delete(e),a.size===0&&this.peerIndex.delete(o.localPeerId));let n=this.serviceIndex.get(o.baseUrl);n&&(n.delete(e),n.size===0&&this.serviceIndex.delete(o.baseUrl)),mn.info("connection closed and removed",{connectionId:e,localPeerId:o.localPeerId,peerId:o.peerId}),this.save().catch(i=>{mn.warn("failed to persist connections",{error:String(i)});});}markDegraded(e,o){let a=this.connections.get(e);a&&(a.status="degraded",a.updatedAt=Date.now(),mn.debug("connection marked degraded",{connectionId:e,reason:o}),this.save().catch(n=>{mn.warn("failed to persist connections",{error:String(n)});}));}getConnectionsByPeer(e){let o=this.peerIndex.get(e);return o?Array.from(o).map(a=>this.connections.get(a)).filter(a=>a!==void 0&&a.status!=="closed"):[]}getConnectionsByService(e){let o=this.serviceIndex.get(e);return o?Array.from(o).map(a=>this.connections.get(a)).filter(a=>a!==void 0&&a.status!=="closed"):[]}getAllActiveConnections(){return Array.from(this.connections.values()).filter(e=>e.status!=="closed")}updateLastSeenMessageId(e,o){let a=this.connections.get(e);a&&(a.lastSeenMessageId=o,a.updatedAt=Date.now());}generateConnectionId(){return `conn-${this.generateShortId()}`}generateShortId(){return createHash("sha256").update(`${Date.now()}-${Math.random()}`).digest("hex").substring(0,8)}async save(){try{let e={version:1,connections:Array.from(this.connections.values()),peerIndex:Array.from(this.peerIndex.entries()).map(([a,n])=>({peerId:a,connectionIds:Array.from(n)})),serviceIndex:Array.from(this.serviceIndex.entries()).map(([a,n])=>({baseUrl:a,connectionIds:Array.from(n)})),savedAt:Date.now()},o=Be__default.dirname(this.storagePath);await Io__default.mkdir(o,{recursive:!0}),await Io__default.writeFile(this.storagePath,JSON.stringify(e,null,2),"utf-8"),mn.debug("connections saved",{count:this.connections.size,path:this.storagePath});}catch(e){throw mn.error("failed to save connections",{error:String(e)}),e}}async load(){try{if(!await Io__default.access(this.storagePath).then(()=>!0,()=>!1))return;let o=await Io__default.readFile(this.storagePath,"utf-8"),a=JSON.parse(o);if(a.connections)for(let n of a.connections)this.connections.set(n.connectionId,n);if(a.peerIndex)for(let n of a.peerIndex)this.peerIndex.set(n.peerId,new Set(n.connectionIds));if(a.serviceIndex)for(let n of a.serviceIndex)this.serviceIndex.set(n.baseUrl,new Set(n.connectionIds));mn.info("connections loaded",{count:this.connections.size,path:this.storagePath});}catch(e){mn.warn("failed to load connections",{error:String(e)});}}async close(){await this.save(),this.connections.clear(),this.peerIndex.clear(),this.serviceIndex.clear(),mn.info("connection registry closed");}};});var qi,qP,vu,xf,Ed,wf=U(()=>{k();le();qi=F.create({service:"session-router"}),qP=(i=>(i.EMPTY_CONTEXT="EMPTY_CONTEXT",i.AMBIGUOUS_ROUTE="AMBIGUOUS_ROUTE",i.NOT_FOUND="NOT_FOUND",i.CONNECTION_CLOSED="CONNECTION_CLOSED",i.MISSING_REQUIRED_PARAMS="MISSING_REQUIRED_PARAMS",i))(qP||{}),vu=class extends Error{constructor(o,a,n){super(a);this.code=o;this.context=n;this.name="RoutingError";}},xf=class t{static create(){return new t}constructor(){qi.info("session router created");}route(e){if(!this.isValidContext(e))return {success:false,error:"routing context is empty or invalid"};try{return e.connectionId?this.routeByConnectionId(e.connectionId):e.localPeerId&&e.baseUrl?this.routeByPeerAndBaseUrl(e.localPeerId,e.baseUrl):e.baseUrl&&e.sessionId?this.routeByBaseUrlAndSessionId(e.baseUrl,e.sessionId):{success:!1,error:"insufficient routing parameters: need connectionId, or peerId+baseUrl, or baseUrl+sessionId"}}catch(o){let a=o instanceof Error?o.message:String(o);return qi.error("routing failed",{context:e,error:a}),{success:false,error:a}}}routeOrThrow(e){let o=this.route(e);if(!o.success)throw new vu(this.getErrorCode(o.error),o.error??"routing failed",e);if(!o.connectionId)throw new vu("NOT_FOUND","connection not found",e);let a=this.getConnectionState(o.connectionId);if(!a)throw new vu("NOT_FOUND","connection state not found",e);if(a.status==="closed")throw new vu("CONNECTION_CLOSED","connection is closed",e);return a}registerConnection(e){return !e.connectionId||!e.localPeerId||!e.peerId||!e.baseUrl||!e.sessionId?{success:false,error:"invalid connection state: missing required fields"}:(qi.debug("connection registered",{connectionId:e.connectionId,localPeerId:e.localPeerId,peerId:e.peerId,baseUrl:e.baseUrl}),{success:true,connectionId:e.connectionId,sessionId:e.sessionId,localPeerId:e.localPeerId,peerId:e.peerId,baseUrl:e.baseUrl})}unregisterConnection(e){let o=this.getConnectionState(e);return o?(qi.debug("connection unregistered",{connectionId:e,localPeerId:o.localPeerId,peerId:o.peerId,baseUrl:o.baseUrl}),true):(qi.debug("connection not found for unregister",{connectionId:e}),false)}isValidContext(e){return !!(e.connectionId||e.peerId||e.baseUrl||e.sessionId)}routeByConnectionId(e){let o=this.getConnectionState(e);return o?o.status==="closed"?{success:false,error:`connection is closed: ${e}`}:{success:true,connectionId:o.connectionId,sessionId:o.sessionId,localPeerId:o.localPeerId,peerId:o.peerId,baseUrl:o.baseUrl}:{success:false,error:`connection not found: ${e}`}}routeByPeerAndBaseUrl(e,o){let n=this.getConnectionsByPeer(e).filter(r=>r.baseUrl===o&&r.status!=="closed");if(n.length===0)return {success:false,error:`no connection found for localPeerId=${e}, baseUrl=${o}`};if(n.length>1)return {success:false,error:`ambiguous route: multiple connections found for localPeerId=${e}, baseUrl=${o}`};let i=n[0];return {success:true,connectionId:i.connectionId,sessionId:i.sessionId,localPeerId:i.localPeerId,peerId:i.peerId,baseUrl:i.baseUrl}}routeByBaseUrlAndSessionId(e,o){let n=this.getConnectionsByService(e).filter(r=>r.sessionId===o&&r.status!=="closed");if(n.length===0)return {success:false,error:`no connection found for baseUrl=${e}, sessionId=${o}`};if(n.length>1)return {success:false,error:`ambiguous route: multiple connections found for baseUrl=${e}, sessionId=${o}`};let i=n[0];return {success:true,connectionId:i.connectionId,sessionId:i.sessionId,localPeerId:i.localPeerId,peerId:i.peerId,baseUrl:i.baseUrl}}getConnectionState(e){qi.warn("getConnectionState not implemented, returning undefined",{connectionId:e});}getConnectionsByPeer(e){return qi.warn("getConnectionsByPeer not implemented, returning empty array",{peerId:e}),[]}getConnectionsByService(e){return qi.warn("getConnectionsByService not implemented, returning empty array",{baseUrl:e}),[]}getErrorCode(e){return e?e.includes("empty")||e.includes("invalid")?"EMPTY_CONTEXT":e.includes("ambiguous")?"AMBIGUOUS_ROUTE":e.includes("not found")?"NOT_FOUND":e.includes("closed")?"CONNECTION_CLOSED":e.includes("insufficient")||e.includes("missing")?"MISSING_REQUIRED_PARAMS":"NOT_FOUND":"NOT_FOUND"}},Ed=class t extends xf{constructor(o){super();X(this,"registry");this.registry=o,qi.info("registry session router created");}static fromRegistry(o){return new t(o)}getConnectionState(o){return this.registry.resolve(o)}getConnectionsByPeer(o){return this.registry.getConnectionsByPeer(o)}getConnectionsByService(o){return this.registry.getConnectionsByService(o)}};});var da,jP,FP,lw,cw=U(()=>{k();le();da=F.create({service:"history-selector"}),jP=10,FP=1e5,lw=class t{constructor(e){X(this,"storagePath");X(this,"defaultHistoryWindowSize");X(this,"defaultTokenBudget");X(this,"avgTokensPerMessage");X(this,"sessionCache",new Map);X(this,"registry");this.storagePath=e?.storagePath??".easbot/session-history.json",this.defaultHistoryWindowSize=e?.defaultHistoryWindowSize??jP,this.defaultTokenBudget=e?.defaultTokenBudget??FP,this.avgTokensPerMessage=e?.avgTokensPerMessage??500,da.info("history selector created",{storagePath:this.storagePath,defaultHistoryScope:"session",defaultHistoryWindowSize:this.defaultHistoryWindowSize});}static create(e){return new t(e)}static fromRegistry(e,o){let a=new t(o);return a.registry=e,a}async select(e){let{scope:o,windowSize:a,currentSessionId:n,peerId:i,tokenBudget:r}=e,s=r??this.defaultTokenBudget,u=a??this.defaultHistoryWindowSize;switch(da.debug("selecting history",{scope:o,windowSize:u,peerId:i,currentSessionId:n}),await this.ensureStorageLoaded(),o){case "session":return this.loadSessionHistory(n,s);case "peer":return this.loadPeerHistory(i,n,u,s);case "global":return this.loadGlobalHistory(i,u,s);default:return this.loadSessionHistory(n,s)}}async composeContext(e,o){let a=o??this.defaultTokenBudget;await this.ensureStorageLoaded();let n=[],i=[],r=0;for(let s of e){let u=await this.loadSessionMessages(s);if(u.length===0)continue;let l=this.estimateTokens(u);if(r+l>a){let c=a-r,d=this.truncateMessages(u,c);n.push(...d),r+=this.estimateTokens(d);break}n.push(...u),i.push(s),r+=l;}return da.debug("composed context",{sessionCount:e.length,selectedSessions:i.length,totalTokens:r}),{messages:n,sourceSessions:i,totalTokens:r}}async addMessage(e,o){await this.ensureStorageLoaded();let a=this.sessionCache.get(e);a||(a={sessionId:e,peerId:"unknown",baseUrl:"unknown",messages:[],createdAt:Date.now(),updatedAt:Date.now(),isGlobal:false},this.sessionCache.set(e,a)),a.messages.push({...o,timestamp:Date.now()}),a.updatedAt=Date.now(),await this.saveStorage(),da.debug("message added to session",{sessionId:e,messageId:o.id});}async markAsGlobal(e,o,a){await this.ensureStorageLoaded();let n=this.sessionCache.get(e);n?(n.isGlobal=true,n.peerId=o,n.baseUrl=a,n.updatedAt=Date.now()):(n={sessionId:e,peerId:o,baseUrl:a,messages:[],createdAt:Date.now(),updatedAt:Date.now(),isGlobal:true},this.sessionCache.set(e,n)),await this.saveStorage(),da.debug("session marked as global",{sessionId:e,peerId:o});}async loadSessionHistory(e,o){da.debug("loading session history",{sessionId:e,tokenBudget:o});let a=await this.loadSessionMessages(e),i=this.estimateTokens(a)>o?this.truncateMessages(a,o):a;return {messages:i,sourceSessions:[e],totalTokens:this.estimateTokens(i)}}async loadPeerHistory(e,o,a,n){da.debug("loading peer history",{peerId:e,currentSessionId:o,windowSize:a,tokenBudget:n});let i=await this.getRecentSessionsForPeer(e,a);return this.composeContext(i,n)}async loadGlobalHistory(e,o,a){da.debug("loading global history",{peerId:e,windowSize:o,tokenBudget:a});let n=await this.getSharedSessions(e,o);return this.composeContext(n,a)}async getRecentSessionsForPeer(e,o){if(this.registry){let i=this.registry.getConnectionsByPeer(e).map(r=>r.sessionId).filter(r=>r!==void 0);if(i.length>0)return i.slice(0,o)}let a=Array.from(this.sessionCache.values()).filter(n=>n.peerId===e).sort((n,i)=>i.updatedAt-n.updatedAt).slice(0,o).map(n=>n.sessionId);return da.debug("recent sessions for peer",{peerId:e,count:a.length,limit:o}),a}async getSharedSessions(e,o){let a=Array.from(this.sessionCache.values()).filter(n=>n.isGlobal).sort((n,i)=>i.updatedAt-n.updatedAt).slice(0,o).map(n=>n.sessionId);return da.debug("shared sessions",{peerId:e,count:a.length,limit:o}),a}async loadSessionMessages(e){let o=this.sessionCache.get(e);return !o||o.messages.length===0?(da.debug("no messages found for session",{sessionId:e}),[]):o.messages.map(a=>({id:a.id,role:a.role,content:a.content,metadata:a.metadata}))}estimateTokens(e){return e.length===0?0:e.length*this.avgTokensPerMessage}truncateMessages(e,o){if(e.length===0||o<=0)return [];let a=Math.floor(o/this.avgTokensPerMessage);if(e.length<=a)return e;let n=e.slice(-a);return da.debug("messages truncated",{originalCount:e.length,truncatedCount:n.length,maxTokens:o}),n}async ensureStorageLoaded(){if(!(this.sessionCache.size>0))try{if(!await Io__default.access(this.storagePath).then(()=>!0,()=>!1))return;let o=await Io__default.readFile(this.storagePath,"utf-8"),a=JSON.parse(o);if(a.sessions)for(let n of a.sessions)this.sessionCache.set(n.sessionId,n);da.debug("session storage loaded",{count:this.sessionCache.size});}catch(e){da.warn("failed to load session storage",{error:String(e)});}}async saveStorage(){try{let e=Array.from(this.sessionCache.values()),o={version:1,sessions:e,savedAt:Date.now()},a=Be__default.dirname(this.storagePath);await Io__default.mkdir(a,{recursive:!0}),await Io__default.writeFile(this.storagePath,JSON.stringify(o,null,2),"utf-8"),da.debug("session storage saved",{count:e.length});}catch(e){throw da.error("failed to save session storage",{error:String(e)}),e}}async close(){await this.saveStorage(),this.sessionCache.clear(),this.registry=void 0,da.info("history selector closed");}};});var pw={};Oe(pw,{default:()=>bf});var bf,yf=U(()=>{bf={name:"@easbot/agent",version:"0.1.13",description:"Core Agent for the easbot monorepo ecosystem",type:"module",main:"dist/index.cjs",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.cjs"},"./package.json":"./package.json"},bin:{easbot:"./dist/cli.mjs"},scripts:{dev:"cross-env NODE_ENV=development tsx src/cli.ts -- tui",start:"cross-env NODE_ENV=production node dist/cli.mjs tui --new",build:"tsup --env.NODE_ENV production",test:"vitest","test:run":"vitest run","test:ui":"vitest --ui","test:watch":"vitest --watch","test:coverage":"vitest run --coverage","test:unit":"vitest run --config ./vitest.unit.config.ts","test:unit:watch":"vitest --config ./vitest.unit.config.ts","test:integration":"vitest run --config ./vitest.integration.config.ts","test:integration:watch":"vitest --config ./vitest.integration.config.ts","test:e2e":"vitest run --config ./vitest.e2e.config.ts","test:e2e:watch":"vitest --config ./vitest.e2e.config.ts",lint:"biome check .","lint:fix":"biome check --write .","lint:fix:unsafe":"biome check --write --unsafe ./src","lint:report":"biome check --reporter=summary .",format:"biome format .","format:fix":"biome format --write .","type-check":"tsc --noEmit",clean:"npx rimraf dist node_modules",prepare:"echo 'agent: Bun environment ready for CLI usage'","publish:npm":"bash scripts/publish.sh","publish:npm:win":"powershell -ExecutionPolicy Bypass -File scripts/publish.ps1"},keywords:["ai","agent","eas","bot","automation"],author:"houjallen",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/houjallen/easbot.git",directory:"packages/agent"},homepage:"https://github.com/houjallen/easbot/tree/main/packages/agent#readme",bugs:{url:"https://github.com/houjallen/easbot/issues"},files:["dist","README.md","README.en.md","LICENSE"],dependencies:{"@agentclientprotocol/sdk":"^0.18.0","@ai-sdk/amazon-bedrock":"4.0.82","@ai-sdk/anthropic":"3.0.63","@ai-sdk/alibaba":"^2.0.0-beta.33","@ai-sdk/azure":"3.0.49","@ai-sdk/cerebras":"^2.0.41","@ai-sdk/cohere":"3.0.27","@ai-sdk/deepinfra":"^2.0.41","@ai-sdk/gateway":"^3.0.78","@ai-sdk/google":"3.0.52","@ai-sdk/google-vertex":"^4.0.93","@ai-sdk/groq":"3.0.31","@ai-sdk/mistral":"3.0.27","@ai-sdk/openai":"3.0.48","@ai-sdk/openai-compatible":"2.0.37","@ai-sdk/perplexity":"^3.0.26","@ai-sdk/provider":"^3.0.8","@ai-sdk/provider-utils":"^4.0.21","@ai-sdk/togetherai":"^2.0.41","@ai-sdk/vercel":"^2.0.39","@ai-sdk/xai":"^3.0.73","@aws-sdk/credential-providers":"^3.1014.0","@clack/prompts":"^1.1.0","@easbot/plugin":"workspace:*","@easbot/codebase":"workspace:*","@easbot/memory":"workspace:*","@easbot/note":"workspace:*","@easbot/types":"workspace:*","@easbot/tui":"workspace:*","@easbot/utils":"workspace:*","@easbot/sdk":"workspace:*","@easbot/local-model-sdk":"workspace:*","@easbot/ollama-sdk":"workspace:*","@easbot/gateway":"workspace:*","@hono/node-server":"^2.0.0","@hono/node-ws":"^1.3.0","@hono/standard-validator":"^0.2.2","@hono/zod-validator":"^0.7.6","@mariozechner/pi-agent-core":"0.62.0","@mariozechner/pi-ai":"0.62.0","@mariozechner/pi-coding-agent":"0.62.0","@modelcontextprotocol/sdk":"^1.27.1","@openrouter/ai-sdk-provider":"^2.3.3","@parcel/watcher":"^2.5.6","@sinclair/typebox":"0.34.48","@solid-primitives/event-bus":"1.1.3","@solid-primitives/scheduled":"1.5.3","@standard-schema/spec":"1.1.0","@types/semver":"^7.7.1","@wasmer/wasi":"^1.2.2","@types/cross-spawn":"^6.0.6","@zip.js/zip.js":"^2.8.23",ai:"^6.0.136","ai-gateway-provider":"^3.1.2",ajv:"^8.18.0",axios:"^1.15.2","bash-parser":"^0.5.0","bonjour-service":"^1.3.0",chalk:"^5.6.2",clipboardy:"^5.3.1",commander:"^14.0.3","cross-spawn":"^7.0.6","decimal.js":"^10.6.0",diff:"^8.0.4","drizzle-orm":"^0.45.2",fuzzysort:"^3.1.0","fast-check":"^4.6.0","gitlab-ai-provider":"^6.6.0",glob:"^13.0.6","gray-matter":"^4.0.3",hono:"^4.12.14","hono-openapi":"^1.3.0",ignore:"^7.0.5",jiti:"^2.6.1","jsonc-parser":"^3.3.1","lru-cache":"^11.3.0",minimatch:"^10.2.4","node-gyp":"^12.3.0","node-html-parser":"^7.1.0","node-pty":"^1.1.0",open:"^11.0.0",remeda:"^2.33.6",semver:"^7.7.4","tree-sitter-bash":"^0.25.1",turndown:"^7.2.2",ulid:"^3.0.2","vscode-jsonrpc":"^8.2.1",which:"^6.0.1","xdg-basedir":"^5.1.0",zod:"^4.3.6",ws:"^8.20.0","jieba-wasm":"^2.4.0","vscode-languageserver-types":"3.17.5","why-is-node-running":"^3.2.2","zod-to-json-schema":"^3.25.1"},devDependencies:{"@actions/core":"^3.0.0","@actions/github":"^9.0.0","@octokit/graphql":"^9.0.3","@octokit/rest":"^22.0.1","@octokit/webhooks-types":"^7.6.1","@types/node":"^22.17.0","@types/which":"^3.0.4","@types/ws":"^8.18.1","@types/turndown":"^5.0.6","@vitest/coverage-v8":"^4.1.1",dotenv:"^17.3.1",esbuild:"^0.27.4","esbuild-plugin-alias":"^0.2.1",tsup:"^8.5.1",tsx:"^4.21.0",typescript:"^6.0.2",vitest:"^4.1.1"}};});var ns={};Oe(ns,{Global:()=>pe});var Ad,vf,YP,XP,ZP,pe,vt=U(()=>{k();yf();Ad="easbot",vf=Be__default.join(xdgData,Ad),YP=Be__default.join(xdgCache,Ad),XP=Be__default.join(xdgConfig,Ad),ZP=Be__default.join(xdgState,Ad);(d=>{d.Path={get home(){return process.env.EASBOT_TEST_HOME||Im.homedir()},data:vf,bin:Be__default.join(vf,"bin"),log:Be__default.join(vf,"log"),cache:YP,config:XP,state:ZP};let e=null,o=null;async function a(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{let p=await Promise.resolve().then(()=>(yf(),pw));e=p.default?.version||p.version||"local";}catch{e="local";}return e||"local"}function n(){if(e)return e;if(process.env.EASBOT_VERSION)return e=process.env.EASBOT_VERSION,e;try{e=bf.version||"local";}catch{e="local";}return e||"local"}d.getVersion=n;function i(){if(o)return o;if(process.env.EASBOT_CHANNEL)return o=process.env.EASBOT_CHANNEL,o;let p=n();return p==="local"||p.includes("dev")?o="local":p.includes("beta")||p.includes("alpha")?o="preview":o="latest",o||"local"}d.getChannel=i;function r(){return i()==="local"}d.isLocal=r;function s(){return i()==="preview"}d.isPreview=s;let u=false,l=null;async function c(){if(!u)return l||(l=(async()=>{await a(),await Promise.all([mkdir(d.Path.data,{recursive:true}),mkdir(d.Path.config,{recursive:true}),mkdir(d.Path.state,{recursive:true}),mkdir(d.Path.log,{recursive:true}),mkdir(d.Path.bin,{recursive:true}),mkdir(d.Path.cache,{recursive:true})]).then(()=>{process.env.EASBOT_DATA_PATH=d.Path.data,process.env.EASBOT_CONFIG_PATH=d.Path.config,process.env.EASBOT_STATE_PATH=d.Path.state,process.env.EASBOT_LOG_PATH=d.Path.log,process.env.EASBOT_BIN_PATH=d.Path.bin,process.env.EASBOT_CACHE_PATH=d.Path.cache;});let p="1",m=Be__default.join(d.Path.cache,"version");if(await readFile(m,"utf-8").catch(()=>"0")!==p){try{let f=await readdir(d.Path.cache);await Promise.all(f.map(b=>rm$1(Be__default.join(d.Path.cache,b),{recursive:!0,force:!0})));}catch{}await writeFile(m,p);}u=true;})(),l)}d.init=c;})(pe||(pe={}));});function ci(t={}){let e=t.port??3e3,o=t.hostname??"0.0.0.0",a=new Hono({strict:true,getPath:r=>{try{return new URL(r.url).pathname}catch{return r.url}}});if(t.onError?a.onError(t.onError):a.onError((r,s)=>(is.error("Server error",{error:r.message,stack:r.stack}),r instanceof HTTPException?r.getResponse():s.json({error:"Internal Server Error",message:r.message},500))),t.onNotFound?a.notFound(t.onNotFound):a.notFound(r=>r.json({error:"Not Found",path:r.req.path},404)),!t.websockets&&t.cors&&a.use(cors(typeof t.cors=="boolean"?{origin:"*"}:t.cors)),a.use(logger((r,...s)=>is.info(r,s))),!t.websockets&&t.secureHeaders&&a.use(secureHeaders()),!t.websockets&&t.compression&&a.use(compress({encoding:"gzip"})),!t.websockets&&t.timeout&&a.use(timeout(t.timeout)),t.middlewares)for(let r of t.middlewares)r.path?a.use(r.path,r.handler):a.use(r.handler);if(t.routes)for(let r of t.routes){let s=r.middlewares||[],u=r.method.toUpperCase();r.validation?a.on(u,r.path,zValidator("json",r.validation),...s,r.handler):a.on(u,r.path,...s,r.handler);}t.rpc&&a.post("/rpc/:method",async r=>{let s=r.req.param("method"),u=t.rpc?.[s];if(!u)return r.json({error:"RPC method not found"},404);try{let l=await r.req.json(),c=await u(l,r);return r.json({result:c})}catch(l){return is.error("RPC error",{method:s,error:l.message}),r.json({error:"RPC execution failed",message:l.message},500)}}),t.fetch&&a.all("*",async r=>await t.fetch(r.req.raw));let n=null,i={url:new URL(`http://${o}:${e}`),port:e,hostname:o,hono:a,async stop(r=false){return n?new Promise((s,u)=>{r&&n.closeAllConnections?.(),n.close(l=>{l?(is.error("Error closing server",{error:l.message}),u(l)):(n=null,is.info(`Server on port ${e} stopped`),s());}),setTimeout(()=>{is.warn(`Server shutdown timeout on port ${e}`),n=null,s();},5e3);}):Promise.resolve()},get raw(){return n||void 0}};return n=serve({fetch:a.fetch,port:e,hostname:o}),is.info(`Server running on http://${o}:${e}`),i}function dw(t){return ci({rpc:t,port:3e3})}function mw(t,e={}){return ci({...e,routes:t})}function gw(t,e={}){return ci({...e,websockets:t})}function fw(t,e={}){let o=Object.entries(t).map(([a,n])=>({method:"get",path:`/stream/${a}`,handler:i=>streamSSE(i,async r=>{for await(let s of n(i))await r.writeSSE(s);})}));return ci({...e,routes:o,streaming:true})}var is,Md=U(()=>{k();le();is=F.create({service:"server"});});var Iu,kf=U(()=>{k();le();(n=>{let t=F.create({service:"pkg-registry"});function e(){return process.platform==="win32"?"cmd":"npm"}async function o(i,r,s){return new Promise(u=>{let l=process.platform==="win32"?["/c","npm","view",i,r]:["view",i,r],c=spawn(e(),l,{cwd:s,env:{...process.env}}),d="",p="";c.stdout?.on("data",m=>{d+=m.toString();}),c.stderr?.on("data",m=>{p+=m.toString();}),c.on("close",m=>{m!==0?(t.warn("npm view failed",{pkg:i,field:r,code:m,stderr:p}),u(null)):u(d.trim());}),c.on("error",()=>{t.error("npm view error",{pkg:i,field:r,error:"unknown"}),u(null);});})}n.info=o;async function a(i,r,s){let u=await o(i,"version",s);return u?/[\s^~*xX<>|=]/.test(r)?!Dd.satisfies(u,r):Dd.compare(r,u)===-1:(t.warn("Failed to resolve latest version, using cached",{pkg:i,cachedVersion:r}),false)}n.isOutdated=a;})(Iu||(Iu={}));});var Mc=CP((Mz,Gw)=>{k();var Ef=Object.defineProperty,pE=Object.getOwnPropertyDescriptor,dE=Object.getOwnPropertyNames,mE=Object.prototype.hasOwnProperty,gE=(t,e)=>{for(var o in e)Ef(t,o,{get:e[o],enumerable:true});},fE=(t,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of dE(e))!mE.call(t,n)&&n!==o&&Ef(t,n,{get:()=>e[n],enumerable:!(a=pE(e,n))||a.enumerable});return t},hE=t=>fE(Ef({},"__esModule",{value:true}),t),Tc={};gE(Tc,{analyzeMetafile:()=>WE,analyzeMetafileSync:()=>YE,build:()=>UE,buildSync:()=>VE,context:()=>zE,default:()=>tT,formatMessages:()=>QE,formatMessagesSync:()=>JE,initialize:()=>ZE,stop:()=>XE,transform:()=>HE,transformSync:()=>KE,version:()=>$E});Gw.exports=hE(Tc);function _w(t){let e=a=>{if(a===null)o.write8(0);else if(typeof a=="boolean")o.write8(1),o.write8(+a);else if(typeof a=="number")o.write8(2),o.write32(a|0);else if(typeof a=="string")o.write8(3),o.write(Xn(a));else if(a instanceof Uint8Array)o.write8(4),o.write(a);else if(a instanceof Array){o.write8(5),o.write32(a.length);for(let n of a)e(n);}else {let n=Object.keys(a);o.write8(6),o.write32(n.length);for(let i of n)o.write(Xn(i)),e(a[i]);}},o=new Pw;return o.write32(0),o.write32(t.id<<1|+!t.isRequest),e(t.value),Sf(o.buf,o.len-4,0),o.buf.subarray(0,o.len)}function _E(t){let e=()=>{switch(o.read8()){case 0:return null;case 1:return !!o.read8();case 2:return o.read32();case 3:return cs(o.read());case 4:return o.read();case 5:{let r=o.read32(),s=[];for(let u=0;u<r;u++)s.push(e());return s}case 6:{let r=o.read32(),s={};for(let u=0;u<r;u++)s[cs(o.read())]=e();return s}default:throw new Error("Invalid packet")}},o=new Pw(t),a=o.read32(),n=(a&1)===0;a>>>=1;let i=e();if(o.ptr!==t.length)throw new Error("Invalid packet");return {id:a,isRequest:n,value:i}}var Pw=class{constructor(t=new Uint8Array(1024)){this.buf=t,this.len=0,this.ptr=0;}_write(t){if(this.len+t>this.buf.length){let e=new Uint8Array((this.len+t)*2);e.set(this.buf),this.buf=e;}return this.len+=t,this.len-t}write8(t){let e=this._write(1);this.buf[e]=t;}write32(t){let e=this._write(4);Sf(this.buf,t,e);}write(t){let e=this._write(4+t.length);Sf(this.buf,t.length,e),this.buf.set(t,e+4);}_read(t){if(this.ptr+t>this.buf.length)throw new Error("Invalid packet");return this.ptr+=t,this.ptr-t}read8(){return this.buf[this._read(1)]}read32(){return Ew(this.buf,this._read(4))}read(){let t=this.read32(),e=new Uint8Array(t),o=this._read(e.length);return e.set(this.buf.subarray(o,o+t)),e}},Xn,cs,If;if(typeof TextEncoder<"u"&&typeof TextDecoder<"u"){let t=new TextEncoder,e=new TextDecoder;Xn=o=>t.encode(o),cs=o=>e.decode(o),If='new TextEncoder().encode("")';}else if(typeof Buffer<"u")Xn=t=>Buffer.from(t),cs=t=>{let{buffer:e,byteOffset:o,byteLength:a}=t;return Buffer.from(e,o,a).toString()},If='Buffer.from("")';else throw new Error("No UTF-8 codec found");if(!(Xn("")instanceof Uint8Array))throw new Error(`Invariant violation: "${If} instanceof Uint8Array" is incorrectly false
|
|
3
3
|
|
|
4
4
|
This indicates that your JavaScript environment is broken. You cannot use
|
|
5
5
|
esbuild in this environment because esbuild relies on this invariant. This
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@easbot/agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.13",
|
|
4
4
|
"description": "Core Agent for the easbot monorepo ecosystem",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -17,33 +17,6 @@
|
|
|
17
17
|
"bin": {
|
|
18
18
|
"easbot": "./dist/cli.mjs"
|
|
19
19
|
},
|
|
20
|
-
"scripts": {
|
|
21
|
-
"dev": "cross-env NODE_ENV=development tsx src/cli.ts -- tui",
|
|
22
|
-
"start": "cross-env NODE_ENV=production node dist/cli.mjs tui --new",
|
|
23
|
-
"build": "tsup --env.NODE_ENV production",
|
|
24
|
-
"test": "vitest",
|
|
25
|
-
"test:run": "vitest run",
|
|
26
|
-
"test:ui": "vitest --ui",
|
|
27
|
-
"test:watch": "vitest --watch",
|
|
28
|
-
"test:coverage": "vitest run --coverage",
|
|
29
|
-
"test:unit": "vitest run --config ./vitest.unit.config.ts",
|
|
30
|
-
"test:unit:watch": "vitest --config ./vitest.unit.config.ts",
|
|
31
|
-
"test:integration": "vitest run --config ./vitest.integration.config.ts",
|
|
32
|
-
"test:integration:watch": "vitest --config ./vitest.integration.config.ts",
|
|
33
|
-
"test:e2e": "vitest run --config ./vitest.e2e.config.ts",
|
|
34
|
-
"test:e2e:watch": "vitest --config ./vitest.e2e.config.ts",
|
|
35
|
-
"lint": "biome check .",
|
|
36
|
-
"lint:fix": "biome check --write .",
|
|
37
|
-
"lint:fix:unsafe": "biome check --write --unsafe ./src",
|
|
38
|
-
"lint:report": "biome check --reporter=summary .",
|
|
39
|
-
"format": "biome format .",
|
|
40
|
-
"format:fix": "biome format --write .",
|
|
41
|
-
"type-check": "tsc --noEmit",
|
|
42
|
-
"clean": "npx rimraf dist node_modules",
|
|
43
|
-
"prepare": "echo 'agent: Bun environment ready for CLI usage'",
|
|
44
|
-
"publish:npm": "bash scripts/publish.sh",
|
|
45
|
-
"publish:npm:win": "powershell -ExecutionPolicy Bypass -File scripts/publish.ps1"
|
|
46
|
-
},
|
|
47
20
|
"keywords": [
|
|
48
21
|
"ai",
|
|
49
22
|
"agent",
|
|
@@ -95,17 +68,6 @@
|
|
|
95
68
|
"@ai-sdk/xai": "^3.0.73",
|
|
96
69
|
"@aws-sdk/credential-providers": "^3.1014.0",
|
|
97
70
|
"@clack/prompts": "^1.1.0",
|
|
98
|
-
"@easbot/plugin": "workspace:*",
|
|
99
|
-
"@easbot/codebase": "workspace:*",
|
|
100
|
-
"@easbot/memory": "workspace:*",
|
|
101
|
-
"@easbot/note": "workspace:*",
|
|
102
|
-
"@easbot/types": "workspace:*",
|
|
103
|
-
"@easbot/tui": "workspace:*",
|
|
104
|
-
"@easbot/utils": "workspace:*",
|
|
105
|
-
"@easbot/sdk": "workspace:*",
|
|
106
|
-
"@easbot/local-model-sdk": "workspace:*",
|
|
107
|
-
"@easbot/ollama-sdk": "workspace:*",
|
|
108
|
-
"@easbot/gateway": "workspace:*",
|
|
109
71
|
"@hono/node-server": "^2.0.0",
|
|
110
72
|
"@hono/node-ws": "^1.3.0",
|
|
111
73
|
"@hono/standard-validator": "^0.2.2",
|
|
@@ -166,7 +128,18 @@
|
|
|
166
128
|
"jieba-wasm": "^2.4.0",
|
|
167
129
|
"vscode-languageserver-types": "3.17.5",
|
|
168
130
|
"why-is-node-running": "^3.2.2",
|
|
169
|
-
"zod-to-json-schema": "^3.25.1"
|
|
131
|
+
"zod-to-json-schema": "^3.25.1",
|
|
132
|
+
"@easbot/plugin": "0.1.13",
|
|
133
|
+
"@easbot/codebase": "0.1.13",
|
|
134
|
+
"@easbot/types": "0.1.13",
|
|
135
|
+
"@easbot/tui": "0.1.13",
|
|
136
|
+
"@easbot/memory": "0.1.13",
|
|
137
|
+
"@easbot/note": "0.1.13",
|
|
138
|
+
"@easbot/utils": "0.1.13",
|
|
139
|
+
"@easbot/sdk": "0.1.13",
|
|
140
|
+
"@easbot/ollama-sdk": "0.1.13",
|
|
141
|
+
"@easbot/gateway": "0.1.13",
|
|
142
|
+
"@easbot/local-model-sdk": "0.1.13"
|
|
170
143
|
},
|
|
171
144
|
"devDependencies": {
|
|
172
145
|
"@actions/core": "^3.0.0",
|
|
@@ -186,5 +159,31 @@
|
|
|
186
159
|
"tsx": "^4.21.0",
|
|
187
160
|
"typescript": "^6.0.2",
|
|
188
161
|
"vitest": "^4.1.1"
|
|
162
|
+
},
|
|
163
|
+
"scripts": {
|
|
164
|
+
"dev": "cross-env NODE_ENV=development tsx src/cli.ts -- tui",
|
|
165
|
+
"start": "cross-env NODE_ENV=production node dist/cli.mjs tui --new",
|
|
166
|
+
"build": "tsup --env.NODE_ENV production",
|
|
167
|
+
"test": "vitest",
|
|
168
|
+
"test:run": "vitest run",
|
|
169
|
+
"test:ui": "vitest --ui",
|
|
170
|
+
"test:watch": "vitest --watch",
|
|
171
|
+
"test:coverage": "vitest run --coverage",
|
|
172
|
+
"test:unit": "vitest run --config ./vitest.unit.config.ts",
|
|
173
|
+
"test:unit:watch": "vitest --config ./vitest.unit.config.ts",
|
|
174
|
+
"test:integration": "vitest run --config ./vitest.integration.config.ts",
|
|
175
|
+
"test:integration:watch": "vitest --config ./vitest.integration.config.ts",
|
|
176
|
+
"test:e2e": "vitest run --config ./vitest.e2e.config.ts",
|
|
177
|
+
"test:e2e:watch": "vitest --config ./vitest.e2e.config.ts",
|
|
178
|
+
"lint": "biome check .",
|
|
179
|
+
"lint:fix": "biome check --write .",
|
|
180
|
+
"lint:fix:unsafe": "biome check --write --unsafe ./src",
|
|
181
|
+
"lint:report": "biome check --reporter=summary .",
|
|
182
|
+
"format": "biome format .",
|
|
183
|
+
"format:fix": "biome format --write .",
|
|
184
|
+
"type-check": "tsc --noEmit",
|
|
185
|
+
"clean": "npx rimraf dist node_modules",
|
|
186
|
+
"publish:npm": "bash scripts/publish.sh",
|
|
187
|
+
"publish:npm:win": "powershell -ExecutionPolicy Bypass -File scripts/publish.ps1"
|
|
189
188
|
}
|
|
190
|
-
}
|
|
189
|
+
}
|