@easbot/agent 0.2.22 → 0.2.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/dist/assets/txt/tool/gateway-channel.txt +51 -12
  2. package/dist/chunks/acp-D5I5IUMI.mjs +16 -0
  3. package/dist/chunks/adapter-loader-OQIF5F24.mjs +1 -0
  4. package/dist/chunks/agent-R3VIV25Y.mjs +1 -0
  5. package/dist/chunks/agent-TM2AYB67.mjs +1 -0
  6. package/dist/chunks/app-BQOCNLYW.mjs +1 -0
  7. package/dist/chunks/auth-2I7U24YF.mjs +1 -0
  8. package/dist/chunks/bootstrap-FETK53UT.mjs +1 -0
  9. package/dist/chunks/build-program-KUCF2N7D.mjs +11 -0
  10. package/dist/chunks/bus-CWP3DYEO.mjs +1 -0
  11. package/dist/chunks/chunk-2RSIOAZV.mjs +1 -0
  12. package/dist/chunks/chunk-3AJJMHKA.mjs +1 -0
  13. package/dist/chunks/chunk-5QKMSVQL.mjs +1 -0
  14. package/dist/chunks/chunk-AAJAKVQY.mjs +3 -0
  15. package/dist/chunks/chunk-AD7K5VE2.mjs +2 -0
  16. package/dist/chunks/chunk-CJTCCLW4.mjs +1 -0
  17. package/dist/chunks/chunk-CQVEAYYW.mjs +1 -0
  18. package/dist/chunks/chunk-DEZT7DOH.mjs +1 -0
  19. package/dist/chunks/chunk-E6P3STWN.mjs +2 -0
  20. package/dist/chunks/chunk-EEWP2VV6.mjs +27 -0
  21. package/dist/chunks/chunk-FXOUIXIL.mjs +1 -0
  22. package/dist/chunks/chunk-LAHYVX5K.mjs +1 -0
  23. package/dist/chunks/chunk-LFYBZHOI.mjs +2 -0
  24. package/dist/chunks/chunk-LGMOIUYA.mjs +2 -0
  25. package/dist/chunks/chunk-M3K32WJV.mjs +1 -0
  26. package/dist/chunks/chunk-MHY26EXB.mjs +59 -0
  27. package/dist/chunks/chunk-MMU3Z6V2.mjs +1 -0
  28. package/dist/chunks/chunk-NCHKGEE3.mjs +2 -0
  29. package/dist/chunks/chunk-PKBPWDSV.mjs +1038 -0
  30. package/dist/chunks/chunk-SLZ3HAH6.mjs +2 -0
  31. package/dist/chunks/chunk-TSX5PZSW.mjs +1 -0
  32. package/dist/chunks/chunk-TYD2M4SP.mjs +7 -0
  33. package/dist/chunks/chunk-VII7JKGB.mjs +1 -0
  34. package/dist/chunks/chunk-X6ISXWBN.mjs +1 -0
  35. package/dist/chunks/chunk-XPF2LJT2.mjs +1 -0
  36. package/dist/chunks/chunk-ZBRXNYEM.mjs +1 -0
  37. package/dist/chunks/command-5JVJ7SVL.mjs +1 -0
  38. package/dist/chunks/compaction-BD7Q4GQO.mjs +1 -0
  39. package/dist/chunks/config-OZOLTE2Y.mjs +1 -0
  40. package/dist/chunks/confirm-dialog-AGHMTHWU.mjs +1 -0
  41. package/dist/chunks/copilot-I52DJYYX.mjs +2 -0
  42. package/dist/chunks/debug-MW53KD7T.mjs +3 -0
  43. package/dist/chunks/event-A4SSIBOT.mjs +1 -0
  44. package/dist/chunks/export-BGH24SO2.mjs +1 -0
  45. package/dist/chunks/file-N5R4HKSU.mjs +1 -0
  46. package/dist/chunks/gateway-3QKRAMO2.mjs +16 -0
  47. package/dist/chunks/gateway-loader-6P6BTWQP.mjs +1 -0
  48. package/dist/chunks/generate-NXGIMILE.mjs +2 -0
  49. package/dist/chunks/github-L3XIDEEQ.mjs +33 -0
  50. package/dist/chunks/global-QYCQXNCR.mjs +1 -0
  51. package/dist/chunks/import-JYLIHQCA.mjs +2 -0
  52. package/dist/chunks/input-validation-FWKKVCYC.mjs +1 -0
  53. package/dist/chunks/installation-HRFNXAKB.mjs +1 -0
  54. package/dist/chunks/instance-6RDAH4IX.mjs +1 -0
  55. package/dist/chunks/is-tui-mode-TFK352KK.mjs +1 -0
  56. package/dist/chunks/loader-7UB7WQFK.mjs +1 -0
  57. package/dist/chunks/loader-DRTQXYLN.mjs +1 -0
  58. package/dist/chunks/lsp-U7VGUPLT.mjs +1 -0
  59. package/dist/chunks/markdown-Z6UXVBNP.mjs +1 -0
  60. package/dist/chunks/mcp-AHMVQDPC.mjs +1 -0
  61. package/dist/chunks/models-G2QBJX43.mjs +1 -0
  62. package/dist/chunks/models-snapshot-XTWYGG3T.mjs +2 -0
  63. package/dist/chunks/pr-4WGOFODT.mjs +3 -0
  64. package/dist/chunks/preferences-354RYR2J.mjs +1 -0
  65. package/dist/chunks/project-NIXIQTRB.mjs +1 -0
  66. package/dist/chunks/prompt-F3Z2QBDR.mjs +1 -0
  67. package/dist/chunks/provider-LO2XXG33.mjs +1 -0
  68. package/dist/chunks/registry-MDPD3RHV.mjs +1 -0
  69. package/dist/chunks/revert-GE5BMDGN.mjs +1 -0
  70. package/dist/chunks/ripgrep-G73RIQ5F.mjs +1 -0
  71. package/dist/chunks/run-HRRJXIVI.mjs +22 -0
  72. package/dist/chunks/scheduler-2CD7LGEJ.mjs +1 -0
  73. package/dist/chunks/server-CHTYZF5W.mjs +1 -0
  74. package/dist/chunks/session-2W7DKSRJ.mjs +1 -0
  75. package/dist/chunks/session-HO5727MY.mjs +1 -0
  76. package/dist/chunks/session-V4RGFQKO.mjs +1 -0
  77. package/dist/chunks/settings-panel-BWCVKC4G.mjs +1 -0
  78. package/dist/chunks/share-OCIAAEUC.mjs +1 -0
  79. package/dist/chunks/snapshot-V556Q4I5.mjs +1 -0
  80. package/dist/chunks/stats-MILDLIZD.mjs +1 -0
  81. package/dist/chunks/storage-P6DUW44Y.mjs +1 -0
  82. package/dist/chunks/tui-2FSZJGP2.mjs +1 -0
  83. package/dist/chunks/tui-UTCI4ERG.mjs +1 -0
  84. package/dist/chunks/types-GCXI5X7B.mjs +1 -0
  85. package/dist/chunks/types-KIFC2C2M.mjs +1 -0
  86. package/dist/chunks/update-IEZVD4U7.mjs +2 -0
  87. package/dist/cli.mjs +9 -1235
  88. package/package.json +14 -23
  89. package/dist/cli.cjs +0 -1236
  90. package/dist/cli.d.cts +0 -1
  91. package/dist/index.cjs +0 -1345
  92. package/dist/index.d.cts +0 -34556
  93. package/dist/index.d.ts +0 -34556
  94. package/dist/index.mjs +0 -1345
@@ -2,30 +2,69 @@ Send messages to external channels through the Gateway system.
2
2
 
3
3
  **list** — List available channels:
4
4
  - operation="list"
5
- - sessionId: Optional session ID for channel binding lookup
5
+
6
+ **sessions** — List active sessions:
7
+ - operation="sessions"
8
+ - limit: Max sessions to return (default: 50)
9
+ - offset: Pagination offset (default: 0)
10
+
11
+ **contacts** — List contacts (users) for a platform:
12
+ - operation="contacts"
13
+ - platform: Platform name (e.g., "telegram", "discord")
14
+ - limit: Max contacts to return (default: 50)
15
+ - offset: Pagination offset (default: 0)
6
16
 
7
17
  **send** — Send message to channel:
8
18
  - operation="send"
9
19
  - content: Message content (required)
10
- - channelId: Specific channel ID (optional, auto-selects if not provided)
11
- - sessionId: Session ID for channel lookup (optional)
20
+ - channelId: Specific channel ID (optional)
21
+ - userId: User ID to send to (optional, requires channelId)
22
+ - contactUid: Full Contact UID like "telegram:123456" (optional)
23
+ - sessionId: Session ID to send to (optional, uses session's channel and user)
12
24
  - messageType: "text", "image", or "file" (default: "text")
13
25
 
14
26
  ## Usage Examples
15
27
 
16
28
  ```
17
- # List channels
29
+ # List available channels
18
30
  gateway_channel(operation="list")
19
31
 
20
- # Send message
21
- gateway_channel(operation="send" content="Hello!")
32
+ # List active sessions
33
+ gateway_channel(operation="sessions")
34
+
35
+ # List Telegram users who have messaged the bot
36
+ gateway_channel(operation="contacts" platform="telegram")
22
37
 
23
- # Send to specific channel
24
- gateway_channel(operation="send" channelId="telegram-main" content="Hello!")
38
+ # Send message to specific user (using contact UID)
39
+ gateway_channel(operation="send" contactUid="telegram:123456789" content="Hello!")
40
+
41
+ # Send message to session (reply to user in session)
42
+ gateway_channel(operation="send" sessionId="session_xxx" content="Hello!")
43
+
44
+ # Send message using channel + userId
45
+ gateway_channel(operation="send" channelId="telegram-main" userId="123456789" content="Hello!")
25
46
  ```
26
47
 
27
- ## Channel Selection
48
+ ## Channel Selection Priority
49
+
50
+ 1. contactUid: Parse to get platform and userId, find channel for that platform
51
+ 2. userId + channelId: Use specified channel, send to userId
52
+ 3. sessionId: Get session info, use session's channel and userId
53
+ 4. channelId: Use specified channel only
54
+ 5. none: Auto-select first running channel
55
+
56
+ ## Contact UID Format
57
+
58
+ Contacts are stored with unique identifiers:
59
+ - Format: "{platform}:{stableId}"
60
+ - Examples:
61
+ - Telegram: "telegram:123456789"
62
+ - Discord: "discord:987654321"
63
+
64
+ ## Platform Names
65
+
66
+ Supported platforms: telegram, discord, slack, feishu, wechat, webchat, signal, nostr
67
+
68
+ ## Result Limits
28
69
 
29
- If channelId not provided:
30
- 1. Use channel bound to sessionId (if provided)
31
- 2. Otherwise auto-select highest priority running channel
70
+ Sessions and contacts support pagination with limit/offset. If results are truncated, use higher limit values or paginate with offset.
@@ -0,0 +1,16 @@
1
+ import {a as a$3}from'./chunk-LAHYVX5K.mjs';import {a as a$4}from'./chunk-5QKMSVQL.mjs';import'./chunk-VII7JKGB.mjs';import {g,e,d,k as k$1,i,b,h,c,a as a$5}from'./chunk-M3K32WJV.mjs';import {lb,P,wa,Ka}from'./chunk-PKBPWDSV.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-3AJJMHKA.mjs';import'./chunk-TSX5PZSW.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-E6P3STWN.mjs';import {a as a$2}from'./chunk-EEWP2VV6.mjs';import'./chunk-NCHKGEE3.mjs';import'./chunk-SLZ3HAH6.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-LGMOIUYA.mjs';import {a as a$1}from'./chunk-LFYBZHOI.mjs';import'./chunk-AD7K5VE2.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-X6ISXWBN.mjs';import'commander';import T from'path';var a=a$1.create({service:"cli-command-acp"});async function k(i,e){let t=await lb.getACPServerConfig();a.debug("Merging ACP configuration",{baseConfig:{channel:t.channel,port:t.port,hostname:t.hostname,timeout:t.timeout},cliOptions:{channel:e.channel,port:e.port,hostname:e.hostname,timeout:e.timeout}});let r={};if(e.channel!==void 0){let s=e.channel.toLowerCase();Object.values(P).includes(s)?(r.channel=s,a.debug("CLI override: channel",{value:r.channel})):a.warn("Invalid channel type from command line",{value:e.channel});}if(e.port!==void 0&&(e.port>0&&e.port<=65535?(r.port=e.port,a.debug("CLI override: port",{value:r.port})):a.warn("Invalid port from command line",{value:e.port})),e.hostname!==void 0&&(r.hostname=e.hostname,a.debug("CLI override: hostname",{value:r.hostname})),e.timeout!==void 0&&(e.timeout>0?(r.timeout=e.timeout,a.debug("CLI override: timeout",{value:r.timeout})):a.warn("Invalid timeout from command line",{value:e.timeout})),e.hostname!==void 0||e.port!==void 0){let s=e.hostname??t.hostname??"127.0.0.1",l=e.port??t.port??3e3;t.ws&&(r.ws={...t.ws,url:`ws://${s}:${l}`}),t.http&&(r.http={...t.http,baseUrl:`http://${s}:${l}`}),a.debug("CLI override: ws.url and http.baseUrl updated",{hostname:e.hostname,port:e.port,wsUrl:r.ws?.url,httpBaseUrl:r.http?.baseUrl});}e.timeout!==void 0&&(r.ws||r.http)&&(r.ws&&(r.ws.timeout=e.timeout),r.http&&(r.http.timeout=e.timeout),a.debug("CLI override: ws.timeout and http.timeout updated",{timeout:e.timeout}));let c={...t,...r};return a.debug("Merged ACP configuration",{channel:c.channel,port:c.port,hostname:c.hostname,timeout:c.timeout}),c}async function O(i$1,e,t){a.info("Starting ACP service",{channel:e.channel,port:e.port,hostname:e.hostname,debug:t.config.debug}),await wa.init({directory:i$1,printLogs:t.config.print_logs,logLevel:t.config.log_level,channel:e.channel});await wa.ensureACPService(e);console.log(""),console.log(d(a$2("acp.server.started"))),console.log(k$1(60)),console.log(i(a$2("acp.field.directory"),i$1,15)),console.log(i(a$2("acp.field.worktree"),Ka.project.worktree||"N/A",15)),console.log(i(a$2("acp.field.channel"),e.channel,15));let c$1=b();switch(e.channel){case "websocket":{let s,l="/";if(e.ws?.url)try{let p=new URL(e.ws.url),d=p.port||"3000",m=p.hostname;l=p.pathname||"/",s=`ws://${m}:${d}${l==="/"?"":l}`;}catch{s=e.ws.url;}else s=`ws://${e.hostname}:${e.port}`;console.log(i(a$2("acp.field.ws_url"),s,15)),console.log(i(a$2("acp.field.ws_path"),l,15)),e.ws?(console.log(h(a$2("acp.websocket.config"))),console.log(i(a$2("acp.field.timeout"),`${e.ws.timeout??e.timeout}ms`,15)),console.log(i(a$2("acp.field.batch_size"),`${e.ws.batchSize??10}`,15)),console.log(i(a$2("acp.field.batch_interval"),`${e.ws.batchInterval??50}ms`,15)),console.log(i(a$2("acp.field.heartbeat"),`${e.ws.heartbeatInterval??3e4}ms`,15))):console.log(i(a$2("acp.field.timeout"),`${e.timeout}ms`,15));break}case "http":e.http?.baseUrl?console.log(i(a$2("acp.field.base_url"),e.http.baseUrl,15)):console.log(i(a$2("acp.field.host"),`${e.hostname}:${e.port}`,15)),e.http?.timeout?console.log(i(a$2("acp.field.timeout"),`${e.http.timeout}ms`,15)):console.log(i(a$2("acp.field.timeout"),`${e.timeout}ms`,15));break;case "stdio":console.log(i(a$2("acp.field.mode"),a$2("acp.mode.stdio"),15)),console.log(i(a$2("acp.field.timeout"),`${e.timeout}ms`,15));break;case "local":console.log(i(a$2("acp.field.mode"),a$2("acp.mode.local"),15)),console.log(i(a$2("acp.field.protocol"),a$2("acp.protocol"),15)),console.log(i(a$2("acp.field.timeout"),`${e.timeout}ms`,15));break;default:console.log(i(a$2("acp.field.host"),`${e.hostname}:${e.port}`,15)),console.log(i(a$2("acp.field.timeout"),`${e.timeout}ms`,15));}console.log(i(a$2("acp.field.debug"),t.config.debug?c(c$1,a$5.success,a$2("common.enabled")):c(c$1,a$5.muted,a$2("common.disabled")),15)),console.log(k$1(60)),console.log(""),a.info("ACPServer started successfully"),x();}function x(){let i=process.env.EASBOT_RUN_MODE==="ephemeral"||!process.stdin.isTTY&&process.env.EASBOT_RUN_MODE!=="persistent",e=async t=>{a.debug(`Received ${t}, shutting down gracefully...`),i||console.log(`
2
+ ${a$2("acp.shutdown.received",{vars:{signal:t}})}`);try{await wa.destroy(),a.debug("EasbotAdapter state destroyed"),i||console.log(d(a$2("acp.shutdown.completed")));}catch(r){a.error("Error during shutdown",{error:r instanceof Error?r.message:String(r)});}i?process.kill(process.pid,"SIGKILL"):process.exit(0);};process.on("SIGINT",()=>{e("SIGINT").catch(console.error);}),process.on("SIGTERM",()=>{e("SIGTERM").catch(console.error);}),process.stdout.on("error",t=>{(t.code==="EPIPE"||t.code==="EIO")&&(a.info("stdout pipe broken, exiting"),e("stdout-broken").catch(()=>{i?process.kill(process.pid,"SIGKILL"):process.exit(0);}));});}async function U(i,e$1,t){a.debug("ACP command executed",{options:e$1});let r=t?.config?.debug??false,c=t?.config?.print_logs??false,s=t?.config?.log_level??"INFO";a.debug("Global options from context",{debug:t?.config?.debug,print_logs:t?.config?.print_logs,log_level:t?.config?.log_level,isDebug:r,printLogs:c,logLevel:s});try{let l=t.config.directory?T.resolve(t.config.directory):process.cwd();a.debug("Working directory resolved",{directory:l});let p=a$3(l);if(!p.valid)throw a.error("Working directory validation failed",{directory:l,error:p.error}),new Error(`Invalid working directory: ${p.error}`);let d=p.normalizedPath;a.debug("Working directory validated",{validatedDirectory:d}),console.log(g(a$2("acp.directory.resolved",{vars:{cwd:d}}))),await a$4(d,async()=>{let m=await k(d,e$1);if(a.debug("ACP server configuration",{channel:m.channel,port:m.port,hostname:m.hostname,timeout:m.timeout,enabled:m.enabled}),!m.enabled){a.warn("ACP server is disabled by configuration"),console.log(g(a$2("acp.disabled")));return}await O(d,m,t),a.info("ACP server started successfully");});}catch(l){a.error("Failed to start ACP server",{error:l instanceof Error?l.message:String(l)}),console.error(e(a$2("acp.error.start_failed",{vars:{error:l instanceof Error?l.message:String(l)}}))),process.exit(1);}}function le(i,e){let t=i.command("acp").description(a$2("acp.command.description")).addHelpText("after",`
3
+
4
+ ${a$2("acp.help.examples")}
5
+ $ agent acp # ${a$2("acp.help.example.default")}
6
+ $ agent acp --channel http # ${a$2("acp.help.example.http")}
7
+ $ agent acp --port 8080 # ${a$2("acp.help.example.port")}
8
+ $ agent acp --hostname 0.0.0.0 # ${a$2("acp.help.example.hostname")}
9
+ $ agent acp --channel ws --debug # ${a$2("acp.help.example.debug")}
10
+
11
+ ${a$2("acp.help.env")}
12
+ ACP_CHANNEL ${a$2("acp.help.env.channel")}
13
+ ACP_PORT ${a$2("acp.help.env.port")}
14
+ ACP_HOSTNAME ${a$2("acp.help.env.hostname")}
15
+ ACP_TIMEOUT ${a$2("acp.help.env.timeout")}
16
+ ACP_ENABLED ${a$2("acp.help.env.enabled")}`);t.option("-c, --channel <type>",a$2("acp.option.channel")).option("-p, --port <number>",a$2("acp.option.port"),r=>parseInt(r,10)).option("-H, --hostname <address>",a$2("acp.option.hostname")).option("-t, --timeout <milliseconds>",a$2("acp.option.timeout"),r=>parseInt(r,10)),t.command("*",{isDefault:true}).action(async()=>{let r=t.opts();await U(t,r,e);});}export{le as registerAcpCommand};
@@ -0,0 +1 @@
1
+ export{T as getACPClientsConfig,S as getACPServerConfig,W as getAcpAgentName,U as getAcpAgentRuntimeConfig,V as getAcpModelConfig,R as loadACPConfig}from'./chunk-PKBPWDSV.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-3AJJMHKA.mjs';import'./chunk-TSX5PZSW.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-E6P3STWN.mjs';import'./chunk-EEWP2VV6.mjs';import'./chunk-NCHKGEE3.mjs';import'./chunk-SLZ3HAH6.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-LGMOIUYA.mjs';import'./chunk-LFYBZHOI.mjs';import'./chunk-AD7K5VE2.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-X6ISXWBN.mjs';
@@ -0,0 +1 @@
1
+ import {a as a$4}from'./chunk-TYD2M4SP.mjs';import'./chunk-FXOUIXIL.mjs';import'./chunk-CQVEAYYW.mjs';import {a as a$3}from'./chunk-5QKMSVQL.mjs';import {l,d,e,h,i,b,c,a as a$5}from'./chunk-M3K32WJV.mjs';import'./chunk-PKBPWDSV.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-3AJJMHKA.mjs';import'./chunk-TSX5PZSW.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-E6P3STWN.mjs';import {a as a$2}from'./chunk-EEWP2VV6.mjs';import'./chunk-NCHKGEE3.mjs';import'./chunk-SLZ3HAH6.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-LGMOIUYA.mjs';import {a as a$1}from'./chunk-LFYBZHOI.mjs';import'./chunk-AD7K5VE2.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-X6ISXWBN.mjs';var a=a$1.create({service:"cli-command-agent"});function W(C,c$1){let y=C.command("agent").description(a$2("agent.command.description"));y.command("list").description(a$2("agent.command.list.description")).action(async()=>{await a$3(c$1.config.directory,async()=>{try{a.debug("Listing agents");let{data:o}=await c$1.sdk.app.agents({});if(!o||o.length===0){console.log(l(a$2("agent.list.empty")));return}let r=[...o].sort((n,t)=>{let g="native"in n&&n.native,d="native"in t&&t.native;return g!==d?g?-1:1:n.name.localeCompare(t.name)});console.log(d(a$2("agent.list.success",{vars:{count:o.length}}))),console.log(""),console.log(a$4({columns:[{key:"name",header:a$2("agent.table.header.name"),minWidth:15},{key:"mode",header:a$2("agent.table.header.mode"),minWidth:10},{key:"native",header:a$2("agent.table.header.native"),minWidth:8}],rows:r.map(n=>({name:n.name,mode:"mode"in n&&n.mode||"primary",native:"native"in n&&n.native?a$2("common.yes"):a$2("common.no")})),width:process.stdout.columns||80,border:"unicode"})),a.debug("Agent list displayed",{count:o.length});}catch(o){a.error("Failed to list agents",{error:o instanceof Error?o.message:String(o)}),console.error(e(a$2("agent.list.error"))),process.exit(1);}});}),y.command("info <agent-id>").description(a$2("agent.command.info.description")).action(async o=>{await a$3(c$1.config.directory,async()=>{try{a.debug("Getting agent info",{agentId:o});let{data:r}=await c$1.sdk.app.agents({}),n=r?.find(t=>t.name===o);if(n||(console.error(e(a$2("agent.get.not_found",{vars:{agentId:o}}))),process.exit(1)),console.log(d(a$2("agent.get.success"))),console.log(""),console.log(h(a$2("agent.info.heading"))),console.log(""),console.log(i(a$2("agent.info.field.name")+":",n.name)),console.log(i(a$2("agent.info.field.mode")+":","mode"in n&&n.mode||"primary")),console.log(i(a$2("agent.info.field.native")+":","native"in n&&n.native?a$2("common.yes"):a$2("common.no"))),"permission"in n&&n.permission){console.log(i(a$2("agent.info.field.permission")+":",""));let t=b();console.log(c(t,a$5.muted,JSON.stringify(n.permission,null,2)));}a.debug("Agent info displayed",{agentId:o});}catch(r){a.error("Failed to get agent info",{agentId:o,error:r instanceof Error?r.message:String(r)}),console.error(e(a$2("agent.get.error"))),process.exit(1);}});}),y.command("create").description(a$2("agent.command.create.description")).requiredOption("--name <name>",a$2("agent.command.create.option.name")).option("--mode <mode>",a$2("agent.command.create.option.mode"),"chat").option("--permission <json>",a$2("agent.command.create.option.permission")).action(async o=>{await a$3(c$1.config.directory,async()=>{try{a.debug("Creating agent",{name:o.name,mode:o.mode}),console.log(h(a$2("agent.create.begin")));let{validateAgentName:r,validateAgentMode:n,validateJsonString:t}=await import('./input-validation-FWKKVCYC.mjs');r(o.name)||(a.error("Invalid agent name",{name:o.name}),console.error(e(a$2("agent.create.validation.name"))),process.exit(1));let g=o.mode||"primary";n(g)||(a.error("Invalid agent mode",{mode:o.mode}),console.error(e(a$2("agent.create.validation.mode"))),process.exit(1));let d$1;if(o.permission){let l=t(o.permission,"permission");l||(a.error("Invalid permission JSON format",{permission:o.permission}),console.error(e(a$2("agent.create.error",{vars:{error:"Invalid permission JSON format"}}))),process.exit(1)),d$1=l;}let{data:m}=await c$1.sdk.agent.create({name:o.name,mode:g,permission:d$1});if(m||(console.error(e(a$2("agent.create.error",{vars:{error:"Agent creation failed"}}))),process.exit(1)),console.log(d(a$2("agent.create.success",{vars:{name:m.name}}))),console.log(""),console.log(h(a$2("agent.info.heading"))),console.log(""),console.log(i(a$2("agent.info.field.name")+":",m.name)),console.log(i(a$2("agent.info.field.mode")+":",m.mode??"all")),console.log(i(a$2("agent.info.field.native")+":",m.native?a$2("common.yes"):a$2("common.no"))),m.permission){console.log(i(a$2("agent.info.field.permission")+":",""));let l=b();console.log(c(l,a$5.muted,JSON.stringify(m.permission,null,2)));}a.debug("Agent created successfully",{name:m.name});}catch(r){a.error("Failed to create agent",{name:o.name,error:r instanceof Error?r.message:String(r)}),console.error(e(a$2("agent.create.error",{vars:{error:r instanceof Error?r.message:String(r)}}))),process.exit(1);}});});}export{W as registerAgentCommands};
@@ -0,0 +1 @@
1
+ import {e}from'./chunk-M3K32WJV.mjs';import {j,ea,k,Ia}from'./chunk-PKBPWDSV.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-3AJJMHKA.mjs';import'./chunk-TSX5PZSW.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-E6P3STWN.mjs';import {a as a$1}from'./chunk-EEWP2VV6.mjs';import'./chunk-NCHKGEE3.mjs';import'./chunk-SLZ3HAH6.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-LGMOIUYA.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import'./chunk-AD7K5VE2.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-X6ISXWBN.mjs';import {basename}from'path';import {iife,Identifier}from'@easbot/utils';var D=a.create({service:"debug.agent"});function z(r,o,e$1){(async()=>{D.debug("Getting agent info",{agentName:o});let t=(await r.sdk.agent.get({agentID:o})).data;t||(console.error(e(a$1("debug.agent.error.not_found",{vars:{agentName:o,command:basename(process.execPath)}}))),process.exit(1));let a=t,d=await C(a),i=await P(a,d);if(e$1.tool){let c=d.find(A=>A.id===e$1.tool);c||(console.error(e(a$1("debug.agent.tool.error.not_found",{vars:{toolID:e$1.tool,agentName:o}}))),process.exit(1)),i[e$1.tool]===false&&(console.error(e(a$1("debug.agent.tool.error.disabled",{vars:{toolID:e$1.tool,agentName:o}}))),process.exit(1));let g=T(e$1.params),b=await E(a,r);D.debug("Executing tool",{toolID:e$1.tool,params:g});let y=await c.execute(g,b);console.log(JSON.stringify({tool:e$1.tool,input:g,result:y},null,2));return}let m={...t,tools:i};console.log(JSON.stringify(m,null,2));})();}async function C(r){let o=r.model??await j.defaultModel();return o.providerID||(o={...o,providerID:"default-provider"}),ea.tools(o,r)}async function P(r,o){let e=k.disabled(o.map(t=>t.id),r.permission),s={};for(let t of o)s[t.id]=!e.has(t.id);return s}function T(r){if(!r)return {};let o=r.trim();if(o.length===0)return {};let e=iife(()=>{try{return JSON.parse(o)}catch(s){try{return new Function(`return (${o})`)()}catch(t){throw new Error(a$1("debug.agent.tool.params.parse_error",{vars:{jsonError:s,evalError:t}}))}}});if(!e||typeof e!="object"||Array.isArray(e))throw new Error(a$1("debug.agent.tool.params.must_be_object"));return e}async function E(r,o){let e=await Ia.create({title:`Debug tool run (${r.name})`}),s=Identifier.ascending("message"),t=r.model??await j.defaultModel();t.providerID||(t={...t,providerID:t.providerID||"default-provider"});let a=Date.now(),d={id:s,sessionID:e.id,role:"assistant",time:{created:a},parentID:s,modelID:t.modelID,providerID:t.providerID,mode:"debug",agent:r.name,path:{cwd:o.config.directory,root:o.config.worktree},cost:0,tokens:{input:0,output:0,reasoning:0,cache:{read:0,write:0}}};await Ia.updateMessage(d);let i=k.merge(r.permission,e.permission??[]);return {sessionID:e.id,messageID:s,callID:Identifier.ascending("part"),agent:r.name,abort:new AbortController().signal,messages:[],metadata:()=>{},async ask(m){for(let c of m.patterns)if(k.evaluate(m.permission,c,i).action==="deny")throw new k.DeniedError(i)}}}export{z as registerAgentCommand};
@@ -0,0 +1 @@
1
+ export{h as createTuiApp,g as getGlobalErrorHandler,e as registerGlobalErrorHandler,f as unregisterGlobalErrorHandler}from'./chunk-MHY26EXB.mjs';import'./chunk-CQVEAYYW.mjs';import'./chunk-PKBPWDSV.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-3AJJMHKA.mjs';import'./chunk-TSX5PZSW.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-E6P3STWN.mjs';import'./chunk-EEWP2VV6.mjs';import'./chunk-NCHKGEE3.mjs';import'./chunk-SLZ3HAH6.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-LGMOIUYA.mjs';import'./chunk-LFYBZHOI.mjs';import'./chunk-AD7K5VE2.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-X6ISXWBN.mjs';
@@ -0,0 +1 @@
1
+ import {a as a$2}from'./chunk-TYD2M4SP.mjs';import'./chunk-FXOUIXIL.mjs';import'./chunk-CQVEAYYW.mjs';import {h,g,e,d}from'./chunk-M3K32WJV.mjs';import {a as a$1}from'./chunk-EEWP2VV6.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import'./chunk-X6ISXWBN.mjs';var i=a.create({service:"cli-command-auth"});function E(n,o){let e=n.command("auth").description(a$1("auth.command.description"));e.command("list").description(a$1("auth.command.list.description")).aliases(["ls"]).action(async()=>{i.debug("Listing credentials"),await v(o);}),e.command("login [provider]").description(a$1("auth.command.login.description")).option("--key <key>",a$1("auth.option.key")).action(async(t,g)=>{t?(i.debug("Logging in to provider",{provider:t}),await f(o,t,g.key)):(i.debug("Interactive login"),await y(o));}),e.command("logout <provider>").description(a$1("auth.command.logout.description")).action(async t=>{i.debug("Logging out from provider",{provider:t}),await b(o,t);});}async function v(n){try{let{data:o}=await n.sdk.config.providers({}),e=o?.providers||[];if(console.log(h(a$1("auth.list.title"))),console.log(""),e.length===0){console.log(g(a$1("auth.list.empty")));return}console.log(a$2({columns:[{key:"provider",header:a$1("auth.table.header.provider"),minWidth:20},{key:"type",header:a$1("auth.table.header.type"),minWidth:15}],rows:e.map(t=>({provider:t.name||t.id,type:"configured"})),width:process.stdout.columns||80,border:"unicode"})),i.debug("Credentials listed",{count:e.length});}catch(o){i.error("Failed to list credentials",{error:o instanceof Error?o.message:String(o)}),console.error(e(a$1("auth.list.error",{vars:{error:o instanceof Error?o.message:String(o)}}))),process.exit(1);}}async function f(n,o,e$1){try{e$1||(console.error(e(a$1("auth.login.key_required"))),console.log(g(a$1("auth.login.key_hint"))),process.exit(1)),console.log(h(a$1("auth.login.logging_in",{vars:{provider:o}}))),await n.sdk.auth.set({providerID:o,info:{type:"api",key:e$1}}),console.log(d(a$1("auth.login.success",{vars:{provider:o}}))),i.debug("Login successful",{provider:o});}catch(t){i.error("Login failed",{provider:o,error:t instanceof Error?t.message:String(t)}),console.error(e(a$1("auth.login.error",{vars:{error:t instanceof Error?t.message:String(t)}}))),process.exit(1);}}async function y(n){try{console.log(h(a$1("auth.interactive.title")));let{data:o}=await n.sdk.config.providers({}),e$1=o?.providers||[],t={easbot:0,anthropic:1,openai:2,google:3},g$1=e$1.sort((s,l)=>(t[s.id]??99)-(t[l.id]??99)).map(s=>({value:s.id,label:s.name||s.id,hint:s.id==="easbot"?"recommended":void 0}));console.log(""),console.log(g(a$1("auth.interactive.select_provider"))),console.log(a$2({columns:[{key:"index",header:"#",minWidth:4},{key:"provider",header:a$1("auth.table.header.provider"),minWidth:25},{key:"hint",header:a$1("auth.table.header.hint"),flex:!0}],rows:g$1.map((s,l)=>({index:`${l+1}`,provider:s.label,hint:s.hint||""})),width:process.stdout.columns||80,border:"unicode"})),console.log(""),console.log(g(a$1("auth.interactive.enter_number")));let h$1=g$1[0]?.value;h$1||(console.error(e(a$1("auth.interactive.no_providers"))),process.exit(1)),await f(n,h$1);}catch(o){i.error("Interactive login failed",{error:o instanceof Error?o.message:String(o)}),console.error(e(a$1("auth.login.error",{vars:{error:o instanceof Error?o.message:String(o)}}))),process.exit(1);}}async function b(n,o){try{console.log(h(a$1("auth.logout.logging_out",{vars:{provider:o}}))),await n.sdk.auth.remove({providerID:o}),console.log(d(a$1("auth.logout.success",{vars:{provider:o}}))),i.debug("Logout successful",{provider:o});}catch(e$1){i.error("Logout failed",{provider:o,error:e$1 instanceof Error?e$1.message:String(e$1)}),console.error(e(a$1("auth.logout.error",{vars:{error:e$1 instanceof Error?e$1.message:String(e$1)}}))),process.exit(1);}}export{E as registerAuthCommand};
@@ -0,0 +1 @@
1
+ export{a as bootstrap,b as bootstrapProgram}from'./chunk-5QKMSVQL.mjs';import'./chunk-PKBPWDSV.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-3AJJMHKA.mjs';import'./chunk-TSX5PZSW.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-E6P3STWN.mjs';import'./chunk-EEWP2VV6.mjs';import'./chunk-NCHKGEE3.mjs';import'./chunk-SLZ3HAH6.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-LGMOIUYA.mjs';import'./chunk-LFYBZHOI.mjs';import'./chunk-AD7K5VE2.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-X6ISXWBN.mjs';
@@ -0,0 +1,11 @@
1
+ import {b as b$1}from'./chunk-MMU3Z6V2.mjs';import {a as a$1}from'./chunk-XPF2LJT2.mjs';import {Ka,ua}from'./chunk-PKBPWDSV.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-3AJJMHKA.mjs';import'./chunk-TSX5PZSW.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-E6P3STWN.mjs';import {a as a$2}from'./chunk-EEWP2VV6.mjs';import'./chunk-NCHKGEE3.mjs';import {b as b$2}from'./chunk-SLZ3HAH6.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-LGMOIUYA.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import'./chunk-AD7K5VE2.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-X6ISXWBN.mjs';import {Command}from'commander';import'path';import O from'fs/promises';import {parse}from'jsonc-parser';var y="easbot",h="EASBot - Multi-Agent Collaboration Ecosystem CLI Tool",P="build",x=["main","ops","explorer"];var b=a.create({service:"cli-config"});async function N(n){try{let o=await O.readFile(n,"utf-8");return parse(o)||{}}catch(o){if(o&&typeof o=="object"&&"code"in o){if(o.code==="ENOENT")return {};b.warn("Failed to read config file",{filePath:n,error:o.code});}else b.error("Failed to parse config file",{filePath:n,error:o instanceof Error?o.message:String(o)});return {}}}function T(...n){let o={};for(let t of n)for(let[e,i]of Object.entries(t))i!==void 0&&(typeof i=="object"&&!Array.isArray(i)&&i!==null?o[e]={...o[e],...i}:o[e]=i);return o}function k(){return {server:{port:3e3,hostname:"localhost"},agent:{},model:{},permission:{}}}async function w(n={}){let{cwd:o=process.cwd(),customConfigPath:t}=n,e=k();if(n.sdk)try{let{data:i}=await n.sdk.config.get({});i&&(e=i);}catch{}if(t){let i=await N(t);Object.keys(i).length>0&&(e=T(e,i));}return e.directory=o,e}async function A(n={}){let o=n.cwd||process.cwd(),t=n.root||Ka.worktree,e=ua({directory:o}),i=await w({cwd:o,root:t,sdk:e,customConfigPath:n.customConfigPath});return {programVersion:b$2.getVersion(),channelOptions:["local","web","api"],agentOptions:`${i.default_agent||P}|${x.join("|")}`,config:i,sdk:e}}var j=[{commands:[{name:"tui",description:"\u542F\u52A8 TUI \u754C\u9762",hasSubcommands:false}],register:async({program:n,ctx:o})=>{(await import('./tui-UTCI4ERG.mjs')).registerTuiCommand(n,o);}},{commands:[{name:"run",description:"\u8FD0\u884C\u5355\u6B21\u5BF9\u8BDD",hasSubcommands:false}],register:async({program:n,ctx:o})=>{(await import('./run-HRRJXIVI.mjs')).registerRunCommand(n,o);}},{commands:[{name:"generate",description:"\u751F\u6210 OpenAPI \u89C4\u8303",hasSubcommands:false}],register:async({program:n,ctx:o})=>{(await import('./generate-NXGIMILE.mjs')).registerGenerateCommand(n,o);}},{commands:[{name:"agent",description:"Agent \u7BA1\u7406\u547D\u4EE4",hasSubcommands:true}],register:async({program:n,ctx:o})=>{(await import('./agent-R3VIV25Y.mjs')).registerAgentCommands(n,o);}},{commands:[{name:"session",description:"\u4F1A\u8BDD\u7BA1\u7406\u547D\u4EE4",hasSubcommands:true}],register:async({program:n,ctx:o})=>{let{registerSessionCommands:t}=await import('./session-HO5727MY.mjs');t(n,o);}},{commands:[{name:"mcp",description:"MCP \u670D\u52A1\u5668\u7BA1\u7406",hasSubcommands:true}],register:async({program:n,ctx:o})=>{(await import('./mcp-AHMVQDPC.mjs')).registerMcpCommands(n,o);}},{commands:[{name:"acp",description:"ACP Agent \u901A\u4FE1\u9002\u914D\u5668\u547D\u4EE4",hasSubcommands:true}],register:async({program:n,ctx:o})=>{(await import('./acp-D5I5IUMI.mjs')).registerAcpCommand(n,o);}},{commands:[{name:"debug",description:"\u8C03\u8BD5\u548C\u8BCA\u65AD\u5DE5\u5177",hasSubcommands:true}],register:async({program:n,ctx:o})=>{(await import('./debug-MW53KD7T.mjs')).registerDebugCommands(n,o);}},{commands:[{name:"gateway",description:"Gateway \u670D\u52A1\u7BA1\u7406\u547D\u4EE4",hasSubcommands:true}],register:async({program:n,ctx:o})=>{(await import('./gateway-3QKRAMO2.mjs')).registerGatewayCommand(n,o);}},{commands:[{name:"auth",description:"Provider \u51ED\u636E\u7BA1\u7406",hasSubcommands:true}],register:async({program:n,ctx:o})=>{(await import('./auth-2I7U24YF.mjs')).registerAuthCommand(n,o);}},{commands:[{name:"export",description:"\u5BFC\u51FA\u4F1A\u8BDD\u6570\u636E",hasSubcommands:false}],register:async({program:n,ctx:o})=>{(await import('./export-BGH24SO2.mjs')).registerExportCommand(n,o);}},{commands:[{name:"github",description:"GitHub Agent \u7BA1\u7406",hasSubcommands:true}],register:async({program:n,ctx:o})=>{(await import('./github-L3XIDEEQ.mjs')).registerGithubCommand(n,o);}},{commands:[{name:"import",description:"\u5BFC\u5165\u4F1A\u8BDD\u6570\u636E",hasSubcommands:false}],register:async({program:n,ctx:o})=>{(await import('./import-JYLIHQCA.mjs')).registerImportCommand(n,o);}},{commands:[{name:"pr",description:"PR \u68C0\u51FA\u548C\u4F1A\u8BDD\u5BFC\u5165",hasSubcommands:false}],register:async({program:n,ctx:o})=>{(await import('./pr-4WGOFODT.mjs')).registerPrCommand(n,o);}},{commands:[{name:"stats",description:"Token \u4F7F\u7528\u91CF\u548C\u6210\u672C\u7EDF\u8BA1",hasSubcommands:false}],register:async({program:n,ctx:o})=>{(await import('./stats-MILDLIZD.mjs')).registerStatsCommand(n,o);}},{commands:[{name:"update",description:"\u66F4\u65B0 Easbot CLI",hasSubcommands:false}],register:async({program:n,ctx:o})=>{(await import('./update-IEZVD4U7.mjs')).registerUpdateCommand(n,o);}}];async function B(n,o,t=process.argv){for(let e of j)await e.register({program:n,ctx:o,argv:t});}async function v(n,o,t=process.argv){await B(n,o,t);}function L(n,o){n.name(a$2("program.name")).description(a$2("program.description")),n.option("--cwd <directory>",a$2("program.option.cwd"),process.cwd()),n.option("--config <path>",a$2("program.option.config")),n.option("--print-logs",a$2("program.option.print_logs")),n.option("--log-level <level>",a$2("program.option.log_level"),"INFO"),n.option("--debug",a$2("program.option.debug")),n.helpOption("-h, --help",a$2("program.help.option")),n.helpCommand("help [command]",a$2("program.help.command")),n.configureHelp({sortSubcommands:true,sortOptions:true,optionTerm:t=>t.flags,subcommandTerm:t=>t.name()}),n.configureOutput({writeOut:t=>{process.stdout.write(E(t));},writeErr:t=>{process.stderr.write(E(t));},outputError:(t,e)=>{e(t);}}),n.addHelpText("afterAll",({command:t})=>t!==n?"":`
2
+ ${a$2("program.help.examples")}:
3
+ easbot # ${a$2("help.example.tui")}
4
+ easbot tui --continue # ${a$2("help.example.tui_continue")}
5
+ easbot run --prompt "Hello" # ${a$2("help.example.run")}
6
+ easbot agent list # ${a$2("help.example.agent_list")}
7
+ easbot mcp list # ${a$2("help.example.mcp_list")}
8
+ easbot --help # ${a$2("help.example.help")}
9
+
10
+ ${a$2("program.help.docs")}: https://easbot.dev/docs
11
+ `);}function E(n){return n.replace(/^Usage:/gm,"Usage:").replace(/^Options:/gm,"Options:").replace(/^Commands:/gm,"Commands:")}var _=false;function R(n,o){n.hook("preAction",async(t,e)=>{G(e);let i=process.argv;if(D(i))return;let c=F(i);H(c)||M(o);});}function G(n){let o=n;for(;o.parent?.parent;)o=o.parent;let t=o.name();!t||t==="easbot"||(process.title=`easbot-${t}`);}function D(n){return n.some(o=>o==="-h"||o==="--help"||o==="-v"||o==="--version"||o==="help")}function F(n){let o=[];for(let t=2;t<n.length;t++){let e=n[t];if(e){if(e.startsWith("-"))break;o.push(e);}}return o}function H(n){if(process.env.EASBOT_HIDE_BANNER==="1"||process.env.EASBOT_HIDE_BANNER==="true")return true;let o=new Set(["completion","update"]),t=n[0];return t!==void 0&&o.has(t)}function M(n){_||(_=true,console.log(a$2("program.version.banner",{vars:{version:n}})));}var U=Symbol.for("easbot.cli.programContext");function S(n,o){n[U]=o;}var m=a.create({service:"cli-program"});async function Ho(n={}){m.debug("Initializing resource manager"),a$1.initialize();let o=new Command,t=await A({cwd:n.directory,root:void 0,customConfigPath:n.config_path});Object.assign(t.config,{print_logs:n.print_logs,log_level:n.log_level,debug:n.debug});let e=process.argv;return S(o,t),o.name(y).version(t.programVersion,"-V, --version",a$2("program.version.description")).description(h),L(o),R(o,t.programVersion),await $(o,t),await v(o,t,e),W(o),z(o),o}async function $(n,o){try{m.debug("Loading plugin system");let t=b$1(o),e=o.config.plugins,i={enabled:e&&typeof e=="object"&&"enabled"in e?e.enabled!==!1:!0,loadPaths:e&&typeof e=="object"&&"load"in e&&e.load&&typeof e.load=="object"&&"paths"in e.load&&Array.isArray(e.load.paths)?e.load.paths:[],allow:e&&typeof e=="object"&&"allow"in e&&Array.isArray(e.allow)?e.allow:[],deny:e&&typeof e=="object"&&"deny"in e&&Array.isArray(e.deny)?e.deny:[]};if(await t.loadAll(i),o._pluginCliRegistrations&&o._pluginCliRegistrations.length>0){m.debug("Registering plugin CLI commands",{count:o._pluginCliRegistrations.length});for(let c of o._pluginCliRegistrations)try{c.register({program:n,context:o}),m.debug("Plugin CLI commands registered",{pluginId:c.pluginId,commands:c.commands});}catch(p){m.error("Failed to register plugin CLI commands",{pluginId:c.pluginId,error:p});}}m.info("Plugin system loaded",{loadedPlugins:t.getLoadedPluginIds()});}catch(t){m.error("Failed to load plugin system",{error:t});}}function W(n){n.on("command:*",o=>{let t=o[0];console.error(a$2("program.error.unknown_command",{vars:{command:t}})),console.error(""),console.error(a$2("program.error.unknown_command_hint")),process.exit(1);});}function z(n){n.exitOverride(o=>{throw o.code==="commander.help"&&process.exit(0),o.code==="commander.version"&&process.exit(0),o.code==="commander.helpDisplayed"&&process.exit(0),o.code?.startsWith("commander.")&&(console.error(a$2("program.error.commander",{vars:{message:o.message}})),process.exit(1)),o});}export{Ho as buildProgram};
@@ -0,0 +1 @@
1
+ export{a as Bus}from'./chunk-PKBPWDSV.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-3AJJMHKA.mjs';import'./chunk-TSX5PZSW.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-E6P3STWN.mjs';import'./chunk-EEWP2VV6.mjs';import'./chunk-NCHKGEE3.mjs';import'./chunk-SLZ3HAH6.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-LGMOIUYA.mjs';import'./chunk-LFYBZHOI.mjs';import'./chunk-AD7K5VE2.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-X6ISXWBN.mjs';
@@ -0,0 +1 @@
1
+ import {b}from'./chunk-X6ISXWBN.mjs';var c=100,d=26214400,o=class extends Error{constructor(e){let n=`Context window exhausted: remaining ${e.remaining} tokens`;super(n);b(this,"remaining");b(this,"contextWindow");b(this,"tokenEstimate");this.name="ContextWindowExhaustedError",this.remaining=e.remaining,this.contextWindow=e.contextWindow,this.tokenEstimate=e.tokenEstimate;}},s={General:"general",Coder:"coder"},l=Object.values(s),x=s.General,r={General:"general",Coder:"coder",All:"all"},E=Object.values(r),g=r.All,T={maxEntries:100,maxBytes:26214400,timestampCheck:true},u={charsPerToken:4},y=["BOOT.md","IDENTITY.md","SOUL.md","USER.md","TOOLS.md","CONTEXT.md","CODER.md","HEARTBEAT.md"],M="BOOTSTRAP.md",C={"AGENTS.md":"AGENTS.md","MEMORY.md":".easbot/memory/MEMORY.md"},O=["SOUL.md","TOOLS.md","IDENTITY.md","USER.md","BOOT.md"],S={"BOOT.md":{type:"system",scope:"all",priority:10,source:"BOOT.txt",target:"BOOT.md"},"BOOTSTRAP.md":{type:"system",scope:"all",priority:20,source:"BOOTSTRAP.txt",target:"BOOTSTRAP.md"},"IDENTITY.md":{type:"system",scope:"all",priority:30,source:"IDENTITY.txt",target:"IDENTITY.md"},"SOUL.md":{type:"system",scope:"all",priority:40,source:"SOUL.txt",target:"SOUL.md"},"USER.md":{type:"system",scope:"all",priority:50,source:"USER.txt",target:"USER.md"},"TOOLS.md":{type:"system",scope:"all",priority:60,source:"TOOLS.txt",target:"TOOLS.md"},"CONTEXT.md":{type:"system",scope:"all",priority:70,source:"CONTEXT.txt",target:"CONTEXT.md"},"CODER.md":{type:"system",scope:"coder",priority:80,source:"CODER.txt",target:"CODER.md"},"HEARTBEAT.md":{type:"system",scope:"all",priority:90,dynamic:true,source:"HEARTBEAT.txt",target:"HEARTBEAT.md"},"MEMORY.md":{type:"system",scope:"all",priority:100,source:"MEMORY.txt",target:"MEMORY.md"},"AGENTS.md":{type:"system",scope:"all",priority:110,source:"AGENTS.txt",target:"AGENTS.md"}},A=1e3,I=2e3;export{c as a,d as b,o as c,s as d,l as e,x as f,r as g,E as h,g as i,T as j,u as k,y as l,M as m,C as n,O as o,S as p,A as q,I as r};
@@ -0,0 +1 @@
1
+ import {formatLocalISOCompact}from'@easbot/utils';import {CommandMetadataSchema}from'@easbot/plugin';export{CommandMetadataSchema as a}from'@easbot/plugin';async function h(n){let{ConfigMarkdown:t}=await import('./markdown-Z6UXVBNP.mjs'),e=await t.parse(n);return {metadata:CommandMetadataSchema.parse(e.data),content:e.content}}function x(n,t,e="command"){return {name:n.name,description:n.description,agent:n.agent,model:n.model,source:e,scope:n.scope,commandType:n.commandType??"prompt",hints:n.hints??[],hidden:n.hidden??false,execute:async(o,i)=>{let m=w(t,o);return {title:n.name,metadata:{sessionID:i.sessionID},output:m,success:true,parts:[{type:"text",text:m}]}}}}async function D(n,t="command"){let{glob:e}=await import('glob'),{Filesystem:o}=await import('@easbot/utils');if(!await o.isDir(n))return [];let i=await e("*.md",{cwd:n,absolute:true,nodir:true,follow:false,dot:false}),m=[];for(let r of i){let{ConfigMarkdown:d}=await import('./markdown-Z6UXVBNP.mjs'),{Bus:u}=await import('./bus-CWP3DYEO.mjs'),{Session:p}=await import('./session-V4RGFQKO.mjs'),{NamedError:C}=await import('@easbot/utils');await d.parse(r).then(a=>{let s=CommandMetadataSchema.parse(a.data),f=x(s,a.content,t);m.push(f);}).catch(a=>{let s=a instanceof Error?a.message:`Failed to load command ${r}`;u.publish(p.Event.Error,{error:new C.Unknown({message:s}).toObject()});});}return m}function g(n){return n instanceof Date?formatLocalISOCompact(n):Array.isArray(n)||n!==null&&typeof n=="object"&&n.constructor===Object?JSON.stringify(n,null,2):String(n)}function w(n,t){return typeof t=="string"?n.replace(/\{\{ARGUMENTS\}\}/gi,t):n.replace(/\{\{(\w+)\}\}/gi,(e,o)=>{let i=o.toUpperCase();if(i==="ARGUMENTS")return JSON.stringify(t);let m=t[o]??t[i];return m===void 0?`{{${o}}}`:g(m)})}function I(n,t){let{init:e,isEnabled:o,...i}=t;return {...i,name:n,isEnabled:o,init:e?async m=>({isEnabled:(await e(m)).isEnabled??(typeof o=="function"?await o():o)}):void 0}}export{h as b,x as c,D as d,w as e,I as f};
@@ -0,0 +1 @@
1
+ import {Ka,mb}from'./chunk-PKBPWDSV.mjs';import {a}from'./chunk-LFYBZHOI.mjs';var e=a.create({service:"cli-bootstrap"});async function f(o,i){let r=o||process.cwd();try{let{Global:t}=await import('./global-QYCQXNCR.mjs');await t.init();}catch(t){throw e.error("Failed to initialize Global",{error:t instanceof Error?t.message:String(t)}),new Error(`Global initialization failed: ${t instanceof Error?t.message:String(t)}`)}try{return await Ka.provide({directory:r,init:mb,fn:async()=>await i()})}catch(t){throw e.error("Failed to execute in Instance context",{directory:r,error:t instanceof Error?t.message:String(t)}),t}}async function g(o={}){let i=o.directory??process.cwd();try{let{Global:r}=await import('./global-QYCQXNCR.mjs');await r.init();}catch(r){throw e.error("Failed to initialize Global",{error:r instanceof Error?r.message:String(r)}),new Error(`Global initialization failed: ${r instanceof Error?r.message:String(r)}`)}try{return await Ka.provide({directory:i,init:mb,fn:async()=>{let{buildProgram:r}=await import('./build-program-KUCF2N7D.mjs');return await r(o)}})}catch(r){throw e.error("Failed to build program in Instance context",{directory:i,error:r instanceof Error?r.message:String(r)}),r}}export{f as a,g as b};
@@ -0,0 +1,3 @@
1
+ import f from'gray-matter';import {readFile}from'fs/promises';import {NamedError,formatLocalISOCompact}from'@easbot/utils';import {z}from'zod';var l;(o=>{o.FILE_REGEX=/(?<![\w`])#(\S+)/g,o.SHELL_REGEX=/!`([^`]+)`/g;function $(t){return Array.from(t.matchAll(o.FILE_REGEX))}o.files=$;function j(t){return Array.from(t.matchAll(o.SHELL_REGEX))}o.shell=j;function y(t){let s=t.match(/^---\r?\n([\s\S]*?)\r?\n---/);if(!s)return t;let r=s[1],c=r?.split(`
2
+ `)??[],e=[];for(let n of c){if(n.trim().startsWith("#")||n.trim()===""){e.push(n);continue}if(n.match(/^\s+/)){e.push(n);continue}let m=n.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*:\s*(.*)$/);if(!m){e.push(n);continue}let E=m[1],i=m?.[2]?.trim();if(i===""||i===">"||i==="|"||i?.startsWith('"')||i?.startsWith("'")){e.push(n);continue}if(i?.includes(":")){e.push(`${E}: |-`),e.push(` ${i}`);continue}e.push(n);}let a=e.join(`
3
+ `);return r?t.replace(r,()=>a):t}o.fallbackSanitization=y;async function F(t){let s=await readFile(t,"utf-8");try{return f(s)}catch{try{return f(y(s))}catch(r){throw new o.FrontmatterError({path:t,message:`${t}: Failed to parse YAML frontmatter: ${r instanceof Error?r.message:String(r)}`},{cause:r})}}}o.parse=F,o.FrontmatterError=NamedError.create("ConfigFrontmatterError",z.object({path:z.string(),message:z.string()}));function L(t,s){let r=t;for(let[c,e]of Object.entries(s)){if(e==null)continue;let a=new RegExp(`\\{\\{${c}\\}\\}`,"g");r=r.replace(a,u(e));}return r}o.replaceVariables=L;function u(t){return t instanceof Date?formatLocalISOCompact(t):Array.isArray(t)?t.map(u).join(", "):t!==null&&typeof t=="object"?JSON.stringify(t,null,2):String(t)}o.formatVariableValue=u;})(l||(l={}));export{l as a};
@@ -0,0 +1,2 @@
1
+ import {mkdir,readFile,readdir,rm,writeFile}from'fs/promises';import s from'path';import {xdgData,xdgCache,xdgConfig,xdgState}from'xdg-basedir';import O from'os';import {Filesystem}from'@easbot/utils';var p={name:"@easbot/agent",version:"0.2.24",description:"Core Agent for the easbot monorepo ecosystem",type:"module",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: 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.21.1","@ai-sdk/alibaba":"^1.0.23","@ai-sdk/amazon-bedrock":"^4.0.105","@ai-sdk/anthropic":"^3.0.77","@ai-sdk/azure":"^3.0.64","@ai-sdk/cerebras":"^2.0.51","@ai-sdk/cohere":"3.0.35","@ai-sdk/deepinfra":"^2.0.51","@ai-sdk/deepseek":"^2.0.35","@ai-sdk/gateway":"^3.0.114","@ai-sdk/google":"^3.0.73","@ai-sdk/google-vertex":"^4.0.128","@ai-sdk/groq":"^3.0.39","@ai-sdk/mistral":"^3.0.37","@ai-sdk/openai":"^3.0.63","@ai-sdk/openai-compatible":"^2.0.47","@ai-sdk/perplexity":"^3.0.33","@ai-sdk/provider":"^3.0.10","@ai-sdk/provider-utils":"^4.0.27","@ai-sdk/togetherai":"^2.0.51","@ai-sdk/vercel":"^2.0.49","@ai-sdk/xai":"^3.0.90","@aws-sdk/credential-providers":"^3.1047.0","@clack/prompts":"^1.4.0","@easbot/codebase":"workspace:*","@easbot/gateway":"workspace:*","@easbot/local-model-sdk":"workspace:*","@easbot/memory":"workspace:*","@easbot/mcp":"workspace:*","@easbot/note":"workspace:*","@easbot/ollama-sdk":"workspace:*","@easbot/plugin":"workspace:*","@easbot/sdk":"workspace:*","@easbot/tui":"workspace:*","@easbot/types":"workspace:*","@easbot/utils":"workspace:*","@hono/node-server":"^2.0.2","@hono/node-ws":"^1.3.1","@hono/standard-validator":"^0.2.2","@hono/zod-validator":"^0.7.6","@modelcontextprotocol/sdk":"^1.29.0","@openrouter/ai-sdk-provider":"^2.9.0","@parcel/watcher":"^2.5.6","@standard-schema/spec":"^1.1.0","@wasmer/wasi":"^1.2.2","@zip.js/zip.js":"^2.8.26",ai:"^6.0.182","ai-gateway-provider":"^3.1.3",ajv:"^8.20.0",axios:"^1.16.1","bash-parser":"^0.5.0","bonjour-service":"^1.4.0",chalk:"^5.6.2",clipboardy:"^5.3.1",commander:"^14.0.3","decimal.js":"^10.6.0",dotenv:"^17.4.2",diff:"^9.0.0","drizzle-orm":"^0.45.2","fast-check":"^4.8.0",fuzzysort:"^3.1.0","gitlab-ai-provider":"^6.6.0",glob:"^13.0.6","google-auth-library":"^10.6.2","gray-matter":"^4.0.3",hono:"^4.12.18","hono-openapi":"^1.3.0",ignore:"^7.0.5","jieba-wasm":"^2.4.0",jiti:"^2.7.0","jsonc-parser":"^3.3.1","lru-cache":"^11.3.6",minimatch:"^10.2.5","node-gyp":"^12.3.0","node-html-parser":"^7.1.0","node-pty":"^1.1.0",open:"^11.0.0",remeda:"^2.34.1","tree-sitter-bash":"^0.25.1",turndown:"^7.2.4",ulid:"^3.0.2",undici:"^8.3.0","vscode-jsonrpc":"^8.2.1","vscode-languageserver-types":"^3.17.5",which:"^6.0.1","why-is-node-running":"^3.2.2",ws:"^8.20.1","xdg-basedir":"5.1.0",zod:"^4.4.3","zod-to-json-schema":"^3.25.2"},devDependencies:{"@actions/core":"^3.0.1","@actions/github":"^9.1.1","@octokit/graphql":"^9.0.3","@octokit/rest":"^22.0.1","@octokit/webhooks-types":"^7.6.1","@types/node":"^25.8.0","@types/turndown":"^5.0.6","@types/which":"^3.0.4","@types/ws":"^8.18.1","@vitest/coverage-v8":"^4.1.6",esbuild:"^0.28.0","esbuild-plugin-alias":"^0.2.1",tsup:"^8.5.1",tsx:"^4.22.0",typescript:"^6.0.3",vitest:"^4.1.6"}};var l="easbot",d=Filesystem.normalize(s.join(xdgData,l)),S=Filesystem.normalize(s.join(xdgCache,l)),z=Filesystem.normalize(s.join(xdgConfig,l)),N=Filesystem.normalize(s.join(xdgState,l)),g;(e=>{e.Path={get home(){return Filesystem.normalize(process.env.EASBOT_TEST_HOME||O.homedir())},data:d,bin:Filesystem.normalize(s.join(d,"bin")),log:Filesystem.normalize(s.join(d,"log")),cache:S,config:z,state:N};function B(){return (process.env.PATH||process.env.Path||"")+s.delimiter+e.Path.bin}e.getPathWithBin=B;let t=null,o=null;async function b(){if(t)return t;if(process.env.EASBOT_VERSION)return t=process.env.EASBOT_VERSION,t;try{t=p.version||"local";}catch{t="local";}return t||"local"}function f(){if(t)return t;if(process.env.EASBOT_VERSION)return t=process.env.EASBOT_VERSION,t;try{t=p.version||"local";}catch{t="local";}return t||"local"}e.getVersion=f;function u(){if(o)return o;if(process.env.EASBOT_CHANNEL)return o=process.env.EASBOT_CHANNEL,o;let i=f();return i==="local"||i.includes("dev")?o="local":i.includes("beta")||i.includes("alpha")?o="preview":o="latest",o||"local"}e.getChannel=u;function C(){return u()==="local"}e.isLocal=C;function H(){return u()==="preview"}e.isPreview=H;let h=false,n=null;async function V(){if(!h)return n||(n=(async()=>{await b(),await Promise.all([mkdir(e.Path.data,{recursive:true}),mkdir(e.Path.config,{recursive:true}),mkdir(e.Path.state,{recursive:true}),mkdir(e.Path.log,{recursive:true}),mkdir(e.Path.bin,{recursive:true}),mkdir(e.Path.cache,{recursive:true})]).then(()=>{let c=process.env.PATH||process.env.Path||"";process.env.PATH=c+s.delimiter+e.Path.bin,process.env.EASBOT_DATA_PATH=e.Path.data,process.env.EASBOT_CONFIG_PATH=e.Path.config,process.env.EASBOT_STATE_PATH=e.Path.state,process.env.EASBOT_LOG_PATH=e.Path.log,process.env.EASBOT_BIN_PATH=e.Path.bin,process.env.EASBOT_CACHE_PATH=e.Path.cache;});let i="1",m=s.join(e.Path.cache,"version");if(await readFile(m,"utf-8").catch(()=>"0")!==i){try{let c=await readdir(e.Path.cache);await Promise.all(c.map(k=>rm(s.join(e.Path.cache,k),{recursive:!0,force:!0})));}catch{}await writeFile(m,i);}h=true;})(),n)}e.init=V;})(g||(g={}));
2
+ export{g as a};
@@ -0,0 +1 @@
1
+ import {a}from'./chunk-LFYBZHOI.mjs';import r from'zod';var p;(f=>{a.create({service:"event"});let o=new Map;function a$1(e,t){let n={type:e,properties:t};return o.set(e,n),n}f.define=a$1;function y(){return r.discriminatedUnion("type",o.entries().map(([e,t])=>r.object({type:r.literal(e),properties:t.properties}).meta({ref:"Event."+t.type})).toArray()).meta({ref:"Event"})}f.payloads=y;})(p||(p={}));export{p as a};
@@ -0,0 +1 @@
1
+ var e="\\x1b\\[[0-9;]*m",n="\\x1b\\]8;;.*?\\x1b\\\\|\\x1b\\]8;;\\x1b\\\\",t=new RegExp(e,"g"),g=new RegExp(n,"g");function s(r){return !r||r.length===0?"":r.replace(g,"").replace(t,"")}function c(r){return !r||r.length===0?0:Array.from(s(r)).length}export{s as a,c as b};
@@ -0,0 +1 @@
1
+ import {a}from'./chunk-CJTCCLW4.mjs';import e from'zod';var d={Connected:a.define("server.connected",e.object({})),Disposed:a.define("global.disposed",e.object({}))},n={PromptAppend:a.define("tui.prompt.append",e.object({text:e.string()})),CommandExecute:a.define("tui.command.execute",e.object({command:e.union([e.enum(["session.list","session.new","session.share","session.interrupt","session.compact","session.page.up","session.page.down","session.line.up","session.line.down","session.half.page.up","session.half.page.down","session.first","session.last","prompt.clear","prompt.submit","agent.cycle"]),e.string()])})),ToastShow:a.define("tui.toast.show",e.object({title:e.string().optional(),message:e.string(),variant:e.enum(["info","success","warning","error"]),duration:e.number().default(5e3).optional().describe("Duration in milliseconds")})),SessionSelect:a.define("tui.session.select",e.object({sessionID:e.string().regex(/^ses/).describe("Session ID to navigate to")})),StatusBarRefresh:a.define("tui.statusbar.refresh",e.object({reason:e.string().optional().describe("Reason for refresh (for debugging)")})),FooterBarRefresh:a.define("tui.footerbar.refresh",e.object({reason:e.string().optional().describe("Reason for refresh (for debugging)")})),ChatLogRefresh:a.define("tui.chatlog.refresh",e.object({reason:e.string().optional().describe("Reason for refresh (for debugging)")}))};var m={MessageUpdated:a.define("message.updated",e.object({info:e.custom()})),MessagePartUpdated:a.define("message.part.updated",e.object({part:e.custom(),delta:e.string().optional()})),SessionStatus:a.define("session.status",e.object({sessionID:e.string(),status:e.object({type:e.enum(["idle","running","waiting"])})})),SessionError:a.define("session.error",e.object({sessionID:e.string(),error:e.object({name:e.string(),data:e.object({message:e.string()}).optional()})})),AgentUpdated:a.define("agent.updated",e.object({agentId:e.string()})),SessionUpdated:a.define("session.updated",e.object({info:e.object({id:e.string(),title:e.string(),model:e.object({providerID:e.string(),modelID:e.string()}).optional()})})),PermissionAsked:a.define("permission.asked",e.object({id:e.string(),sessionID:e.string(),permission:e.string(),patterns:e.array(e.string())})),QuestionAsked:a.define("question.asked",e.object({id:e.string(),sessionID:e.string(),questions:e.array(e.custom())})),SessionSelect:a.define("tui.session.select",e.object({sessionID:e.string()})),ToastShow:a.define("tui.toast.show",e.object({title:e.string().optional(),message:e.string(),variant:e.enum(["info","success","warning","error"]),duration:e.number().default(5e3).optional()})),StatusBarRefresh:a.define("tui.statusbar.refresh",e.object({reason:e.string().optional()})),FooterBarRefresh:a.define("tui.footerbar.refresh",e.object({reason:e.string().optional()})),ChatLogRefresh:a.define("tui.chatlog.refresh",e.object({reason:e.string().optional()})),PromptAppend:n.PromptAppend,CommandExecute:n.CommandExecute};export{d as a,n as b,m as c};
@@ -0,0 +1,2 @@
1
+ import {a}from'./chunk-LFYBZHOI.mjs';import {a as a$1}from'./chunk-AD7K5VE2.mjs';import E from'path';import j from'fs/promises';import t from'zod';import {NamedError,lazy,PKG,Filesystem,Shell}from'@easbot/utils';import {ZipReader,BlobReader,BlobWriter}from'@zip.js/zip.js';var F;(c=>{let $=a.create({service:"ripgrep"}),A=t.object({elapsed:t.object({secs:t.number(),nanos:t.number(),human:t.string()}),searches:t.number(),searches_with_match:t.number(),bytes_searched:t.number(),bytes_printed:t.number(),matched_lines:t.number(),matches:t.number()}),S=t.object({type:t.literal("begin"),data:t.object({path:t.object({text:t.string()})})});c.Match=t.object({type:t.literal("match"),data:t.object({path:t.object({text:t.string()}),lines:t.object({text:t.string()}),line_number:t.number(),absolute_offset:t.number(),submatches:t.array(t.object({match:t.object({text:t.string()}),start:t.number(),end:t.number()}))})});let M=t.object({type:t.literal("end"),data:t.object({path:t.object({text:t.string()}),binary_offset:t.number().nullable(),stats:A})}),D=t.object({type:t.literal("summary"),data:t.object({elapsed_total:t.object({human:t.string(),nanos:t.number(),secs:t.number()}),stats:A})}),O=t.union([S,c.Match,M,D]),W={"arm64-darwin":{platform:"aarch64-apple-darwin",extension:"tar.gz"},"arm64-linux":{platform:"aarch64-unknown-linux-gnu",extension:"tar.gz"},"x64-darwin":{platform:"x86_64-apple-darwin",extension:"tar.gz"},"x64-linux":{platform:"x86_64-unknown-linux-musl",extension:"tar.gz"},"x64-win32":{platform:"x86_64-pc-windows-msvc",extension:"zip"}};c.ExtractionFailedError=NamedError.create("RipgrepExtractionFailedError",t.object({filepath:t.string(),stderr:t.string()})),c.UnsupportedPlatformError=NamedError.create("RipgrepUnsupportedPlatformError",t.object({platform:t.string()})),c.DownloadFailedError=NamedError.create("RipgrepDownloadFailedError",t.object({url:t.string(),status:t.number()}));let T=lazy(async()=>{let e=await PKG.which("rg");if(e){if((await j.stat(e).catch(()=>{}))?.isFile())return {filepath:Filesystem.resolve(e)};$.warn("bun.which returned invalid rg path",{filepath:e});}let l=Filesystem.resolve(E.join(a$1.Path.bin,"rg"+(process.platform==="win32"?".exe":"")));if(!await PKG.file(l).exists()){let i=`${process.arch}-${process.platform}`,f=W[i];if(!f)throw new c.UnsupportedPlatformError({platform:i});let r="14.1.1",b=`ripgrep-${r}-${f.platform}.${f.extension}`,u=`https://github.com/BurntSushi/ripgrep/releases/download/${r}/${b}`,m=await fetch(u);if(!m.ok)throw new c.DownloadFailedError({url:u,status:m.status});let p=await m.arrayBuffer(),n=E.join(a$1.Path.bin,b);if(await PKG.write(n,new Uint8Array(p)),f.extension==="tar.gz"){let o=["tar","-xzf",n,"--strip-components=1"];i.endsWith("-darwin")&&o.push("--include=*/rg"),i.endsWith("-linux")&&o.push("--wildcards","*/rg");let a=await Shell.run(void 0,o.join(" "),{cwd:a$1.Path.bin});if(a.code!==0)throw new c.ExtractionFailedError({filepath:l,stderr:a.stderr})}if(f.extension==="zip"){let a=await PKG.file(n).arrayBuffer(),d=new ZipReader(new BlobReader(new Blob([a]))),g=await d.getEntries(),w;for(let v of g)if(v.filename.endsWith("rg.exe")){w=v;break}if(!w)throw new c.ExtractionFailedError({filepath:n,stderr:"rg.exe not found in zip archive"});let x=await w.getData(new BlobWriter);if(!x)throw new c.ExtractionFailedError({filepath:n,stderr:"Failed to extract rg.exe from zip archive"});let C=await x.arrayBuffer();await PKG.write(l,new Uint8Array(C)),await d.close();}await j.unlink(n),i.endsWith("-win32")||await j.chmod(l,493);}return {filepath:l}});async function N(){let{filepath:e}=await T();return e}c.filepath=N;async function*Z(e){e.signal?.throwIfAborted();let l=await N(),s=["--files","--glob=!.git/*"];if(e.follow&&s.push("--follow"),e.hidden!==false&&s.push("--hidden"),e.maxDepth!==void 0&&s.push(`--max-depth=${e.maxDepth}`),e.glob)for(let r of e.glob)s.push(`--glob=${r}`);if(!(await j.stat(e.cwd).catch(()=>{}))?.isDirectory())throw Object.assign(new Error(`No such file or directory: '${e.cwd}'`),{code:"ENOENT",errno:-2,path:e.cwd});let f=(await PKG.run([l,...s],{cwd:e.cwd})).stdout.trim().split(/\r?\n/).filter(Boolean);for(let r of f)e.signal?.throwIfAborted(),r&&(yield r);}c.files=Z;async function H(e){$.info("tree",e);let l=await Array.fromAsync(c.files({cwd:e.cwd,signal:e.signal}));function s(n,o){let a=n.children.get(o);if(a)return a;let d={name:o,children:new Map};return n.children.set(o,d),d}let i={children:new Map};for(let n of l){if(n.includes(".easbot"))continue;let o=n.split(E.sep);if(o.length<2)continue;let a=i;for(let d of o.slice(0,-1))a=s(a,d);}function f(n){let o=0;for(let a of n.children.values())o+=1+f(a);return o}let r=f(i),b=e.limit??r,u=[],m=[];for(let n of Array.from(i.children.values()).sort((o,a)=>o.name.localeCompare(a.name)))m.push({node:n,path:n.name});let p=0;for(let n=0;n<m.length&&p<b;n++){let o=m[n];if(!o)continue;let{node:a,path:d}=o;u.push(d),p++;for(let g of Array.from(a.children.values()).sort((w,x)=>w.name.localeCompare(x.name)))m.push({node:g,path:`${d}/${g.name}`});}return r>p&&u.push(`[${r-p} truncated]`),u.join(`
2
+ `)}c.tree=H;async function Q(e){let l=await N(),s=["--json","--hidden","--glob=!.git/*"];if(e.follow&&s.push("--follow"),e.glob)for(let r of e.glob)s.push(`--glob=${r}`);e.limit&&s.push(`--max-count=${e.limit}`),s.push("--"),s.push(e.pattern);let i=await PKG.run([l,...s],{cwd:e.cwd});return i.code!==0?[]:i.stdout.trim().split(/\r?\n/).filter(Boolean).map(r=>JSON.parse(r)).map(r=>O.parse(r)).filter(r=>r.type==="match").map(r=>r.data)}c.search=Q;})(F||(F={}));export{F as a};