@easbot/agent 0.2.23 → 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.
- package/dist/assets/txt/tool/gateway-channel.txt +51 -12
- package/dist/chunks/acp-D5I5IUMI.mjs +16 -0
- package/dist/chunks/adapter-loader-OQIF5F24.mjs +1 -0
- package/dist/chunks/agent-R3VIV25Y.mjs +1 -0
- package/dist/chunks/agent-TM2AYB67.mjs +1 -0
- package/dist/chunks/app-BQOCNLYW.mjs +1 -0
- package/dist/chunks/auth-2I7U24YF.mjs +1 -0
- package/dist/chunks/bootstrap-FETK53UT.mjs +1 -0
- package/dist/chunks/build-program-KUCF2N7D.mjs +11 -0
- package/dist/chunks/bus-CWP3DYEO.mjs +1 -0
- package/dist/chunks/chunk-2RSIOAZV.mjs +1 -0
- package/dist/chunks/chunk-3AJJMHKA.mjs +1 -0
- package/dist/chunks/chunk-5QKMSVQL.mjs +1 -0
- package/dist/chunks/chunk-AAJAKVQY.mjs +3 -0
- package/dist/chunks/chunk-AD7K5VE2.mjs +2 -0
- package/dist/chunks/chunk-CJTCCLW4.mjs +1 -0
- package/dist/chunks/chunk-CQVEAYYW.mjs +1 -0
- package/dist/chunks/chunk-DEZT7DOH.mjs +1 -0
- package/dist/chunks/chunk-E6P3STWN.mjs +2 -0
- package/dist/chunks/chunk-EEWP2VV6.mjs +27 -0
- package/dist/chunks/chunk-FXOUIXIL.mjs +1 -0
- package/dist/chunks/chunk-LAHYVX5K.mjs +1 -0
- package/dist/chunks/chunk-LFYBZHOI.mjs +2 -0
- package/dist/chunks/chunk-LGMOIUYA.mjs +2 -0
- package/dist/chunks/chunk-M3K32WJV.mjs +1 -0
- package/dist/chunks/chunk-MHY26EXB.mjs +59 -0
- package/dist/chunks/chunk-MMU3Z6V2.mjs +1 -0
- package/dist/chunks/chunk-NCHKGEE3.mjs +2 -0
- package/dist/chunks/chunk-PKBPWDSV.mjs +1038 -0
- package/dist/chunks/chunk-SLZ3HAH6.mjs +2 -0
- package/dist/chunks/chunk-TSX5PZSW.mjs +1 -0
- package/dist/chunks/chunk-TYD2M4SP.mjs +7 -0
- package/dist/chunks/chunk-VII7JKGB.mjs +1 -0
- package/dist/chunks/chunk-X6ISXWBN.mjs +1 -0
- package/dist/chunks/chunk-XPF2LJT2.mjs +1 -0
- package/dist/chunks/chunk-ZBRXNYEM.mjs +1 -0
- package/dist/chunks/command-5JVJ7SVL.mjs +1 -0
- package/dist/chunks/compaction-BD7Q4GQO.mjs +1 -0
- package/dist/chunks/config-OZOLTE2Y.mjs +1 -0
- package/dist/chunks/confirm-dialog-AGHMTHWU.mjs +1 -0
- package/dist/chunks/copilot-I52DJYYX.mjs +2 -0
- package/dist/chunks/debug-MW53KD7T.mjs +3 -0
- package/dist/chunks/event-A4SSIBOT.mjs +1 -0
- package/dist/chunks/export-BGH24SO2.mjs +1 -0
- package/dist/chunks/file-N5R4HKSU.mjs +1 -0
- package/dist/chunks/gateway-3QKRAMO2.mjs +16 -0
- package/dist/chunks/gateway-loader-6P6BTWQP.mjs +1 -0
- package/dist/chunks/generate-NXGIMILE.mjs +2 -0
- package/dist/chunks/github-L3XIDEEQ.mjs +33 -0
- package/dist/chunks/global-QYCQXNCR.mjs +1 -0
- package/dist/chunks/import-JYLIHQCA.mjs +2 -0
- package/dist/chunks/input-validation-FWKKVCYC.mjs +1 -0
- package/dist/chunks/installation-HRFNXAKB.mjs +1 -0
- package/dist/chunks/instance-6RDAH4IX.mjs +1 -0
- package/dist/chunks/is-tui-mode-TFK352KK.mjs +1 -0
- package/dist/chunks/loader-7UB7WQFK.mjs +1 -0
- package/dist/chunks/loader-DRTQXYLN.mjs +1 -0
- package/dist/chunks/lsp-U7VGUPLT.mjs +1 -0
- package/dist/chunks/markdown-Z6UXVBNP.mjs +1 -0
- package/dist/chunks/mcp-AHMVQDPC.mjs +1 -0
- package/dist/chunks/models-G2QBJX43.mjs +1 -0
- package/dist/chunks/models-snapshot-XTWYGG3T.mjs +2 -0
- package/dist/chunks/pr-4WGOFODT.mjs +3 -0
- package/dist/chunks/preferences-354RYR2J.mjs +1 -0
- package/dist/chunks/project-NIXIQTRB.mjs +1 -0
- package/dist/chunks/prompt-F3Z2QBDR.mjs +1 -0
- package/dist/chunks/provider-LO2XXG33.mjs +1 -0
- package/dist/chunks/registry-MDPD3RHV.mjs +1 -0
- package/dist/chunks/revert-GE5BMDGN.mjs +1 -0
- package/dist/chunks/ripgrep-G73RIQ5F.mjs +1 -0
- package/dist/chunks/run-HRRJXIVI.mjs +22 -0
- package/dist/chunks/scheduler-2CD7LGEJ.mjs +1 -0
- package/dist/chunks/server-CHTYZF5W.mjs +1 -0
- package/dist/chunks/session-2W7DKSRJ.mjs +1 -0
- package/dist/chunks/session-HO5727MY.mjs +1 -0
- package/dist/chunks/session-V4RGFQKO.mjs +1 -0
- package/dist/chunks/settings-panel-BWCVKC4G.mjs +1 -0
- package/dist/chunks/share-OCIAAEUC.mjs +1 -0
- package/dist/chunks/snapshot-V556Q4I5.mjs +1 -0
- package/dist/chunks/stats-MILDLIZD.mjs +1 -0
- package/dist/chunks/storage-P6DUW44Y.mjs +1 -0
- package/dist/chunks/tui-2FSZJGP2.mjs +1 -0
- package/dist/chunks/tui-UTCI4ERG.mjs +1 -0
- package/dist/chunks/types-GCXI5X7B.mjs +1 -0
- package/dist/chunks/types-KIFC2C2M.mjs +1 -0
- package/dist/chunks/update-IEZVD4U7.mjs +2 -0
- package/dist/cli.mjs +9 -1235
- package/package.json +14 -24
- package/dist/cli.cjs +0 -1236
- package/dist/cli.d.cts +0 -1
- package/dist/index.cjs +0 -1345
- package/dist/index.d.cts +0 -34569
- package/dist/index.d.ts +0 -34569
- 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
|
-
|
|
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
|
|
11
|
-
-
|
|
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
|
-
#
|
|
21
|
-
gateway_channel(operation="
|
|
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
|
|
24
|
-
gateway_channel(operation="send"
|
|
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
|
|
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};
|