@easbot/agent 0.2.26 → 0.2.27

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 (93) hide show
  1. package/dist/assets/txt/tool/gateway-channel.txt +77 -41
  2. package/dist/chunks/{acp-MXBWTEWQ.mjs → acp-7YXFQ45K.mjs} +1 -1
  3. package/dist/chunks/adapter-loader-3676SVTM.mjs +1 -0
  4. package/dist/chunks/{agent-OTRULLOV.mjs → agent-52URJRBC.mjs} +1 -1
  5. package/dist/chunks/{agent-OH7OBL37.mjs → agent-DIUQQQYM.mjs} +1 -1
  6. package/dist/chunks/app-TR66U2CP.mjs +1 -0
  7. package/dist/chunks/bootstrap-AD7IUF7M.mjs +1 -0
  8. package/dist/chunks/{build-program-6IX5ZB7E.mjs → build-program-WP5P33JQ.mjs} +1 -1
  9. package/dist/chunks/bus-CBFYNJXU.mjs +1 -0
  10. package/dist/chunks/{chunk-KFKXAXPS.mjs → chunk-3P7JMESZ.mjs} +1 -1
  11. package/dist/chunks/{chunk-5Z4ZZTNB.mjs → chunk-47PBZEYM.mjs} +1 -1
  12. package/dist/chunks/{chunk-OWD2RLZG.mjs → chunk-6JRVLYTU.mjs} +1 -1
  13. package/dist/chunks/{chunk-77AU67VS.mjs → chunk-6M4SMEZK.mjs} +1 -1
  14. package/dist/chunks/{chunk-KCJQKAMU.mjs → chunk-JCC3ZOI6.mjs} +1 -1
  15. package/dist/chunks/{chunk-RWJKYXLR.mjs → chunk-MMN3J3YS.mjs} +251 -247
  16. package/dist/chunks/{chunk-UHGU3KUN.mjs → chunk-ROHSYOEJ.mjs} +1 -1
  17. package/dist/chunks/{chunk-3SWLJTIF.mjs → chunk-RRQRZ6MW.mjs} +1 -1
  18. package/dist/chunks/{chunk-PPTUNIYA.mjs → chunk-TMAVGPNZ.mjs} +1 -1
  19. package/dist/chunks/{chunk-JL7MUUWI.mjs → chunk-VCVFFLHV.mjs} +4 -4
  20. package/dist/chunks/{chunk-Y63CDMY3.mjs → chunk-YCYECTVW.mjs} +1 -1
  21. package/dist/chunks/{command-SJGOCWCR.mjs → command-5C6WIRH5.mjs} +1 -1
  22. package/dist/chunks/compaction-LD7EJA6I.mjs +1 -0
  23. package/dist/chunks/config-JVIING4F.mjs +1 -0
  24. package/dist/chunks/{debug-KPPALGWN.mjs → debug-UKX4WQ3F.mjs} +3 -3
  25. package/dist/chunks/file-X44TUOLQ.mjs +1 -0
  26. package/dist/chunks/gateway-WMMPUO46.mjs +16 -0
  27. package/dist/chunks/{generate-SXE5ACCV.mjs → generate-ATBLMTBG.mjs} +1 -1
  28. package/dist/chunks/{github-6I6QNGSD.mjs → github-VDDFKDCK.mjs} +2 -2
  29. package/dist/chunks/global-EVUKT3AP.mjs +1 -0
  30. package/dist/chunks/{import-V5U5WAWX.mjs → import-JXNBDWIF.mjs} +1 -1
  31. package/dist/chunks/installation-PL26SKTI.mjs +1 -0
  32. package/dist/chunks/instance-6NPZLEWW.mjs +1 -0
  33. package/dist/chunks/loader-E7GJBAIA.mjs +1 -0
  34. package/dist/chunks/loader-PDYDFUCE.mjs +1 -0
  35. package/dist/chunks/lsp-TAHMSZIF.mjs +1 -0
  36. package/dist/chunks/mcp-JBQOYJSH.mjs +1 -0
  37. package/dist/chunks/{mcp-6G3LUTNY.mjs → mcp-WVQBQVTR.mjs} +1 -1
  38. package/dist/chunks/models-AHPQPXDG.mjs +1 -0
  39. package/dist/chunks/{pr-6A5VSN2G.mjs → pr-NLGAGRR2.mjs} +1 -1
  40. package/dist/chunks/preferences-H2TY25O6.mjs +1 -0
  41. package/dist/chunks/project-RYTIRGTX.mjs +1 -0
  42. package/dist/chunks/prompt-5QAKRVXS.mjs +1 -0
  43. package/dist/chunks/provider-VPOZDMMP.mjs +1 -0
  44. package/dist/chunks/registry-SYGK57RE.mjs +1 -0
  45. package/dist/chunks/revert-QWJ7WVG5.mjs +1 -0
  46. package/dist/chunks/ripgrep-OHTQKKDR.mjs +1 -0
  47. package/dist/chunks/{run-HRFFN5E7.mjs → run-3YPI6XKG.mjs} +1 -1
  48. package/dist/chunks/scheduler-ZEHS5N2M.mjs +1 -0
  49. package/dist/chunks/server-LZVS7PBL.mjs +1 -0
  50. package/dist/chunks/{session-2I5LMK3F.mjs → session-4MTNN2T4.mjs} +1 -1
  51. package/dist/chunks/session-DVMBXQNW.mjs +1 -0
  52. package/dist/chunks/session-SD2Y7TSF.mjs +1 -0
  53. package/dist/chunks/share-NAAYDAC3.mjs +1 -0
  54. package/dist/chunks/snapshot-QYVGLPZG.mjs +1 -0
  55. package/dist/chunks/storage-R2S2HFGM.mjs +1 -0
  56. package/dist/chunks/tui-MDEMUHXR.mjs +1 -0
  57. package/dist/chunks/{tui-2YD6S76J.mjs → tui-YDIPDB2Q.mjs} +1 -1
  58. package/dist/chunks/types-TQH77CIP.mjs +1 -0
  59. package/dist/chunks/{update-KPY5MGY5.mjs → update-K6SAKANZ.mjs} +1 -1
  60. package/dist/cli.mjs +2 -2
  61. package/package.json +13 -13
  62. package/dist/chunks/adapter-loader-3EN56P7R.mjs +0 -1
  63. package/dist/chunks/app-4O5CFCEA.mjs +0 -1
  64. package/dist/chunks/bootstrap-2VLPO562.mjs +0 -1
  65. package/dist/chunks/bus-4LDPSAHL.mjs +0 -1
  66. package/dist/chunks/compaction-XRW2CSDJ.mjs +0 -1
  67. package/dist/chunks/config-UX7KSX2Y.mjs +0 -1
  68. package/dist/chunks/file-QLEZZKRK.mjs +0 -1
  69. package/dist/chunks/gateway-XPOSOE2L.mjs +0 -16
  70. package/dist/chunks/global-E7NJBJBC.mjs +0 -1
  71. package/dist/chunks/installation-HXWUC3GX.mjs +0 -1
  72. package/dist/chunks/instance-SYMW2VFW.mjs +0 -1
  73. package/dist/chunks/loader-OIXMXUWE.mjs +0 -1
  74. package/dist/chunks/loader-ULZVW25Y.mjs +0 -1
  75. package/dist/chunks/lsp-TF3HQGNE.mjs +0 -1
  76. package/dist/chunks/mcp-7RT2JOII.mjs +0 -1
  77. package/dist/chunks/models-OCEOQAFH.mjs +0 -1
  78. package/dist/chunks/preferences-F7U2O3MO.mjs +0 -1
  79. package/dist/chunks/project-45YWGAQQ.mjs +0 -1
  80. package/dist/chunks/prompt-4DIHVG7F.mjs +0 -1
  81. package/dist/chunks/provider-ZPPQNKD4.mjs +0 -1
  82. package/dist/chunks/registry-RFQPWEYD.mjs +0 -1
  83. package/dist/chunks/revert-OM7I67AX.mjs +0 -1
  84. package/dist/chunks/ripgrep-IAHE6PUP.mjs +0 -1
  85. package/dist/chunks/scheduler-44WS6TIN.mjs +0 -1
  86. package/dist/chunks/server-W2DYO5CI.mjs +0 -1
  87. package/dist/chunks/session-BVNXNVIE.mjs +0 -1
  88. package/dist/chunks/session-XS2QUVSO.mjs +0 -1
  89. package/dist/chunks/share-WRGG4KM3.mjs +0 -1
  90. package/dist/chunks/snapshot-WLCB7V7M.mjs +0 -1
  91. package/dist/chunks/storage-DLKF23OL.mjs +0 -1
  92. package/dist/chunks/tui-XJTR3NKP.mjs +0 -1
  93. package/dist/chunks/types-6TN4BPE3.mjs +0 -1
@@ -1,70 +1,106 @@
1
- Send messages to external channels through the Gateway system.
1
+ Send messages (text, image, file) to external channels (Telegram, Discord, etc.) through the Gateway system.
2
2
 
3
- **list** — List available channels:
4
- - operation="list"
3
+ ## Operations
5
4
 
6
- **sessions**List active sessions:
5
+ ### status Gateway status
6
+ Returns system status, connections, sessions, subscriptions, and uptime.
7
+
8
+ ### sessions — List active sessions
7
9
  - operation="sessions"
8
10
  - limit: Max sessions to return (default: 50)
9
11
  - offset: Pagination offset (default: 0)
12
+ - type: Filter by "private", "group", or "all" (default: "all")
10
13
 
11
- **contacts** — List contacts (users) for a platform:
14
+ ### contacts — List contacts for a platform
12
15
  - operation="contacts"
13
16
  - platform: Platform name (e.g., "telegram", "discord")
14
- - limit: Max contacts to return (default: 50)
15
- - offset: Pagination offset (default: 0)
16
17
 
17
- **send** — Send message to channel:
18
+ ### send — Send message
18
19
  - operation="send"
19
20
  - content: Message content (required)
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)
21
+ - contactUid: Contact UID "telegram:123456789" (private chat only!)
22
+ - sessionId: Session ID (for private and group chats)
24
23
  - messageType: "text", "image", or "file" (default: "text")
25
24
 
26
- ## Usage Examples
25
+ ## Sending Messages
27
26
 
27
+ ### Private Chat
28
+ Use contactUid to send direct messages:
29
+ ```
30
+ gateway_channel(operation="send" contactUid="telegram:123456789" content="Hello!")
28
31
  ```
29
- # List available channels
30
- gateway_channel(operation="list")
31
32
 
32
- # List active sessions
33
- gateway_channel(operation="sessions")
33
+ ### Group Chat
34
+ Use sessionId to send to groups:
35
+ ```
36
+ gateway_channel(operation="send" sessionId="telegram_telegram-main_-100123456_123456" content="Hello group!")
37
+ ```
34
38
 
35
- # List Telegram users who have messaged the bot
36
- gateway_channel(operation="contacts" platform="telegram")
39
+ ## Session Filtering
37
40
 
38
- # Send message to specific user (using contact UID)
39
- gateway_channel(operation="send" contactUid="telegram:123456789" content="Hello!")
41
+ Sessions include chat type (private/group) and title:
42
+ ```
43
+ # List private chats only
44
+ gateway_channel(operation="sessions" type="private")
40
45
 
41
- # Send message to session (reply to user in session)
42
- gateway_channel(operation="send" sessionId="session_xxx" content="Hello!")
46
+ # List groups only
47
+ gateway_channel(operation="sessions" type="group")
43
48
 
44
- # Send message using channel + userId
45
- gateway_channel(operation="send" channelId="telegram-main" userId="123456789" content="Hello!")
49
+ # List all
50
+ gateway_channel(operation="sessions" type="all")
46
51
  ```
47
52
 
48
- ## Channel Selection Priority
53
+ ## Quick Reference
54
+
55
+ | Parameter | Target | Description |
56
+ |-----------|--------|-------------|
57
+ | contactUid | Private Chat | Direct message to user |
58
+ | sessionId | Private/Group | Message via session |
59
+
60
+ ## Message Types
49
61
 
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
62
+ | Type | Description | Status |
63
+ |------|-------------|--------|
64
+ | text | Plain text | Supported |
65
+ | image | Image URL or file path | ✅ Supported |
66
+ | file | File URL or path | ✅ Supported |
55
67
 
56
- ## Contact UID Format
68
+ ## Examples
57
69
 
58
- Contacts are stored with unique identifiers:
59
- - Format: "{platform}:{stableId}"
60
- - Examples:
61
- - Telegram: "telegram:123456789"
62
- - Discord: "discord:987654321"
70
+ ```
71
+ # Status
72
+ gateway_channel(operation="status")
73
+
74
+ # Channels
75
+ gateway_channel(operation="channels")
76
+
77
+ # Sessions (all)
78
+ gateway_channel(operation="sessions")
79
+
80
+ # Sessions - filter by type
81
+ gateway_channel(operation="sessions" type="private")
82
+ gateway_channel(operation="sessions" type="group")
83
+
84
+ # Contacts
85
+ gateway_channel(operation="contacts" platform="telegram")
86
+
87
+ # Send - contactUid (private chat)
88
+ gateway_channel(operation="send" contactUid="telegram:123456789" content="Hello!")
89
+ gateway_channel(operation="send" contactUid="telegram:123456789" content="https://example.com/photo.jpg" messageType="image")
90
+ gateway_channel(operation="send" contactUid="telegram:123456789" content="file:///path/to/document.pdf" messageType="file")
91
+
92
+ # Send - sessionId (group chat)
93
+ gateway_channel(operation="send" sessionId="telegram_telegram-main_-100123456_123456" content="Hello group!")
94
+ gateway_channel(operation="send" sessionId="telegram_telegram-main_-100123456_123456" content="https://example.com/file.pdf" messageType="file")
95
+ gateway_channel(operation="send" sessionId="telegram_telegram-main_-100123456_123456" content="file:///path/to/photo.jpg" messageType="image")
96
+ ```
63
97
 
64
- ## Platform Names
98
+ ## Error Handling
65
99
 
66
- Supported platforms: telegram, discord, slack, feishu, wechat, webchat, signal, nostr
100
+ - Missing content: "content is required"
101
+ - No contactUid/sessionId: Helpful error message
102
+ - Gateway unavailable: "Cannot connect to Gateway server"
67
103
 
68
- ## Result Limits
104
+ ## Platform Support
69
105
 
70
- Sessions and contacts support pagination with limit/offset. If results are truncated, use higher limit values or paginate with offset.
106
+ telegram, discord, slack, feishu, wechat, signal, nostr, webchat
@@ -1,4 +1,4 @@
1
- import {a as a$3}from'./chunk-LAHYVX5K.mjs';import {a as a$4}from'./chunk-Y63CDMY3.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 {nb,Q,xa,Ma}from'./chunk-RWJKYXLR.mjs';import'./chunk-UHGU3KUN.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-PPTUNIYA.mjs';import'./chunk-KCJQKAMU.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import {a as a$2}from'./chunk-NQDXG75V.mjs';import'./chunk-5Z4ZZTNB.mjs';import'./chunk-KFKXAXPS.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-3SWLJTIF.mjs';import {a as a$1}from'./chunk-LFYBZHOI.mjs';import'./chunk-77AU67VS.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 nb.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(Q).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 xa.init({directory:i$1,printLogs:t.config.print_logs,logLevel:t.config.log_level,channel:e.channel});await xa.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"),Ma.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...`),i||console.log(`
1
+ import {a as a$3}from'./chunk-LAHYVX5K.mjs';import {a as a$4}from'./chunk-YCYECTVW.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 {ob,Q,xa,Na}from'./chunk-MMN3J3YS.mjs';import'./chunk-ROHSYOEJ.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-TMAVGPNZ.mjs';import'./chunk-JCC3ZOI6.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import {a as a$2}from'./chunk-NQDXG75V.mjs';import'./chunk-47PBZEYM.mjs';import'./chunk-3P7JMESZ.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-RRQRZ6MW.mjs';import {a as a$1}from'./chunk-LFYBZHOI.mjs';import'./chunk-6M4SMEZK.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 ob.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(Q).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 xa.init({directory:i$1,printLogs:t.config.print_logs,logLevel:t.config.log_level,channel:e.channel});await xa.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"),Na.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...`),i||console.log(`
2
2
  ${a$2("acp.shutdown.received",{vars:{signal:t}})}`);try{await xa.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
3
 
4
4
  ${a$2("acp.help.examples")}
@@ -0,0 +1 @@
1
+ export{U as getACPClientsConfig,T as getACPServerConfig,X as getAcpAgentName,V as getAcpAgentRuntimeConfig,W as getAcpModelConfig,S as loadACPConfig}from'./chunk-MMN3J3YS.mjs';import'./chunk-ROHSYOEJ.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-TMAVGPNZ.mjs';import'./chunk-JCC3ZOI6.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-NQDXG75V.mjs';import'./chunk-47PBZEYM.mjs';import'./chunk-3P7JMESZ.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-RRQRZ6MW.mjs';import'./chunk-LFYBZHOI.mjs';import'./chunk-6M4SMEZK.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-X6ISXWBN.mjs';
@@ -1 +1 @@
1
- import {a as a$4}from'./chunk-TYD2M4SP.mjs';import'./chunk-FXOUIXIL.mjs';import {a as a$3}from'./chunk-Y63CDMY3.mjs';import'./chunk-CQVEAYYW.mjs';import {l,d,e,h,i,b,c,a as a$5}from'./chunk-M3K32WJV.mjs';import'./chunk-RWJKYXLR.mjs';import'./chunk-UHGU3KUN.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-PPTUNIYA.mjs';import'./chunk-KCJQKAMU.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import {a as a$2}from'./chunk-NQDXG75V.mjs';import'./chunk-5Z4ZZTNB.mjs';import'./chunk-KFKXAXPS.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-3SWLJTIF.mjs';import {a as a$1}from'./chunk-LFYBZHOI.mjs';import'./chunk-77AU67VS.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};
1
+ import {a as a$4}from'./chunk-TYD2M4SP.mjs';import'./chunk-FXOUIXIL.mjs';import {a as a$3}from'./chunk-YCYECTVW.mjs';import'./chunk-CQVEAYYW.mjs';import {l,d,e,h,i,b,c,a as a$5}from'./chunk-M3K32WJV.mjs';import'./chunk-MMN3J3YS.mjs';import'./chunk-ROHSYOEJ.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-TMAVGPNZ.mjs';import'./chunk-JCC3ZOI6.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import {a as a$2}from'./chunk-NQDXG75V.mjs';import'./chunk-47PBZEYM.mjs';import'./chunk-3P7JMESZ.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-RRQRZ6MW.mjs';import {a as a$1}from'./chunk-LFYBZHOI.mjs';import'./chunk-6M4SMEZK.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};
@@ -1 +1 @@
1
- import {e}from'./chunk-M3K32WJV.mjs';import {j,fa,k,Ka}from'./chunk-RWJKYXLR.mjs';import'./chunk-UHGU3KUN.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-PPTUNIYA.mjs';import'./chunk-KCJQKAMU.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import {a as a$1}from'./chunk-NQDXG75V.mjs';import'./chunk-5Z4ZZTNB.mjs';import'./chunk-KFKXAXPS.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-3SWLJTIF.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import'./chunk-77AU67VS.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"}),fa.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 Ka.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 Ka.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};
1
+ import {e}from'./chunk-M3K32WJV.mjs';import {j,fa,k,La}from'./chunk-MMN3J3YS.mjs';import'./chunk-ROHSYOEJ.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-TMAVGPNZ.mjs';import'./chunk-JCC3ZOI6.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import {a as a$1}from'./chunk-NQDXG75V.mjs';import'./chunk-47PBZEYM.mjs';import'./chunk-3P7JMESZ.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-RRQRZ6MW.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import'./chunk-6M4SMEZK.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"}),fa.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 La.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 La.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-VCVFFLHV.mjs';import'./chunk-CQVEAYYW.mjs';import'./chunk-MMN3J3YS.mjs';import'./chunk-ROHSYOEJ.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-TMAVGPNZ.mjs';import'./chunk-JCC3ZOI6.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-NQDXG75V.mjs';import'./chunk-47PBZEYM.mjs';import'./chunk-3P7JMESZ.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-RRQRZ6MW.mjs';import'./chunk-LFYBZHOI.mjs';import'./chunk-6M4SMEZK.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-X6ISXWBN.mjs';
@@ -0,0 +1 @@
1
+ export{a as bootstrap,b as bootstrapProgram}from'./chunk-YCYECTVW.mjs';import'./chunk-MMN3J3YS.mjs';import'./chunk-ROHSYOEJ.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-TMAVGPNZ.mjs';import'./chunk-JCC3ZOI6.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-NQDXG75V.mjs';import'./chunk-47PBZEYM.mjs';import'./chunk-3P7JMESZ.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-RRQRZ6MW.mjs';import'./chunk-LFYBZHOI.mjs';import'./chunk-6M4SMEZK.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-X6ISXWBN.mjs';
@@ -1,4 +1,4 @@
1
- import {b as b$1}from'./chunk-OWD2RLZG.mjs';import {a as a$1}from'./chunk-XPF2LJT2.mjs';import {Ma,va}from'./chunk-RWJKYXLR.mjs';import'./chunk-UHGU3KUN.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-PPTUNIYA.mjs';import'./chunk-KCJQKAMU.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import {a as a$2}from'./chunk-NQDXG75V.mjs';import'./chunk-5Z4ZZTNB.mjs';import {b as b$2}from'./chunk-KFKXAXPS.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-3SWLJTIF.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import'./chunk-77AU67VS.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||Ma.worktree,e=va({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-2YD6S76J.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-HRFFN5E7.mjs')).registerRunCommand(n,o);}},{commands:[{name:"generate",description:"\u751F\u6210 OpenAPI \u89C4\u8303",hasSubcommands:false}],register:async({program:n,ctx:o})=>{(await import('./generate-SXE5ACCV.mjs')).registerGenerateCommand(n,o);}},{commands:[{name:"agent",description:"Agent \u7BA1\u7406\u547D\u4EE4",hasSubcommands:true}],register:async({program:n,ctx:o})=>{(await import('./agent-OTRULLOV.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-2I5LMK3F.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-6G3LUTNY.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-MXBWTEWQ.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-KPPALGWN.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-XPOSOE2L.mjs')).registerGatewayCommand(n,o);}},{commands:[{name:"auth",description:"Provider \u51ED\u636E\u7BA1\u7406",hasSubcommands:true}],register:async({program:n,ctx:o})=>{(await import('./auth-DHIUZUBT.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-I4GL3OUG.mjs')).registerExportCommand(n,o);}},{commands:[{name:"github",description:"GitHub Agent \u7BA1\u7406",hasSubcommands:true}],register:async({program:n,ctx:o})=>{(await import('./github-6I6QNGSD.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-V5U5WAWX.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-6A5VSN2G.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-KXJDFVQY.mjs')).registerStatsCommand(n,o);}},{commands:[{name:"update",description:"\u66F4\u65B0 Easbot CLI",hasSubcommands:false}],register:async({program:n,ctx:o})=>{(await import('./update-KPY5MGY5.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?"":`
1
+ import {b as b$1}from'./chunk-6JRVLYTU.mjs';import {a as a$1}from'./chunk-XPF2LJT2.mjs';import {Na,va}from'./chunk-MMN3J3YS.mjs';import'./chunk-ROHSYOEJ.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-TMAVGPNZ.mjs';import'./chunk-JCC3ZOI6.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import {a as a$2}from'./chunk-NQDXG75V.mjs';import'./chunk-47PBZEYM.mjs';import {b as b$2}from'./chunk-3P7JMESZ.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-RRQRZ6MW.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import'./chunk-6M4SMEZK.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||Na.worktree,e=va({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-YDIPDB2Q.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-3YPI6XKG.mjs')).registerRunCommand(n,o);}},{commands:[{name:"generate",description:"\u751F\u6210 OpenAPI \u89C4\u8303",hasSubcommands:false}],register:async({program:n,ctx:o})=>{(await import('./generate-ATBLMTBG.mjs')).registerGenerateCommand(n,o);}},{commands:[{name:"agent",description:"Agent \u7BA1\u7406\u547D\u4EE4",hasSubcommands:true}],register:async({program:n,ctx:o})=>{(await import('./agent-52URJRBC.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-4MTNN2T4.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-WVQBQVTR.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-7YXFQ45K.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-UKX4WQ3F.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-WMMPUO46.mjs')).registerGatewayCommand(n,o);}},{commands:[{name:"auth",description:"Provider \u51ED\u636E\u7BA1\u7406",hasSubcommands:true}],register:async({program:n,ctx:o})=>{(await import('./auth-DHIUZUBT.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-I4GL3OUG.mjs')).registerExportCommand(n,o);}},{commands:[{name:"github",description:"GitHub Agent \u7BA1\u7406",hasSubcommands:true}],register:async({program:n,ctx:o})=>{(await import('./github-VDDFKDCK.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-JXNBDWIF.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-NLGAGRR2.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-KXJDFVQY.mjs')).registerStatsCommand(n,o);}},{commands:[{name:"update",description:"\u66F4\u65B0 Easbot CLI",hasSubcommands:false}],register:async({program:n,ctx:o})=>{(await import('./update-K6SAKANZ.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
2
  ${a$2("program.help.examples")}:
3
3
  easbot # ${a$2("help.example.tui")}
4
4
  easbot tui --continue # ${a$2("help.example.tui_continue")}
@@ -0,0 +1 @@
1
+ export{a as Bus}from'./chunk-MMN3J3YS.mjs';import'./chunk-ROHSYOEJ.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-TMAVGPNZ.mjs';import'./chunk-JCC3ZOI6.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-NQDXG75V.mjs';import'./chunk-47PBZEYM.mjs';import'./chunk-3P7JMESZ.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-RRQRZ6MW.mjs';import'./chunk-LFYBZHOI.mjs';import'./chunk-6M4SMEZK.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-X6ISXWBN.mjs';
@@ -1,2 +1,2 @@
1
- import {a as a$1}from'./chunk-CJTCCLW4.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import {a as a$2}from'./chunk-77AU67VS.mjs';import D from'path';import {NamedError,$,Fetch,iife}from'@easbot/utils';import _ from'zod';function o(A){let T=process.env[A]?.toLowerCase();return T==="true"||T==="1"}function w(A,T){let B=process.env[A];if(B===void 0)return T;let m=Number(B);return Number.isNaN(m)?T:m}var i;(e=>{e.EASBOT_CONFIG=process.env.EASBOT_CONFIG,e.EASBOT_CONFIG_CONTENT=process.env.EASBOT_CONFIG_CONTENT,e.EASBOT_AUTO_SHARE=o("EASBOT_AUTO_SHARE"),e.EASBOT_DISABLE_AUTOUPDATE=o("EASBOT_DISABLE_AUTOUPDATE"),e.EASBOT_DISABLE_PRUNE=o("EASBOT_DISABLE_PRUNE"),e.EASBOT_DISABLE_TERMINAL_TITLE=o("EASBOT_DISABLE_TERMINAL_TITLE"),e.EASBOT_DISABLE_DEFAULT_PLUGINS=o("EASBOT_DISABLE_DEFAULT_PLUGINS"),e.EASBOT_DISABLE_LSP_DOWNLOAD=o("EASBOT_DISABLE_LSP_DOWNLOAD"),e.EASBOT_DISABLE_AUTOCOMPACT=o("EASBOT_DISABLE_AUTOCOMPACT"),e.EASBOT_DISABLE_MODELS_FETCH=o("EASBOT_DISABLE_MODELS_FETCH"),e.EASBOT_DISABLE_FILETIME_CHECK=o("EASBOT_DISABLE_FILETIME_CHECK"),e.EASBOT_ENABLE_EXPERIMENTAL_MODELS=o("EASBOT_ENABLE_EXPERIMENTAL_MODELS"),e.EASBOT_ENABLE_QUESTION_TOOL=o("EASBOT_ENABLE_QUESTION_TOOL"),e.EASBOT_DISABLE_EXTERNAL_SKILLS=o("EASBOT_DISABLE_EXTERNAL_SKILLS"),e.EASBOT_GIT_BASH_PATH=process.env.EASBOT_GIT_BASH_PATH,e.EASBOT_MODELS_URL=process.env.EASBOT_MODELS_URL,e.EASBOT_MODELS_PATH=process.env.EASBOT_MODELS_PATH,e.EASBOT_PERMISSION=process.env.EASBOT_PERMISSION,e.EASBOT_SERVER_USERNAME=process.env.EASBOT_SERVER_USERNAME,e.EASBOT_SERVER_PASSWORD=process.env.EASBOT_SERVER_PASSWORD,e.EASBOT_FAKE_VCS=process.env.EASBOT_FAKE_VCS,e.EASBOT_FILEWATCHER=o("EASBOT_FILEWATCHER"),e.EASBOT_ICON_DISCOVERY=o("EASBOT_ICON_DISCOVERY"),e.EASBOT_ENABLE_EXA=o("EASBOT_ENABLE_EXA"),e.EASBOT_BASH_DEFAULT_TIMEOUT_MS=O("EASBOT_BASH_DEFAULT_TIMEOUT_MS"),e.EASBOT_OUTPUT_TOKEN_MAX=O("EASBOT_OUTPUT_TOKEN_MAX"),e.EASBOT_OXFMT=o("EASBOT_OXFMT"),e.EASBOT_LSP_TY=o("EASBOT_LSP_TY"),e.EASBOT_LSP_TOOL=o("EASBOT_LSP_TOOL"),e.EASBOT_LSP_INIT_TIMEOUT=w("EASBOT_LSP_INIT_TIMEOUT",3e5),e.EASBOT_LSP_DIAGNOSTICS_TIMEOUT=w("EASBOT_LSP_DIAGNOSTICS_TIMEOUT",6e4),e.EASBOT_PLAN_MODE=o("EASBOT_PLAN_MODE"),e.EASBOT_MARKDOWN=o("EASBOT_MARKDOWN"),e.EASBOT_DISABLE_COMPACT=o("EASBOT_DISABLE_COMPACT"),e.EASBOT_DISABLE_AUTO_COMPACT=o("EASBOT_DISABLE_AUTO_COMPACT"),e.EASBOT_AUTOCOMPACT_PCT_OVERRIDE=O("EASBOT_AUTOCOMPACT_PCT_OVERRIDE"),e.EASBOT_AUTO_COMPACT_WINDOW=O("EASBOT_AUTO_COMPACT_WINDOW"),e.EASBOT_BLOCKING_LIMIT_OVERRIDE=O("EASBOT_BLOCKING_LIMIT_OVERRIDE"),e.EASBOT_MAX_CONTEXT_TOKENS=O("EASBOT_MAX_CONTEXT_TOKENS"),e.EASBOT_MAX_TOOL_USE_CONCURRENCY=O("EASBOT_MAX_TOOL_USE_CONCURRENCY");function O(y){let C=process.env[y];if(!C)return;let d=Number(C);return Number.isInteger(d)&&d>0?d:void 0}})(i||(i={}));Object.defineProperty(i,"EASBOT_DISABLE_PROJECT_CONFIG",{get(){return o("EASBOT_DISABLE_PROJECT_CONFIG")},enumerable:true,configurable:false});Object.defineProperty(i,"EASBOT_CONFIG_DIR",{get(){return process.env.EASBOT_CONFIG_DIR},enumerable:true,configurable:false});Object.defineProperty(i,"EASBOT_CLIENT",{get(){return process.env.EASBOT_CLIENT??"cli"},enumerable:true,configurable:false});var M;(S=>{let A=a.create({service:"installation"});S.Event={Updated:a$1.define("installation.updated",_.object({version:_.string()})),UpdateAvailable:a$1.define("installation.update-available",_.object({version:_.string()}))},S.Info=_.object({version:_.string(),latest:_.string()}).meta({ref:"InstallationInfo"});async function m(){return {version:I(),latest:await N()}}S.info=m;function P(){return a$2.isPreview()}S.isPreview=P;function R(){return a$2.isLocal()}S.isLocal=R;async function l(){if(process.execPath.includes(D.join(".easbot","bin"))||process.execPath.includes(D.join(".local","bin")))return "curl";let a=process.execPath.toLowerCase(),r=[{name:"npm",command:()=>$`npm list -g --depth=0`.throws(false).quiet().text()},{name:"yarn",command:()=>$`yarn global list`.throws(false).quiet().text()},{name:"pnpm",command:()=>$`pnpm list -g --depth=0`.throws(false).quiet().text()},{name:"bun",command:()=>$`bun pm ls -g`.throws(false).quiet().text()},{name:"brew",command:()=>$`brew list --formula easbot`.throws(false).quiet().text()},{name:"scoop",command:()=>$`scoop list easbot`.throws(false).quiet().text()},{name:"choco",command:()=>$`choco list --limit-output easbot`.throws(false).quiet().text()}];r.sort((t,s)=>{let E=a.includes(t.name),c=a.includes(s.name);return E&&!c?-1:!E&&c?1:0});for(let t of r){let s=await t.command(),E=(t.name==="brew"||t.name==="choco"||t.name==="scoop","easbot");if(s.includes(E))return t.name}return "unknown"}S.method=l,S.UpgradeFailedError=NamedError.create("UpgradeFailedError",_.object({stderr:_.string()}));async function f(){return (await $`brew list --formula anomalyco/tap/easbot`.throws(false).quiet().text()).includes("easbot")?"anomalyco/tap/easbot":((await $`brew list --formula easbot`.throws(false).quiet().text()).includes("easbot"),"easbot")}async function U(a,r){let t;switch(a){case "curl":t=$`curl -fsSL https://easbot.cn/install | bash`.env({...process.env,VERSION:r});break;case "npm":t=$`npm install -g easbot@${r}`;break;case "pnpm":t=$`pnpm install -g easbot@${r}`;break;case "bun":t=$`bun install -g easbot@${r}`;break;case "brew":{let E=await f();if(E.includes("/")){t=$`brew tap anomalyco/tap && cd "$(brew --repo anomalyco/tap)" && git pull --ff-only && brew upgrade ${E}`.env({HOMEBREW_NO_AUTO_UPDATE:"1",...process.env});break}t=$`brew upgrade ${E}`.env({HOMEBREW_NO_AUTO_UPDATE:"1",...process.env});break}case "choco":t=$`echo Y | choco upgrade easbot --version=${r}`;break;case "scoop":t=$`scoop install easbot@${r}`;break;default:throw new Error(`Unknown method: ${a}`)}let s=await t.quiet().throws(false);if(s.exitCode!==0){let E=a==="choco"?"not running from an elevated command shell":s.stderr.toString("utf8");throw new S.UpgradeFailedError({stderr:E})}A.info("upgraded",{method:a,target:r,stdout:s.stdout.toString(),stderr:s.stderr.toString()}),await $`${process.execPath} --version`.nothrow().quiet().text();}S.upgrade=U;function I(){return a$2.getVersion()}S.getVersion=I;function L(){return a$2.getChannel()}S.getChannel=L;function v(){return `easbot/${L()}/${I()}/${i.EASBOT_CLIENT}`}S.getUserAgent=v;async function N(a){let r=a||await l();if(r==="brew"){let t=await f();if(t.includes("/")){let s=await $`brew info --json=v2 ${t}`.quiet().text(),c=JSON.parse(s).formulae?.[0]?.versions?.stable;if(!c)throw new Error(`Could not detect version for tap formula: ${t}`);return c}return Fetch.get("https://formulae.brew.sh/api/formula/easbot.json").then(s=>{if(!s.ok)throw new Error(s.statusText);return s.data?.versions?.stable??"unknown"})}if(r==="npm"||r==="bun"||r==="pnpm"){let t=await iife(async()=>{let c=(await $`npm config get registry`.quiet().nothrow().text()).trim()||"https://registry.npmjs.org";return c.endsWith("/")?c.slice(0,-1):c}),s=L();return Fetch.get(`${t}/easbot/${s}`).then(E=>{if(!E.ok)throw new Error(E.statusText);return E.data?.version??"unknown"})}return r==="choco"?Fetch.get("https://community.chocolatey.org/api/v2/Packages?$filter=Id%20eq%20%27easbot%27%20and%20IsLatestVersion&$select=Version",{headers:{Accept:"application/json;odata=verbose"}}).then(t=>{if(!t.ok)throw new Error(t.statusText);return t.data?.d?.results?.[0]?.Version??"unknown"}):r==="scoop"?Fetch.get("https://raw.githubusercontent.com/ScoopInstaller/Main/master/bucket/easbot.json",{headers:{Accept:"application/json"}}).then(t=>{if(!t.ok)throw new Error(t.statusText);return t.data?.version??"unknown"}):Fetch.get("https://api.github.com/repos/houjallen/easbot/releases/latest").then(t=>{if(!t.ok)throw new Error(t.statusText);return (t.data?.tag_name??"unknown").replace(/^v/,"")})}S.latest=N;})(M||(M={}));
1
+ import {a as a$1}from'./chunk-CJTCCLW4.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import {a as a$2}from'./chunk-6M4SMEZK.mjs';import D from'path';import {NamedError,$,Fetch,iife}from'@easbot/utils';import _ from'zod';function o(A){let T=process.env[A]?.toLowerCase();return T==="true"||T==="1"}function w(A,T){let B=process.env[A];if(B===void 0)return T;let m=Number(B);return Number.isNaN(m)?T:m}var i;(e=>{e.EASBOT_CONFIG=process.env.EASBOT_CONFIG,e.EASBOT_CONFIG_CONTENT=process.env.EASBOT_CONFIG_CONTENT,e.EASBOT_AUTO_SHARE=o("EASBOT_AUTO_SHARE"),e.EASBOT_DISABLE_AUTOUPDATE=o("EASBOT_DISABLE_AUTOUPDATE"),e.EASBOT_DISABLE_PRUNE=o("EASBOT_DISABLE_PRUNE"),e.EASBOT_DISABLE_TERMINAL_TITLE=o("EASBOT_DISABLE_TERMINAL_TITLE"),e.EASBOT_DISABLE_DEFAULT_PLUGINS=o("EASBOT_DISABLE_DEFAULT_PLUGINS"),e.EASBOT_DISABLE_LSP_DOWNLOAD=o("EASBOT_DISABLE_LSP_DOWNLOAD"),e.EASBOT_DISABLE_AUTOCOMPACT=o("EASBOT_DISABLE_AUTOCOMPACT"),e.EASBOT_DISABLE_MODELS_FETCH=o("EASBOT_DISABLE_MODELS_FETCH"),e.EASBOT_DISABLE_FILETIME_CHECK=o("EASBOT_DISABLE_FILETIME_CHECK"),e.EASBOT_ENABLE_EXPERIMENTAL_MODELS=o("EASBOT_ENABLE_EXPERIMENTAL_MODELS"),e.EASBOT_ENABLE_QUESTION_TOOL=o("EASBOT_ENABLE_QUESTION_TOOL"),e.EASBOT_DISABLE_EXTERNAL_SKILLS=o("EASBOT_DISABLE_EXTERNAL_SKILLS"),e.EASBOT_GIT_BASH_PATH=process.env.EASBOT_GIT_BASH_PATH,e.EASBOT_MODELS_URL=process.env.EASBOT_MODELS_URL,e.EASBOT_MODELS_PATH=process.env.EASBOT_MODELS_PATH,e.EASBOT_PERMISSION=process.env.EASBOT_PERMISSION,e.EASBOT_SERVER_USERNAME=process.env.EASBOT_SERVER_USERNAME,e.EASBOT_SERVER_PASSWORD=process.env.EASBOT_SERVER_PASSWORD,e.EASBOT_FAKE_VCS=process.env.EASBOT_FAKE_VCS,e.EASBOT_FILEWATCHER=o("EASBOT_FILEWATCHER"),e.EASBOT_ICON_DISCOVERY=o("EASBOT_ICON_DISCOVERY"),e.EASBOT_ENABLE_EXA=o("EASBOT_ENABLE_EXA"),e.EASBOT_BASH_DEFAULT_TIMEOUT_MS=O("EASBOT_BASH_DEFAULT_TIMEOUT_MS"),e.EASBOT_OUTPUT_TOKEN_MAX=O("EASBOT_OUTPUT_TOKEN_MAX"),e.EASBOT_OXFMT=o("EASBOT_OXFMT"),e.EASBOT_LSP_TY=o("EASBOT_LSP_TY"),e.EASBOT_LSP_TOOL=o("EASBOT_LSP_TOOL"),e.EASBOT_LSP_INIT_TIMEOUT=w("EASBOT_LSP_INIT_TIMEOUT",3e5),e.EASBOT_LSP_DIAGNOSTICS_TIMEOUT=w("EASBOT_LSP_DIAGNOSTICS_TIMEOUT",6e4),e.EASBOT_PLAN_MODE=o("EASBOT_PLAN_MODE"),e.EASBOT_MARKDOWN=o("EASBOT_MARKDOWN"),e.EASBOT_DISABLE_COMPACT=o("EASBOT_DISABLE_COMPACT"),e.EASBOT_DISABLE_AUTO_COMPACT=o("EASBOT_DISABLE_AUTO_COMPACT"),e.EASBOT_AUTOCOMPACT_PCT_OVERRIDE=O("EASBOT_AUTOCOMPACT_PCT_OVERRIDE"),e.EASBOT_AUTO_COMPACT_WINDOW=O("EASBOT_AUTO_COMPACT_WINDOW"),e.EASBOT_BLOCKING_LIMIT_OVERRIDE=O("EASBOT_BLOCKING_LIMIT_OVERRIDE"),e.EASBOT_MAX_CONTEXT_TOKENS=O("EASBOT_MAX_CONTEXT_TOKENS"),e.EASBOT_MAX_TOOL_USE_CONCURRENCY=O("EASBOT_MAX_TOOL_USE_CONCURRENCY");function O(y){let C=process.env[y];if(!C)return;let d=Number(C);return Number.isInteger(d)&&d>0?d:void 0}})(i||(i={}));Object.defineProperty(i,"EASBOT_DISABLE_PROJECT_CONFIG",{get(){return o("EASBOT_DISABLE_PROJECT_CONFIG")},enumerable:true,configurable:false});Object.defineProperty(i,"EASBOT_CONFIG_DIR",{get(){return process.env.EASBOT_CONFIG_DIR},enumerable:true,configurable:false});Object.defineProperty(i,"EASBOT_CLIENT",{get(){return process.env.EASBOT_CLIENT??"cli"},enumerable:true,configurable:false});var M;(S=>{let A=a.create({service:"installation"});S.Event={Updated:a$1.define("installation.updated",_.object({version:_.string()})),UpdateAvailable:a$1.define("installation.update-available",_.object({version:_.string()}))},S.Info=_.object({version:_.string(),latest:_.string()}).meta({ref:"InstallationInfo"});async function m(){return {version:I(),latest:await N()}}S.info=m;function P(){return a$2.isPreview()}S.isPreview=P;function R(){return a$2.isLocal()}S.isLocal=R;async function l(){if(process.execPath.includes(D.join(".easbot","bin"))||process.execPath.includes(D.join(".local","bin")))return "curl";let a=process.execPath.toLowerCase(),r=[{name:"npm",command:()=>$`npm list -g --depth=0`.throws(false).quiet().text()},{name:"yarn",command:()=>$`yarn global list`.throws(false).quiet().text()},{name:"pnpm",command:()=>$`pnpm list -g --depth=0`.throws(false).quiet().text()},{name:"bun",command:()=>$`bun pm ls -g`.throws(false).quiet().text()},{name:"brew",command:()=>$`brew list --formula easbot`.throws(false).quiet().text()},{name:"scoop",command:()=>$`scoop list easbot`.throws(false).quiet().text()},{name:"choco",command:()=>$`choco list --limit-output easbot`.throws(false).quiet().text()}];r.sort((t,s)=>{let E=a.includes(t.name),c=a.includes(s.name);return E&&!c?-1:!E&&c?1:0});for(let t of r){let s=await t.command(),E=(t.name==="brew"||t.name==="choco"||t.name==="scoop","easbot");if(s.includes(E))return t.name}return "unknown"}S.method=l,S.UpgradeFailedError=NamedError.create("UpgradeFailedError",_.object({stderr:_.string()}));async function f(){return (await $`brew list --formula anomalyco/tap/easbot`.throws(false).quiet().text()).includes("easbot")?"anomalyco/tap/easbot":((await $`brew list --formula easbot`.throws(false).quiet().text()).includes("easbot"),"easbot")}async function U(a,r){let t;switch(a){case "curl":t=$`curl -fsSL https://easbot.cn/install | bash`.env({...process.env,VERSION:r});break;case "npm":t=$`npm install -g easbot@${r}`;break;case "pnpm":t=$`pnpm install -g easbot@${r}`;break;case "bun":t=$`bun install -g easbot@${r}`;break;case "brew":{let E=await f();if(E.includes("/")){t=$`brew tap anomalyco/tap && cd "$(brew --repo anomalyco/tap)" && git pull --ff-only && brew upgrade ${E}`.env({HOMEBREW_NO_AUTO_UPDATE:"1",...process.env});break}t=$`brew upgrade ${E}`.env({HOMEBREW_NO_AUTO_UPDATE:"1",...process.env});break}case "choco":t=$`echo Y | choco upgrade easbot --version=${r}`;break;case "scoop":t=$`scoop install easbot@${r}`;break;default:throw new Error(`Unknown method: ${a}`)}let s=await t.quiet().throws(false);if(s.exitCode!==0){let E=a==="choco"?"not running from an elevated command shell":s.stderr.toString("utf8");throw new S.UpgradeFailedError({stderr:E})}A.info("upgraded",{method:a,target:r,stdout:s.stdout.toString(),stderr:s.stderr.toString()}),await $`${process.execPath} --version`.nothrow().quiet().text();}S.upgrade=U;function I(){return a$2.getVersion()}S.getVersion=I;function L(){return a$2.getChannel()}S.getChannel=L;function v(){return `easbot/${L()}/${I()}/${i.EASBOT_CLIENT}`}S.getUserAgent=v;async function N(a){let r=a||await l();if(r==="brew"){let t=await f();if(t.includes("/")){let s=await $`brew info --json=v2 ${t}`.quiet().text(),c=JSON.parse(s).formulae?.[0]?.versions?.stable;if(!c)throw new Error(`Could not detect version for tap formula: ${t}`);return c}return Fetch.get("https://formulae.brew.sh/api/formula/easbot.json").then(s=>{if(!s.ok)throw new Error(s.statusText);return s.data?.versions?.stable??"unknown"})}if(r==="npm"||r==="bun"||r==="pnpm"){let t=await iife(async()=>{let c=(await $`npm config get registry`.quiet().nothrow().text()).trim()||"https://registry.npmjs.org";return c.endsWith("/")?c.slice(0,-1):c}),s=L();return Fetch.get(`${t}/easbot/${s}`).then(E=>{if(!E.ok)throw new Error(E.statusText);return E.data?.version??"unknown"})}return r==="choco"?Fetch.get("https://community.chocolatey.org/api/v2/Packages?$filter=Id%20eq%20%27easbot%27%20and%20IsLatestVersion&$select=Version",{headers:{Accept:"application/json;odata=verbose"}}).then(t=>{if(!t.ok)throw new Error(t.statusText);return t.data?.d?.results?.[0]?.Version??"unknown"}):r==="scoop"?Fetch.get("https://raw.githubusercontent.com/ScoopInstaller/Main/master/bucket/easbot.json",{headers:{Accept:"application/json"}}).then(t=>{if(!t.ok)throw new Error(t.statusText);return t.data?.version??"unknown"}):Fetch.get("https://api.github.com/repos/houjallen/easbot/releases/latest").then(t=>{if(!t.ok)throw new Error(t.statusText);return (t.data?.tag_name??"unknown").replace(/^v/,"")})}S.latest=N;})(M||(M={}));
2
2
  export{i as a,M as b};
@@ -1,2 +1,2 @@
1
- import {a as a$2,b}from'./chunk-KFKXAXPS.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import {a as a$1}from'./chunk-77AU67VS.mjs';import _ from'path';import d from'fs/promises';import t from'zod';import {lazy,Fetch}from'@easbot/utils';var n;(r=>{let g=a.create({service:"models.dev"}),s=_.join(a$1.Path.cache,"models.json");r.Model=t.object({id:t.string(),name:t.string(),family:t.string().optional(),release_date:t.string(),attachment:t.boolean(),reasoning:t.boolean(),temperature:t.boolean(),tool_call:t.boolean(),interleaved:t.union([t.literal(true),t.object({field:t.enum(["reasoning_content","reasoning_details"])}).strict()]).optional(),cost:t.object({input:t.number(),output:t.number(),cache_read:t.number().optional(),cache_write:t.number().optional(),context_over_200k:t.object({input:t.number(),output:t.number(),cache_read:t.number().optional(),cache_write:t.number().optional()}).optional()}).optional(),limit:t.object({context:t.number(),input:t.number().optional(),output:t.number()}),modalities:t.object({input:t.array(t.enum(["text","audio","image","video","pdf"])),output:t.array(t.enum(["text","audio","image","video","pdf"]))}).optional(),experimental:t.boolean().optional(),status:t.enum(["alpha","beta","deprecated"]).optional(),options:t.record(t.string(),t.any()),headers:t.record(t.string(),t.string()).optional(),provider:t.object({npm:t.string()}).optional(),variants:t.record(t.string(),t.record(t.string(),t.any())).optional()}),r.Provider=t.object({api:t.string().optional(),name:t.string(),env:t.array(t.string()),id:t.string(),npm:t.string().optional(),models:t.record(t.string(),r.Model)});function a$3(){return a$2.EASBOT_MODELS_URL||"https://models.dev"}r.Data=lazy(async()=>{let e=a$2.EASBOT_MODELS_PATH??s,p=await d.readFile(e,"utf-8").then(i=>JSON.parse(i)).catch(()=>{});if(p)return p;let c=await import('./models-snapshot-XTWYGG3T.mjs').then(i=>i.snapshot).catch(()=>{});return c||(a$2.EASBOT_DISABLE_MODELS_FETCH?{}:(await Fetch.get(a$3())).data)});async function E(){return await(0, r.Data)()}r.get=E;async function v(){try{let e=await Fetch.get(a$3(),{headers:{"User-Agent":`EasBot/${b.getVersion()}`},responseType:"text"});e.ok&&(await d.writeFile(s,e.data),r.Data.reset());}catch(e){g.warn("Failed to refresh models from models.dev, using cached or snapshot data",{error:e instanceof Error?e.message:String(e),url:a$3()});}}r.refresh=v;})(n||(n={}));function z(){a$2.EASBOT_DISABLE_MODELS_FETCH||(n.refresh(),setInterval(async()=>{await n.refresh();},60*1e3*60).unref());}
1
+ import {a as a$2,b}from'./chunk-3P7JMESZ.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import {a as a$1}from'./chunk-6M4SMEZK.mjs';import _ from'path';import d from'fs/promises';import t from'zod';import {lazy,Fetch}from'@easbot/utils';var n;(r=>{let g=a.create({service:"models.dev"}),s=_.join(a$1.Path.cache,"models.json");r.Model=t.object({id:t.string(),name:t.string(),family:t.string().optional(),release_date:t.string(),attachment:t.boolean(),reasoning:t.boolean(),temperature:t.boolean(),tool_call:t.boolean(),interleaved:t.union([t.literal(true),t.object({field:t.enum(["reasoning_content","reasoning_details"])}).strict()]).optional(),cost:t.object({input:t.number(),output:t.number(),cache_read:t.number().optional(),cache_write:t.number().optional(),context_over_200k:t.object({input:t.number(),output:t.number(),cache_read:t.number().optional(),cache_write:t.number().optional()}).optional()}).optional(),limit:t.object({context:t.number(),input:t.number().optional(),output:t.number()}),modalities:t.object({input:t.array(t.enum(["text","audio","image","video","pdf"])),output:t.array(t.enum(["text","audio","image","video","pdf"]))}).optional(),experimental:t.boolean().optional(),status:t.enum(["alpha","beta","deprecated"]).optional(),options:t.record(t.string(),t.any()),headers:t.record(t.string(),t.string()).optional(),provider:t.object({npm:t.string()}).optional(),variants:t.record(t.string(),t.record(t.string(),t.any())).optional()}),r.Provider=t.object({api:t.string().optional(),name:t.string(),env:t.array(t.string()),id:t.string(),npm:t.string().optional(),models:t.record(t.string(),r.Model)});function a$3(){return a$2.EASBOT_MODELS_URL||"https://models.dev"}r.Data=lazy(async()=>{let e=a$2.EASBOT_MODELS_PATH??s,p=await d.readFile(e,"utf-8").then(i=>JSON.parse(i)).catch(()=>{});if(p)return p;let c=await import('./models-snapshot-XTWYGG3T.mjs').then(i=>i.snapshot).catch(()=>{});return c||(a$2.EASBOT_DISABLE_MODELS_FETCH?{}:(await Fetch.get(a$3())).data)});async function E(){return await(0, r.Data)()}r.get=E;async function v(){try{let e=await Fetch.get(a$3(),{headers:{"User-Agent":`EasBot/${b.getVersion()}`},responseType:"text"});e.ok&&(await d.writeFile(s,e.data),r.Data.reset());}catch(e){g.warn("Failed to refresh models from models.dev, using cached or snapshot data",{error:e instanceof Error?e.message:String(e),url:a$3()});}}r.refresh=v;})(n||(n={}));function z(){a$2.EASBOT_DISABLE_MODELS_FETCH||(n.refresh(),setInterval(async()=>{await n.refresh();},60*1e3*60).unref());}
2
2
  export{n as a,z as b};
@@ -1 +1 @@
1
- import {Ma}from'./chunk-RWJKYXLR.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import {a as a$1}from'./chunk-77AU67VS.mjs';import {b as b$1}from'./chunk-X6ISXWBN.mjs';import d from'fs';import u from'path';var P=a.create({service:"cli-plugin"});function S(t,e,r){return {context:t,logger:a,config:r,registerCli(n,o){try{t._pluginCliRegistrations||(t._pluginCliRegistrations=[]),t._pluginCliRegistrations.push({pluginId:e,register:n,commands:o?.commands||[]}),P.debug("Plugin CLI registered",{pluginId:e,commands:o?.commands});}catch(a){throw P.error("Plugin CLI registration failed",{pluginId:e,error:a}),a}},registerCommand(n){try{if(t._pluginCommands||(t._pluginCommands=[]),!n.name||!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(n.name))throw new Error(`Invalid command name: ${n.name}`);let o=t._pluginCommands.find(s=>s.name.toLowerCase()===n.name.toLowerCase());if(o)throw new Error(`Command "${n.name}" is already registered by plugin "${o.pluginId}"`);let a=async s=>{try{return await n.handler(s)}catch(i){return P.error("Plugin command handler failed",{pluginId:e,commandName:n.name,error:i}),{text:`Command failed: ${i instanceof Error?i.message:String(i)}`}}};t._pluginCommands.push({...n,handler:a,pluginId:e}),P.debug("Plugin command registered",{pluginId:e,commandName:n.name});}catch(o){throw P.error("Plugin command registration failed",{pluginId:e,error:o}),o}}}}var g=a.create({service:"cli-plugin-discovery"});async function F(t){if(t.enabled===false)return g.debug("Plugin system is disabled"),[];let e=[],r=new Set;if(t.loadPaths)for(let s of t.loadPaths){let i=await I(s,"npm");for(let l of i)r.has(l.id)||(e.push(l),r.add(l.id));}let n=u.join(Ma.directory,".easbot","extensions");if(d.existsSync(n)){let s=await h(n,"workspace");for(let i of s)r.has(i.id)||(e.push(i),r.add(i.id));}let o=u.join(a$1.Path.config,"extensions");if(d.existsSync(o)){let s=await h(o,"global");for(let i of s)r.has(i.id)||(e.push(i),r.add(i.id));}let a=e.filter(s=>t.deny?.includes(s.id)?(g.debug("Plugin denied by blacklist",{pluginId:s.id}),false):t.allow&&t.allow.length>0&&!t.allow.includes(s.id)?(g.debug("Plugin not in whitelist",{pluginId:s.id}),false):true);return g.info("Discovered plugins",{count:a.length,plugins:a.map(s=>s.id)}),a}async function I(t,e){if(!d.existsSync(t))return g.debug("Plugin path does not exist",{pluginPath:t}),[];let r=d.statSync(t);return r.isFile()?A(t,e):r.isDirectory()?h(t,e):[]}async function A(t,e){let r=u.dirname(t),n=u.join(r,"easbot.plugin.json"),o;if(d.existsSync(n))try{o=JSON.parse(d.readFileSync(n,"utf-8"));}catch(s){return g.error("Failed to read plugin manifest",{manifestPath:n,error:s}),[]}let a=o?.id||u.basename(t,u.extname(t));return [{id:a,name:o?.name||a,version:o?.version||"0.0.0",description:o?.description,path:t,source:e,enabled:true,manifest:o}]}async function h(t,e){let r=[];try{let n=d.readdirSync(t,{withFileTypes:!0});for(let o of n){let a=u.join(t,o.name);if(o.isFile()&&(o.name.endsWith(".ts")||o.name.endsWith(".js"))){let s=await A(a,e);r.push(...s);}else if(o.isDirectory()){let s=u.join(a,"easbot.plugin.json");if(!d.existsSync(s)){g.debug("Plugin directory missing manifest",{entryPath:a});continue}let i;try{i=JSON.parse(d.readFileSync(s,"utf-8"));}catch(m){g.error("Failed to read plugin manifest",{manifestPath:s,error:m});continue}let l=i.main||"index.ts",f=u.join(a,l);if(d.existsSync(f))r.push({id:i.id,name:i.name||i.id,version:i.version||"0.0.0",description:i.description,path:f,source:e,enabled:!0,manifest:i});else {let m=["index.js","plugin.ts","plugin.js"],w=!1;for(let E of m){let C=u.join(a,E);if(d.existsSync(C)){r.push({id:i.id,name:i.name||i.id,version:i.version||"0.0.0",description:i.description,path:C,source:e,enabled:!0,manifest:i}),w=!0;break}}w||g.error("Plugin entry file not found",{entryPath:a,entryFile:l});}}}}catch(n){g.error("Failed to read plugin directory",{dirPath:t,error:n});}return r}var c=a.create({service:"cli-plugin-loader"}),b=class{constructor(e){b$1(this,"loadedPlugins",new Map);b$1(this,"context");this.context=e;}async loadAll(e){let r=await F(e),n=await Promise.allSettled(r.map(async i=>{let l=this.context.config.plugins,f=l&&typeof l=="object"&&"entries"in l&&l.entries&&typeof l.entries=="object"?l.entries[i.id]:void 0;if(f&&typeof f=="object"&&"enabled"in f&&f.enabled===false)return c.info("Plugin disabled in config",{pluginId:i.id}),{pluginId:i.id,status:"disabled"};try{return await this.loadPlugin(i),{pluginId:i.id,status:"loaded"}}catch(m){return c.error("Failed to load plugin",{pluginId:i.id,error:m}),{pluginId:i.id,status:"failed",error:m}}})),o=n.filter(i=>i.status==="fulfilled"&&i.value.status==="loaded").length,a=n.filter(i=>i.status==="fulfilled"&&i.value.status==="failed").length,s=n.filter(i=>i.status==="fulfilled"&&i.value.status==="disabled").length;c.info("All plugins processed",{total:r.length,loaded:o,failed:a,disabled:s});}async loadPlugin(e){if(this.loadedPlugins.has(e.id)){c.debug("Plugin already loaded",{pluginId:e.id});return}c.debug("Loading plugin",{pluginId:e.id,path:e.path});try{let r=await import(e.path),n=r.default||r.plugin;if(!n)throw new Error("Plugin module does not export a plugin definition");if(typeof n!="function"&&(typeof n!="object"||!n.register))throw new Error("Plugin must be a function or an object with a register method");this.loadedPlugins.set(e.id,n),await this.initializePlugin(e.id,n),c.info("Plugin loaded successfully",{pluginId:e.id,name:e.name});}catch(r){let n=r instanceof Error?r.message:String(r),o=r instanceof Error?r.stack:void 0;throw c.error("Failed to load plugin module",{pluginId:e.id,path:e.path,error:n,stack:o}),new Error(`Failed to load plugin "${e.id}" from ${e.path}: ${n}`)}}async initializePlugin(e,r){let n=this.context.config.plugins,o=n&&typeof n=="object"&&"entries"in n&&n.entries&&typeof n.entries=="object"?n.entries[e]:void 0,a=(o&&typeof o=="object"&&"config"in o?o.config:{})||{},s=S(this.context,e,a);try{if(typeof r=="function")await r(s);else {let i=r;i.id&&i.id!==e&&c.warn("Plugin ID mismatch",{expected:e,actual:i.id}),await i.register(s);}c.debug("Plugin initialized",{pluginId:e});}catch(i){throw c.error("Plugin initialization failed",{pluginId:e,error:i}),this.loadedPlugins.delete(e),new Error(`Plugin "${e}" initialization failed: ${i instanceof Error?i.message:String(i)}`)}}getPlugin(e){return this.loadedPlugins.get(e)}getLoadedPluginIds(){return Array.from(this.loadedPlugins.keys())}};function H(t){return new b(t)}export{b as a,H as b};
1
+ import {Na}from'./chunk-MMN3J3YS.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import {a as a$1}from'./chunk-6M4SMEZK.mjs';import {b as b$1}from'./chunk-X6ISXWBN.mjs';import d from'fs';import u from'path';var P=a.create({service:"cli-plugin"});function S(t,e,r){return {context:t,logger:a,config:r,registerCli(n,o){try{t._pluginCliRegistrations||(t._pluginCliRegistrations=[]),t._pluginCliRegistrations.push({pluginId:e,register:n,commands:o?.commands||[]}),P.debug("Plugin CLI registered",{pluginId:e,commands:o?.commands});}catch(a){throw P.error("Plugin CLI registration failed",{pluginId:e,error:a}),a}},registerCommand(n){try{if(t._pluginCommands||(t._pluginCommands=[]),!n.name||!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(n.name))throw new Error(`Invalid command name: ${n.name}`);let o=t._pluginCommands.find(s=>s.name.toLowerCase()===n.name.toLowerCase());if(o)throw new Error(`Command "${n.name}" is already registered by plugin "${o.pluginId}"`);let a=async s=>{try{return await n.handler(s)}catch(i){return P.error("Plugin command handler failed",{pluginId:e,commandName:n.name,error:i}),{text:`Command failed: ${i instanceof Error?i.message:String(i)}`}}};t._pluginCommands.push({...n,handler:a,pluginId:e}),P.debug("Plugin command registered",{pluginId:e,commandName:n.name});}catch(o){throw P.error("Plugin command registration failed",{pluginId:e,error:o}),o}}}}var g=a.create({service:"cli-plugin-discovery"});async function F(t){if(t.enabled===false)return g.debug("Plugin system is disabled"),[];let e=[],r=new Set;if(t.loadPaths)for(let s of t.loadPaths){let i=await I(s,"npm");for(let l of i)r.has(l.id)||(e.push(l),r.add(l.id));}let n=u.join(Na.directory,".easbot","extensions");if(d.existsSync(n)){let s=await h(n,"workspace");for(let i of s)r.has(i.id)||(e.push(i),r.add(i.id));}let o=u.join(a$1.Path.config,"extensions");if(d.existsSync(o)){let s=await h(o,"global");for(let i of s)r.has(i.id)||(e.push(i),r.add(i.id));}let a=e.filter(s=>t.deny?.includes(s.id)?(g.debug("Plugin denied by blacklist",{pluginId:s.id}),false):t.allow&&t.allow.length>0&&!t.allow.includes(s.id)?(g.debug("Plugin not in whitelist",{pluginId:s.id}),false):true);return g.info("Discovered plugins",{count:a.length,plugins:a.map(s=>s.id)}),a}async function I(t,e){if(!d.existsSync(t))return g.debug("Plugin path does not exist",{pluginPath:t}),[];let r=d.statSync(t);return r.isFile()?A(t,e):r.isDirectory()?h(t,e):[]}async function A(t,e){let r=u.dirname(t),n=u.join(r,"easbot.plugin.json"),o;if(d.existsSync(n))try{o=JSON.parse(d.readFileSync(n,"utf-8"));}catch(s){return g.error("Failed to read plugin manifest",{manifestPath:n,error:s}),[]}let a=o?.id||u.basename(t,u.extname(t));return [{id:a,name:o?.name||a,version:o?.version||"0.0.0",description:o?.description,path:t,source:e,enabled:true,manifest:o}]}async function h(t,e){let r=[];try{let n=d.readdirSync(t,{withFileTypes:!0});for(let o of n){let a=u.join(t,o.name);if(o.isFile()&&(o.name.endsWith(".ts")||o.name.endsWith(".js"))){let s=await A(a,e);r.push(...s);}else if(o.isDirectory()){let s=u.join(a,"easbot.plugin.json");if(!d.existsSync(s)){g.debug("Plugin directory missing manifest",{entryPath:a});continue}let i;try{i=JSON.parse(d.readFileSync(s,"utf-8"));}catch(m){g.error("Failed to read plugin manifest",{manifestPath:s,error:m});continue}let l=i.main||"index.ts",f=u.join(a,l);if(d.existsSync(f))r.push({id:i.id,name:i.name||i.id,version:i.version||"0.0.0",description:i.description,path:f,source:e,enabled:!0,manifest:i});else {let m=["index.js","plugin.ts","plugin.js"],w=!1;for(let E of m){let C=u.join(a,E);if(d.existsSync(C)){r.push({id:i.id,name:i.name||i.id,version:i.version||"0.0.0",description:i.description,path:C,source:e,enabled:!0,manifest:i}),w=!0;break}}w||g.error("Plugin entry file not found",{entryPath:a,entryFile:l});}}}}catch(n){g.error("Failed to read plugin directory",{dirPath:t,error:n});}return r}var c=a.create({service:"cli-plugin-loader"}),b=class{constructor(e){b$1(this,"loadedPlugins",new Map);b$1(this,"context");this.context=e;}async loadAll(e){let r=await F(e),n=await Promise.allSettled(r.map(async i=>{let l=this.context.config.plugins,f=l&&typeof l=="object"&&"entries"in l&&l.entries&&typeof l.entries=="object"?l.entries[i.id]:void 0;if(f&&typeof f=="object"&&"enabled"in f&&f.enabled===false)return c.info("Plugin disabled in config",{pluginId:i.id}),{pluginId:i.id,status:"disabled"};try{return await this.loadPlugin(i),{pluginId:i.id,status:"loaded"}}catch(m){return c.error("Failed to load plugin",{pluginId:i.id,error:m}),{pluginId:i.id,status:"failed",error:m}}})),o=n.filter(i=>i.status==="fulfilled"&&i.value.status==="loaded").length,a=n.filter(i=>i.status==="fulfilled"&&i.value.status==="failed").length,s=n.filter(i=>i.status==="fulfilled"&&i.value.status==="disabled").length;c.info("All plugins processed",{total:r.length,loaded:o,failed:a,disabled:s});}async loadPlugin(e){if(this.loadedPlugins.has(e.id)){c.debug("Plugin already loaded",{pluginId:e.id});return}c.debug("Loading plugin",{pluginId:e.id,path:e.path});try{let r=await import(e.path),n=r.default||r.plugin;if(!n)throw new Error("Plugin module does not export a plugin definition");if(typeof n!="function"&&(typeof n!="object"||!n.register))throw new Error("Plugin must be a function or an object with a register method");this.loadedPlugins.set(e.id,n),await this.initializePlugin(e.id,n),c.info("Plugin loaded successfully",{pluginId:e.id,name:e.name});}catch(r){let n=r instanceof Error?r.message:String(r),o=r instanceof Error?r.stack:void 0;throw c.error("Failed to load plugin module",{pluginId:e.id,path:e.path,error:n,stack:o}),new Error(`Failed to load plugin "${e.id}" from ${e.path}: ${n}`)}}async initializePlugin(e,r){let n=this.context.config.plugins,o=n&&typeof n=="object"&&"entries"in n&&n.entries&&typeof n.entries=="object"?n.entries[e]:void 0,a=(o&&typeof o=="object"&&"config"in o?o.config:{})||{},s=S(this.context,e,a);try{if(typeof r=="function")await r(s);else {let i=r;i.id&&i.id!==e&&c.warn("Plugin ID mismatch",{expected:e,actual:i.id}),await i.register(s);}c.debug("Plugin initialized",{pluginId:e});}catch(i){throw c.error("Plugin initialization failed",{pluginId:e,error:i}),this.loadedPlugins.delete(e),new Error(`Plugin "${e}" initialization failed: ${i instanceof Error?i.message:String(i)}`)}}getPlugin(e){return this.loadedPlugins.get(e)}getLoadedPluginIds(){return Array.from(this.loadedPlugins.keys())}};function H(t){return new b(t)}export{b as a,H as b};
@@ -1,2 +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.26",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={}));
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.27",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
2
  export{g as a};
@@ -1 +1 @@
1
- import {a as a$1}from'./chunk-3SWLJTIF.mjs';import {a}from'./chunk-LFYBZHOI.mjs';var n=a.create({service:"tui-state-storage"}),i={toolsExpanded:true,showThinking:true,verboseLevel:"off",thinkingLevel:"low",messageLimit:50,localShellPermission:"ask"};async function h(o){try{let e=await a$1.read(["tui",o]),t={toolsExpanded:typeof e.toolsExpanded=="boolean"?e.toolsExpanded:i.toolsExpanded,showThinking:typeof e.showThinking=="boolean"?e.showThinking:i.showThinking,verboseLevel:e.verboseLevel==="on"||e.verboseLevel==="off"?e.verboseLevel:i.verboseLevel,thinkingLevel:e.thinkingLevel==="off"||e.thinkingLevel==="low"||e.thinkingLevel==="medium"||e.thinkingLevel==="high"?e.thinkingLevel:i.thinkingLevel,messageLimit:e.messageLimit===25||e.messageLimit===50||e.messageLimit===100?e.messageLimit:i.messageLimit,localShellPermission:e.localShellPermission==="on"||e.localShellPermission==="off"||e.localShellPermission==="ask"?e.localShellPermission:i.localShellPermission,contextMode:e.contextMode==="general"||e.contextMode==="coder"?e.contextMode:void 0,model:e.model,agent:e.agent,sessionId:e.sessionId};return n.debug("TUI state loaded",{sessionId:o,state:t}),t}catch(e){return e instanceof a$1.NotFoundError?n.debug("TUI state not found, using defaults",{sessionId:o}):n.warn("Failed to load TUI state, using defaults",{sessionId:o,error:e}),{...i}}}async function r(o,e){try{await a$1.write(["tui",o],e),n.debug("TUI state saved",{sessionId:o,state:e});}catch(t){n.error("Failed to save TUI state",{sessionId:o,error:t});}}async function c(o){if(!o.currentSessionId){n.warn("Cannot save TUI state: no session ID");return}let e={toolsExpanded:o.toolsExpanded,showThinking:o.showThinking,thinkingLevel:o.thinkingLevel,verboseLevel:o.verboseLevel,messageLimit:o.messageLimit,localShellPermission:o.localShellPermission,contextMode:o.contextMode,model:o.sessionInfo.model,agent:o.agent||void 0,sessionId:o.currentSessionId};await r(o.currentSessionId,e);}export{h as a,c as b};
1
+ import {a as a$1}from'./chunk-RRQRZ6MW.mjs';import {a}from'./chunk-LFYBZHOI.mjs';var n=a.create({service:"tui-state-storage"}),i={toolsExpanded:true,showThinking:true,verboseLevel:"off",thinkingLevel:"low",messageLimit:50,localShellPermission:"ask"};async function h(o){try{let e=await a$1.read(["tui",o]),t={toolsExpanded:typeof e.toolsExpanded=="boolean"?e.toolsExpanded:i.toolsExpanded,showThinking:typeof e.showThinking=="boolean"?e.showThinking:i.showThinking,verboseLevel:e.verboseLevel==="on"||e.verboseLevel==="off"?e.verboseLevel:i.verboseLevel,thinkingLevel:e.thinkingLevel==="off"||e.thinkingLevel==="low"||e.thinkingLevel==="medium"||e.thinkingLevel==="high"?e.thinkingLevel:i.thinkingLevel,messageLimit:e.messageLimit===25||e.messageLimit===50||e.messageLimit===100?e.messageLimit:i.messageLimit,localShellPermission:e.localShellPermission==="on"||e.localShellPermission==="off"||e.localShellPermission==="ask"?e.localShellPermission:i.localShellPermission,contextMode:e.contextMode==="general"||e.contextMode==="coder"?e.contextMode:void 0,model:e.model,agent:e.agent,sessionId:e.sessionId};return n.debug("TUI state loaded",{sessionId:o,state:t}),t}catch(e){return e instanceof a$1.NotFoundError?n.debug("TUI state not found, using defaults",{sessionId:o}):n.warn("Failed to load TUI state, using defaults",{sessionId:o,error:e}),{...i}}}async function r(o,e){try{await a$1.write(["tui",o],e),n.debug("TUI state saved",{sessionId:o,state:e});}catch(t){n.error("Failed to save TUI state",{sessionId:o,error:t});}}async function c(o){if(!o.currentSessionId){n.warn("Cannot save TUI state: no session ID");return}let e={toolsExpanded:o.toolsExpanded,showThinking:o.showThinking,thinkingLevel:o.thinkingLevel,verboseLevel:o.verboseLevel,messageLimit:o.messageLimit,localShellPermission:o.localShellPermission,contextMode:o.contextMode,model:o.sessionInfo.model,agent:o.agent||void 0,sessionId:o.currentSessionId};await r(o.currentSessionId,e);}export{h as a,c as b};