@easbot/agent 0.2.33 → 0.2.34

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 (90) hide show
  1. package/dist/assets/txt/tool/agent-client.txt +27 -17
  2. package/dist/chunks/{acp-VDKINAWR.mjs → acp-AARVJTBA.mjs} +1 -1
  3. package/dist/chunks/adapter-loader-CB3UW37H.mjs +1 -0
  4. package/dist/chunks/{agent-EXH3EXNP.mjs → agent-3TY5COL7.mjs} +1 -1
  5. package/dist/chunks/{agent-IKNANWOU.mjs → agent-SF44D677.mjs} +1 -1
  6. package/dist/chunks/app-AGDSZJDM.mjs +1 -0
  7. package/dist/chunks/bootstrap-EDMSUWV2.mjs +1 -0
  8. package/dist/chunks/{build-program-HXXT6DQM.mjs → build-program-2H5HVRPR.mjs} +1 -1
  9. package/dist/chunks/bus-YEQKNKMO.mjs +1 -0
  10. package/dist/chunks/{chunk-HACAZH7T.mjs → chunk-352N6IPS.mjs} +1 -1
  11. package/dist/chunks/{chunk-YZOAYITQ.mjs → chunk-BJ3DFGMC.mjs} +1 -1
  12. package/dist/chunks/{chunk-XTHATUY4.mjs → chunk-DPHR5M4T.mjs} +1 -1
  13. package/dist/chunks/{chunk-4GMKI6FY.mjs → chunk-F6HODP64.mjs} +1 -1
  14. package/dist/chunks/{chunk-3GBVNLVL.mjs → chunk-HLW2EHPQ.mjs} +1 -1
  15. package/dist/chunks/{chunk-W7J4LU42.mjs → chunk-JPLRWRX5.mjs} +1 -1
  16. package/dist/chunks/{chunk-R3MXNCX5.mjs → chunk-KKGI52AW.mjs} +1 -1
  17. package/dist/chunks/{chunk-OEPPJZFZ.mjs → chunk-OI3BLNYR.mjs} +1 -1
  18. package/dist/chunks/{chunk-T75GE4R6.mjs → chunk-OTJQZ7WY.mjs} +2 -2
  19. package/dist/chunks/chunk-QGDQQX6A.mjs +1057 -0
  20. package/dist/chunks/{chunk-WIU6CVKP.mjs → chunk-SGMMA2KV.mjs} +1 -1
  21. package/dist/chunks/{command-V7QNKP7O.mjs → command-M33DIHFA.mjs} +1 -1
  22. package/dist/chunks/compaction-C7J7C53D.mjs +1 -0
  23. package/dist/chunks/{config-LSCANUOQ.mjs → config-4XNBHYBV.mjs} +1 -1
  24. package/dist/chunks/{debug-4SGU2Y2Q.mjs → debug-C7S7OM6A.mjs} +3 -3
  25. package/dist/chunks/file-7GFIUNTB.mjs +1 -0
  26. package/dist/chunks/{gateway-SSDLJMXI.mjs → gateway-GHZM2PJR.mjs} +2 -2
  27. package/dist/chunks/{generate-NUX2GBYY.mjs → generate-QC7LMP4L.mjs} +1 -1
  28. package/dist/chunks/{github-W2LFG2G6.mjs → github-FO4EEXXO.mjs} +1 -1
  29. package/dist/chunks/global-SGSR543B.mjs +1 -0
  30. package/dist/chunks/{import-NFHPQNA7.mjs → import-YZ6DALJH.mjs} +1 -1
  31. package/dist/chunks/installation-MSVVOKVK.mjs +1 -0
  32. package/dist/chunks/instance-7KTZRA5I.mjs +1 -0
  33. package/dist/chunks/loader-4M6NJ42J.mjs +1 -0
  34. package/dist/chunks/loader-Y2HF2YS3.mjs +1 -0
  35. package/dist/chunks/lsp-BBM7GYOR.mjs +1 -0
  36. package/dist/chunks/{mcp-BR3CYNJB.mjs → mcp-HYAPWABM.mjs} +1 -1
  37. package/dist/chunks/mcp-QADEQDMW.mjs +1 -0
  38. package/dist/chunks/models-STBKM4E7.mjs +1 -0
  39. package/dist/chunks/{pr-4X42BEJT.mjs → pr-HCRWGCWQ.mjs} +1 -1
  40. package/dist/chunks/preferences-OIWBGPIP.mjs +1 -0
  41. package/dist/chunks/project-PGXZXAH4.mjs +1 -0
  42. package/dist/chunks/prompt-GCZ2IF3I.mjs +1 -0
  43. package/dist/chunks/provider-L2DUZROS.mjs +1 -0
  44. package/dist/chunks/registry-P52K6QCZ.mjs +1 -0
  45. package/dist/chunks/revert-RO5GTNSL.mjs +1 -0
  46. package/dist/chunks/ripgrep-TM67XB2T.mjs +1 -0
  47. package/dist/chunks/{run-BD36UNJF.mjs → run-URKJ5DUT.mjs} +1 -1
  48. package/dist/chunks/{scheduler-S37CNKWR.mjs → scheduler-336IG7TK.mjs} +1 -1
  49. package/dist/chunks/server-AOQMZH73.mjs +1 -0
  50. package/dist/chunks/session-2GNR26CC.mjs +1 -0
  51. package/dist/chunks/{session-R3U252OC.mjs → session-MFCBHZIP.mjs} +1 -1
  52. package/dist/chunks/session-MTKITUFM.mjs +1 -0
  53. package/dist/chunks/share-DNOEENLW.mjs +1 -0
  54. package/dist/chunks/snapshot-IQM4QQO6.mjs +1 -0
  55. package/dist/chunks/storage-6OI3SHPN.mjs +1 -0
  56. package/dist/chunks/tui-7R6TWIWS.mjs +1 -0
  57. package/dist/chunks/{tui-SW7BOEMQ.mjs → tui-TT6OCQV4.mjs} +1 -1
  58. package/dist/chunks/{types-WCQ4KHSB.mjs → types-I46IFFJ2.mjs} +1 -1
  59. package/dist/chunks/{update-424STNM5.mjs → update-VBHR764I.mjs} +1 -1
  60. package/dist/cli.mjs +2 -2
  61. package/package.json +14 -14
  62. package/dist/chunks/adapter-loader-HTS4EEL4.mjs +0 -1
  63. package/dist/chunks/app-BZWD4E32.mjs +0 -1
  64. package/dist/chunks/bootstrap-CB65J4FA.mjs +0 -1
  65. package/dist/chunks/bus-S6EWJZAJ.mjs +0 -1
  66. package/dist/chunks/chunk-EXZOV2YR.mjs +0 -1043
  67. package/dist/chunks/compaction-HKN7HOBD.mjs +0 -1
  68. package/dist/chunks/file-KHHRKYLJ.mjs +0 -1
  69. package/dist/chunks/global-ZK2HE4L2.mjs +0 -1
  70. package/dist/chunks/installation-4XG5GKF2.mjs +0 -1
  71. package/dist/chunks/instance-6HPNQZR5.mjs +0 -1
  72. package/dist/chunks/loader-4EPHUIR3.mjs +0 -1
  73. package/dist/chunks/loader-PVSCRHAG.mjs +0 -1
  74. package/dist/chunks/lsp-XWC37KPE.mjs +0 -1
  75. package/dist/chunks/mcp-MMYCROXT.mjs +0 -1
  76. package/dist/chunks/models-M5BT6WMD.mjs +0 -1
  77. package/dist/chunks/preferences-XV3DOFFV.mjs +0 -1
  78. package/dist/chunks/project-VUSYTQRZ.mjs +0 -1
  79. package/dist/chunks/prompt-TC6ZOCJ7.mjs +0 -1
  80. package/dist/chunks/provider-RSD6RHBA.mjs +0 -1
  81. package/dist/chunks/registry-JC6QFFEI.mjs +0 -1
  82. package/dist/chunks/revert-Q4KBW2OL.mjs +0 -1
  83. package/dist/chunks/ripgrep-CKVVXX5D.mjs +0 -1
  84. package/dist/chunks/server-PWL7MLW7.mjs +0 -1
  85. package/dist/chunks/session-27P45HFD.mjs +0 -1
  86. package/dist/chunks/session-2ECCHYP7.mjs +0 -1
  87. package/dist/chunks/share-VRVDSUF4.mjs +0 -1
  88. package/dist/chunks/snapshot-JKLZBDBN.mjs +0 -1
  89. package/dist/chunks/storage-2SFY3R4G.mjs +0 -1
  90. package/dist/chunks/tui-P7HR545F.mjs +0 -1
@@ -1,9 +1,8 @@
1
- Manage a full-duplex conversation channel with another easbot agent endpoint.
2
- Use this as the single tool for connect, list, discover, capabilities, send, status, config, interrupt, and close.
1
+ Manage a full-duplex conversation channel with another easbot agent endpoint over HTTP or WebSocket.
3
2
 
4
3
  Inputs (kept minimal):
5
4
  - operation: connect | list | discover | capabilities | send | status | config | interrupt | close
6
- - baseUrl: target easbot service base URL (required for connect, e.g. http://localhost:3000)
5
+ - baseUrl: target easbot service base URL (required for connect, e.g. ws://localhost:3000)
7
6
  - connectionId: local connection id (required for remote ops: capabilities/send/interrupt/close/status; auto-resolved from baseUrl if not provided)
8
7
  - prompt: message to send (required for send)
9
8
 
@@ -12,35 +11,42 @@ Operations:
12
11
  - Required: baseUrl (connectionId not needed)
13
12
  - Returns: connectionId, sessionId, remoteAgentId, channel
14
13
  - No service registration required; pure URL connection is supported
14
+
15
15
  2. list: List all locally managed connections (active sessions)
16
- - Returns: array of connection info with connectionId, baseUrl, sessionId, remoteAgentId
17
- 3. discover: Discover available agent services from registry
18
- - Data sources: local config file (.easbot/agent-services.json), Config.Info.acp.clients, Gateway
19
- - Returns: array of AgentServiceInfo { id, name, baseUrl, agentId, capabilities, status, metadata }
16
+ - Returns: array of connection info with connectionId, baseUrl, sessionId, channel
17
+
18
+ 3. discover: Discover available agent services
19
+ - Returns: array of { name, status, baseUrl }
20
+
20
21
  4. capabilities: Query remote agent capabilities (ACP initialize)
21
22
  - Required: connectionId (auto-resolved from baseUrl)
22
- - Returns: protocolVersion, agentCapabilities, authMethods
23
+ - Returns: protocolVersion, authMethods
24
+
23
25
  5. send: Push one message to remote session
24
26
  - Required: connectionId, prompt
25
27
  - Automatically establishes event subscription on first send
26
28
  - Remote responses are injected into local SessionPrompt asynchronously
27
29
  - Returns: pending round info (waiting for remote response)
30
+
28
31
  6. status: Inspect local managed connection state
29
32
  - Required: connectionId (auto-resolved from baseUrl)
30
- - Returns: connection state including sessionId, baseUrl, remoteAgentId, channel
33
+ - Returns: connection state including sessionId, baseUrl, status
34
+
31
35
  7. config: Inspect local agent client config and managed connections count
32
- - Returns: acp config object and managedConnections count
36
+ - Returns: server config (channel, port, hostname) and managedConnections count
37
+
33
38
  8. interrupt: Cancel remote session and cleanup local interaction state
34
39
  - Required: connectionId (auto-resolved from baseUrl)
35
40
  - Sends interrupt signal to remote server, cancels subscription
36
41
  - Use when you need to abort an ongoing interaction
42
+
37
43
  9. close: Release local connection state and cleanup all interaction resources
38
44
  - Required: connectionId (auto-resolved from baseUrl)
39
45
  - Always call close when done to prevent resource leaks
40
46
 
41
47
  Connection Flow:
42
- 1. connect + baseUrl creates connection, returns connectionId
43
- 2. Other operations use connectionId auto-resolved from baseUrl if not provided
48
+ 1. connect + baseUrl -> creates connection, returns connectionId
49
+ 2. Other operations use connectionId -> auto-resolved from baseUrl if not provided
44
50
  3. If baseUrl provided but no connectionId, searches existing connections by baseUrl
45
51
  4. If no matching connection found, connect operation is required first
46
52
  5. Use discover to find available services before connecting
@@ -56,11 +62,14 @@ Round Control:
56
62
  - Use `close` to manually cleanup when interaction is complete
57
63
 
58
64
  Returns:
59
- - Standard tool result: { title, metadata: { count, ... }, output: JSON }
60
- - connectionId: local connection identifier
61
- - remote sessionId: remote session identifier
62
- - subscription: automatically established on first send
63
- - round info: completedRounds, pendingRound, maxRounds, remaining rounds
65
+ - Standard tool result: { title, metadata: { count, ... }, output: XML format }
66
+ - Output format is XML-like for easy parsing:
67
+ - <config>: configuration info
68
+ - <connections>: list of active connections
69
+ - <connection>: single connection details
70
+ - <services>: discovered agent services
71
+ - <capabilities>: remote agent capabilities
72
+ - <agent_message>: message sent status, response will be injected automatically
64
73
 
65
74
  Notes:
66
75
  - Send without prior connect will fail with explicit error
@@ -70,3 +79,4 @@ Notes:
70
79
  - Use `interrupt` to abort an ongoing interaction before completion
71
80
  - Pure URL connection: no service registration needed, just provide baseUrl
72
81
  - Use discover to find available agent services before connecting
82
+ - Supports HTTP and WebSocket channels only
@@ -1,4 +1,4 @@
1
- import {a as a$1}from'./chunk-LAHYVX5K.mjs';import {a as a$2}from'./chunk-3GBVNLVL.mjs';import'./chunk-VII7JKGB.mjs';import {g,e,d,k,i as i$1,b,h,c,a as a$3}from'./chunk-M3K32WJV.mjs';import {ob,da,wa,Na}from'./chunk-EXZOV2YR.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-WIU6CVKP.mjs';import'./chunk-XTHATUY4.mjs';import'./chunk-W7J4LU42.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-AAJAKVQY.mjs';import {i}from'./chunk-UNBJ6Y7L.mjs';import'./chunk-OEPPJZFZ.mjs';import'./chunk-4GMKI6FY.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-YZOAYITQ.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import'./chunk-R3MXNCX5.mjs';import'./chunk-X6ISXWBN.mjs';import'commander';import {z as z$1}from'zod';import U from'path';import {getProxyConfig}from'@easbot/utils';z$1.object({agentId:z$1.string(),agentType:z$1.string(),directory:z$1.string(),timestamp:z$1.number()});z$1.object({agentId:z$1.string(),reason:z$1.enum(["normal","error","timeout"]),timestamp:z$1.number()});z$1.object({agentId:z$1.string(),status:z$1.enum(["idle","busy","error"]),timestamp:z$1.number()});z$1.object({agentId:z$1.string(),error:z$1.string(),context:z$1.record(z$1.string(),z$1.any()).optional(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string(),update:z$1.record(z$1.string(),z$1.any()),timestamp:z$1.number()});z$1.object({requestId:z$1.string(),sessionId:z$1.string(),permission:z$1.string(),tool:z$1.object({callID:z$1.string().optional()}).optional(),metadata:z$1.record(z$1.string(),z$1.any()).optional(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string(),inputTokens:z$1.number(),outputTokens:z$1.number(),totalTokens:z$1.number(),model:z$1.string(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string(),messageId:z$1.string(),messageType:z$1.enum(["text","tool_call","tool_result","system"]),content:z$1.any(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string(),messageId:z$1.string(),messageType:z$1.enum(["text","tool_call","tool_result","system"]),response:z$1.any(),duration:z$1.number(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string(),messageId:z$1.string(),toolName:z$1.string(),input:z$1.record(z$1.string(),z$1.any()),output:z$1.any().optional(),status:z$1.enum(["started","completed","failed"]),error:z$1.string().optional(),duration:z$1.number().optional(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string().optional(),errorType:z$1.enum(["connection","timeout","validation","runtime","unknown"]),code:z$1.string().optional(),message:z$1.string(),stack:z$1.string().optional(),context:z$1.record(z$1.string(),z$1.any()).optional(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string(),previousState:z$1.enum(["idle","active","paused","terminated"]),newState:z$1.enum(["idle","active","paused","terminated"]),reason:z$1.string().optional(),timestamp:z$1.number()});a.create({service:"event-subscription-flow"});var r=a.create({service:"cli-command-acp"});async function B(c,t){let o=await ob.getACPServerConfig();r.debug("Merging ACP configuration",{baseConfig:{channel:o.channel,port:o.port,hostname:o.hostname,timeout:o.timeout},cliOptions:{channel:t.channel,port:t.port,hostname:t.hostname,timeout:t.timeout}});let s={};if(t.channel!==void 0){let l=t.channel.toLowerCase();Object.values(da).includes(l)?(s.channel=l,r.debug("CLI override: channel",{value:s.channel})):r.warn("Invalid channel type from command line",{value:t.channel});}if(t.port!==void 0&&(t.port>0&&t.port<=65535?(s.port=t.port,r.debug("CLI override: port",{value:s.port})):r.warn("Invalid port from command line",{value:t.port})),t.hostname!==void 0&&(s.hostname=t.hostname,r.debug("CLI override: hostname",{value:s.hostname})),t.timeout!==void 0&&(t.timeout>0?(s.timeout=t.timeout,r.debug("CLI override: timeout",{value:s.timeout})):r.warn("Invalid timeout from command line",{value:t.timeout})),t.hostname!==void 0||t.port!==void 0){let l=t.hostname??o.hostname??"127.0.0.1",a=t.port??o.port??3e3;o.ws&&(s.ws={...o.ws,url:`ws://${l}:${a}`}),o.http&&(s.http={...o.http,baseUrl:`http://${l}:${a}`}),r.debug("CLI override: ws.url and http.baseUrl updated",{hostname:t.hostname,port:t.port,wsUrl:s.ws?.url,httpBaseUrl:s.http?.baseUrl});}t.timeout!==void 0&&(s.ws||s.http)&&(s.ws&&(s.ws.timeout=t.timeout),s.http&&(s.http.timeout=t.timeout),r.debug("CLI override: ws.timeout and http.timeout updated",{timeout:t.timeout}));let p={...o,...s};return r.debug("Merged ACP configuration",{channel:p.channel,port:p.port,hostname:p.hostname,timeout:p.timeout}),p}async function D(c$1,t,o){r.info("Starting ACP service",{channel:t.channel,port:t.port,hostname:t.hostname,debug:o.config.debug}),await wa.init({directory:c$1,printLogs:o.config.print_logs,logLevel:o.config.log_level,channel:t.channel});await wa.ensureACPService(t);console.log(""),console.log(d(i("acp.server.started"))),console.log(k(60)),console.log(i$1(i("acp.field.directory"),c$1,15)),console.log(i$1(i("acp.field.worktree"),Na.project.worktree||"N/A",15)),console.log(i$1(i("acp.field.channel"),t.channel,15));let p=b();switch(t.channel){case "websocket":{let a,d="/";if(t.ws?.url)try{let u=new URL(t.ws.url),m=u.port||"3000",$=u.hostname;d=u.pathname||"/",a=`ws://${$}:${m}${d==="/"?"":d}`;}catch{a=t.ws.url;}else a=`ws://${t.hostname}:${t.port}`;console.log(i$1(i("acp.field.ws_url"),a,15)),console.log(i$1(i("acp.field.ws_path"),d,15)),t.ws?(console.log(h(i("acp.websocket.config"))),console.log(i$1(i("acp.field.timeout"),`${t.ws.timeout??t.timeout}ms`,15)),console.log(i$1(i("acp.field.batch_size"),`${t.ws.batchSize??10}`,15)),console.log(i$1(i("acp.field.batch_interval"),`${t.ws.batchInterval??50}ms`,15)),console.log(i$1(i("acp.field.heartbeat"),`${t.ws.heartbeatInterval??3e4}ms`,15))):console.log(i$1(i("acp.field.timeout"),`${t.timeout}ms`,15));break}case "http":t.http?.baseUrl?console.log(i$1(i("acp.field.base_url"),t.http.baseUrl,15)):console.log(i$1(i("acp.field.host"),`${t.hostname}:${t.port}`,15)),t.http?.timeout?console.log(i$1(i("acp.field.timeout"),`${t.http.timeout}ms`,15)):console.log(i$1(i("acp.field.timeout"),`${t.timeout}ms`,15));break;case "stdio":console.log(i$1(i("acp.field.mode"),i("acp.mode.stdio"),15)),console.log(i$1(i("acp.field.protocol"),i("acp.protocol"),15)),console.log(i$1(i("acp.field.timeout"),`${t.timeout}ms`,15));break;default:console.log(i$1(i("acp.field.host"),`${t.hostname}:${t.port}`,15)),console.log(i$1(i("acp.field.timeout"),`${t.timeout}ms`,15));}console.log(i$1(i("acp.field.debug"),o.config.debug?c(p,a$3.success,i("common.enabled")):c(p,a$3.muted,i("common.disabled")),15));let l=getProxyConfig();if(l.enabled){let a=l.https||l.http||"configured";console.log(i$1(i("acp.field.proxy"),a,15));}console.log(k(60)),console.log(""),r.info("ACPServer started successfully"),z();}function z(){let c=process.env.EASBOT_RUN_MODE==="ephemeral"||!process.stdin.isTTY&&process.env.EASBOT_RUN_MODE!=="persistent",t=async o=>{r.debug(`Received ${o}, shutting down...`),c||console.log(`
1
+ import {a as a$1}from'./chunk-LAHYVX5K.mjs';import {a as a$2}from'./chunk-HLW2EHPQ.mjs';import'./chunk-VII7JKGB.mjs';import {g,e,d,k,i as i$1,b,h,c,a as a$3}from'./chunk-M3K32WJV.mjs';import {ob,da,wa,Na}from'./chunk-QGDQQX6A.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-SGMMA2KV.mjs';import'./chunk-DPHR5M4T.mjs';import'./chunk-JPLRWRX5.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-AAJAKVQY.mjs';import {i}from'./chunk-UNBJ6Y7L.mjs';import'./chunk-OI3BLNYR.mjs';import'./chunk-F6HODP64.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-BJ3DFGMC.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import'./chunk-KKGI52AW.mjs';import'./chunk-X6ISXWBN.mjs';import'commander';import {z as z$1}from'zod';import U from'path';import {getProxyConfig}from'@easbot/utils';z$1.object({agentId:z$1.string(),agentType:z$1.string(),directory:z$1.string(),timestamp:z$1.number()});z$1.object({agentId:z$1.string(),reason:z$1.enum(["normal","error","timeout"]),timestamp:z$1.number()});z$1.object({agentId:z$1.string(),status:z$1.enum(["idle","busy","error"]),timestamp:z$1.number()});z$1.object({agentId:z$1.string(),error:z$1.string(),context:z$1.record(z$1.string(),z$1.any()).optional(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string(),update:z$1.record(z$1.string(),z$1.any()),timestamp:z$1.number()});z$1.object({requestId:z$1.string(),sessionId:z$1.string(),permission:z$1.string(),tool:z$1.object({callID:z$1.string().optional()}).optional(),metadata:z$1.record(z$1.string(),z$1.any()).optional(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string(),inputTokens:z$1.number(),outputTokens:z$1.number(),totalTokens:z$1.number(),model:z$1.string(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string(),messageId:z$1.string(),messageType:z$1.enum(["text","tool_call","tool_result","system"]),content:z$1.any(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string(),messageId:z$1.string(),messageType:z$1.enum(["text","tool_call","tool_result","system"]),response:z$1.any(),duration:z$1.number(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string(),messageId:z$1.string(),toolName:z$1.string(),input:z$1.record(z$1.string(),z$1.any()),output:z$1.any().optional(),status:z$1.enum(["started","completed","failed"]),error:z$1.string().optional(),duration:z$1.number().optional(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string().optional(),errorType:z$1.enum(["connection","timeout","validation","runtime","unknown"]),code:z$1.string().optional(),message:z$1.string(),stack:z$1.string().optional(),context:z$1.record(z$1.string(),z$1.any()).optional(),timestamp:z$1.number()});z$1.object({sessionId:z$1.string(),previousState:z$1.enum(["idle","active","paused","terminated"]),newState:z$1.enum(["idle","active","paused","terminated"]),reason:z$1.string().optional(),timestamp:z$1.number()});a.create({service:"event-subscription-flow"});var r=a.create({service:"cli-command-acp"});async function B(c,t){let o=await ob.getACPServerConfig();r.debug("Merging ACP configuration",{baseConfig:{channel:o.channel,port:o.port,hostname:o.hostname,timeout:o.timeout},cliOptions:{channel:t.channel,port:t.port,hostname:t.hostname,timeout:t.timeout}});let s={};if(t.channel!==void 0){let l=t.channel.toLowerCase();Object.values(da).includes(l)?(s.channel=l,r.debug("CLI override: channel",{value:s.channel})):r.warn("Invalid channel type from command line",{value:t.channel});}if(t.port!==void 0&&(t.port>0&&t.port<=65535?(s.port=t.port,r.debug("CLI override: port",{value:s.port})):r.warn("Invalid port from command line",{value:t.port})),t.hostname!==void 0&&(s.hostname=t.hostname,r.debug("CLI override: hostname",{value:s.hostname})),t.timeout!==void 0&&(t.timeout>0?(s.timeout=t.timeout,r.debug("CLI override: timeout",{value:s.timeout})):r.warn("Invalid timeout from command line",{value:t.timeout})),t.hostname!==void 0||t.port!==void 0){let l=t.hostname??o.hostname??"127.0.0.1",a=t.port??o.port??3e3;o.ws&&(s.ws={...o.ws,url:`ws://${l}:${a}`}),o.http&&(s.http={...o.http,baseUrl:`http://${l}:${a}`}),r.debug("CLI override: ws.url and http.baseUrl updated",{hostname:t.hostname,port:t.port,wsUrl:s.ws?.url,httpBaseUrl:s.http?.baseUrl});}t.timeout!==void 0&&(s.ws||s.http)&&(s.ws&&(s.ws.timeout=t.timeout),s.http&&(s.http.timeout=t.timeout),r.debug("CLI override: ws.timeout and http.timeout updated",{timeout:t.timeout}));let p={...o,...s};return r.debug("Merged ACP configuration",{channel:p.channel,port:p.port,hostname:p.hostname,timeout:p.timeout}),p}async function D(c$1,t,o){r.info("Starting ACP service",{channel:t.channel,port:t.port,hostname:t.hostname,debug:o.config.debug}),await wa.init({directory:c$1,printLogs:o.config.print_logs,logLevel:o.config.log_level,channel:t.channel});await wa.ensureACPService(t);console.log(""),console.log(d(i("acp.server.started"))),console.log(k(60)),console.log(i$1(i("acp.field.directory"),c$1,15)),console.log(i$1(i("acp.field.worktree"),Na.project.worktree||"N/A",15)),console.log(i$1(i("acp.field.channel"),t.channel,15));let p=b();switch(t.channel){case "websocket":{let a,d="/";if(t.ws?.url)try{let u=new URL(t.ws.url),m=u.port||"3000",$=u.hostname;d=u.pathname||"/",a=`ws://${$}:${m}${d==="/"?"":d}`;}catch{a=t.ws.url;}else a=`ws://${t.hostname}:${t.port}`;console.log(i$1(i("acp.field.ws_url"),a,15)),console.log(i$1(i("acp.field.ws_path"),d,15)),t.ws?(console.log(h(i("acp.websocket.config"))),console.log(i$1(i("acp.field.timeout"),`${t.ws.timeout??t.timeout}ms`,15)),console.log(i$1(i("acp.field.batch_size"),`${t.ws.batchSize??10}`,15)),console.log(i$1(i("acp.field.batch_interval"),`${t.ws.batchInterval??50}ms`,15)),console.log(i$1(i("acp.field.heartbeat"),`${t.ws.heartbeatInterval??3e4}ms`,15))):console.log(i$1(i("acp.field.timeout"),`${t.timeout}ms`,15));break}case "http":t.http?.baseUrl?console.log(i$1(i("acp.field.base_url"),t.http.baseUrl,15)):console.log(i$1(i("acp.field.host"),`${t.hostname}:${t.port}`,15)),t.http?.timeout?console.log(i$1(i("acp.field.timeout"),`${t.http.timeout}ms`,15)):console.log(i$1(i("acp.field.timeout"),`${t.timeout}ms`,15));break;case "stdio":console.log(i$1(i("acp.field.mode"),i("acp.mode.stdio"),15)),console.log(i$1(i("acp.field.protocol"),i("acp.protocol"),15)),console.log(i$1(i("acp.field.timeout"),`${t.timeout}ms`,15));break;default:console.log(i$1(i("acp.field.host"),`${t.hostname}:${t.port}`,15)),console.log(i$1(i("acp.field.timeout"),`${t.timeout}ms`,15));}console.log(i$1(i("acp.field.debug"),o.config.debug?c(p,a$3.success,i("common.enabled")):c(p,a$3.muted,i("common.disabled")),15));let l=getProxyConfig();if(l.enabled){let a=l.https||l.http||"configured";console.log(i$1(i("acp.field.proxy"),a,15));}console.log(k(60)),console.log(""),r.info("ACPServer started successfully"),z();}function z(){let c=process.env.EASBOT_RUN_MODE==="ephemeral"||!process.stdin.isTTY&&process.env.EASBOT_RUN_MODE!=="persistent",t=async o=>{r.debug(`Received ${o}, shutting down...`),c||console.log(`
2
2
  ${i("acp.shutdown.received",{vars:{signal:o}})}`);try{await wa.destroy(),r.debug("EasbotAdapter state destroyed"),c||console.log(d(i("acp.shutdown.completed")));}catch(s){r.error("Error during shutdown",{error:s instanceof Error?s.message:String(s)});}c?process.kill(process.pid,"SIGKILL"):process.exit(0);};process.on("SIGINT",()=>{t("SIGINT").catch(console.error);}),process.on("SIGTERM",()=>{t("SIGTERM").catch(console.error);}),process.stdout.on("error",o=>{(o.code==="EPIPE"||o.code==="EIO")&&(r.info("stdout pipe broken, exiting"),t("stdout-broken").catch(()=>{c?process.kill(process.pid,"SIGKILL"):process.exit(0);}));});}async function O(c,t,o){r.debug("ACP command executed",{options:t});let s=o?.config?.debug??false,p=o?.config?.print_logs??false,l=o?.config?.log_level??"INFO";r.debug("Global options from context",{debug:o?.config?.debug,print_logs:o?.config?.print_logs,log_level:o?.config?.log_level,isDebug:s,printLogs:p,logLevel:l});try{let a=o.config.directory?U.resolve(o.config.directory):process.cwd();r.debug("Working directory resolved",{directory:a});let d=a$1(a);if(!d.valid)throw r.error("Working directory validation failed",{directory:a,error:d.error}),new Error(`Invalid working directory: ${d.error}`);let u=d.normalizedPath;r.debug("Working directory validated",{validatedDirectory:u}),console.log(g(i("acp.directory.resolved",{vars:{cwd:u}}))),await a$2(u,async()=>{let m=await B(u,t);if(r.debug("ACP server configuration",{channel:m.channel,port:m.port,hostname:m.hostname,timeout:m.timeout,enabled:m.enabled}),!m.enabled){r.warn("ACP server is disabled by configuration"),console.log(g(i("acp.disabled")));return}await D(u,m,o),r.info("ACP server started successfully");});}catch(a){r.error("Failed to start ACP server",{error:a instanceof Error?a.message:String(a)}),console.error(e(i("acp.error.start_failed",{vars:{error:a instanceof Error?a.message:String(a)}}))),process.exit(1);}}function We(c,t){let o=c.command("acp").description(i("acp.command.description")).addHelpText("after",`
3
3
 
4
4
  ${i("acp.help.examples")}
@@ -0,0 +1 @@
1
+ export{ha as getACPClientsConfig,ga as getACPServerConfig,ka as getAcpAgentName,ia as getAcpAgentRuntimeConfig,ja as getAcpModelConfig,fa as loadACPConfig}from'./chunk-QGDQQX6A.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-SGMMA2KV.mjs';import'./chunk-DPHR5M4T.mjs';import'./chunk-JPLRWRX5.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-UNBJ6Y7L.mjs';import'./chunk-OI3BLNYR.mjs';import'./chunk-F6HODP64.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-BJ3DFGMC.mjs';import'./chunk-LFYBZHOI.mjs';import'./chunk-KKGI52AW.mjs';import'./chunk-X6ISXWBN.mjs';
@@ -1 +1 @@
1
- import {a as a$3}from'./chunk-TYD2M4SP.mjs';import'./chunk-FXOUIXIL.mjs';import {a as a$2}from'./chunk-3GBVNLVL.mjs';import'./chunk-CQVEAYYW.mjs';import {l,d,e,h,i as i$1,b,c,a as a$4}from'./chunk-M3K32WJV.mjs';import'./chunk-EXZOV2YR.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-WIU6CVKP.mjs';import'./chunk-XTHATUY4.mjs';import'./chunk-W7J4LU42.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-AAJAKVQY.mjs';import {i}from'./chunk-UNBJ6Y7L.mjs';import'./chunk-OEPPJZFZ.mjs';import'./chunk-4GMKI6FY.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-YZOAYITQ.mjs';import {a as a$1}from'./chunk-LFYBZHOI.mjs';import'./chunk-R3MXNCX5.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(i("agent.command.description"));y.command("list").description(i("agent.command.list.description")).action(async()=>{await a$2(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(i("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(i("agent.list.success",{vars:{count:o.length}}))),console.log(""),console.log(a$3({columns:[{key:"name",header:i("agent.table.header.name"),minWidth:15},{key:"mode",header:i("agent.table.header.mode"),minWidth:10},{key:"native",header:i("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?i("common.yes"):i("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(i("agent.list.error"))),process.exit(1);}});}),y.command("info <agent-id>").description(i("agent.command.info.description")).action(async o=>{await a$2(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(i("agent.get.not_found",{vars:{agentId:o}}))),process.exit(1)),console.log(d(i("agent.get.success"))),console.log(""),console.log(h(i("agent.info.heading"))),console.log(""),console.log(i$1(i("agent.info.field.name")+":",n.name)),console.log(i$1(i("agent.info.field.mode")+":","mode"in n&&n.mode||"primary")),console.log(i$1(i("agent.info.field.native")+":","native"in n&&n.native?i("common.yes"):i("common.no"))),"permission"in n&&n.permission){console.log(i$1(i("agent.info.field.permission")+":",""));let t=b();console.log(c(t,a$4.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(i("agent.get.error"))),process.exit(1);}});}),y.command("create").description(i("agent.command.create.description")).requiredOption("--name <name>",i("agent.command.create.option.name")).option("--mode <mode>",i("agent.command.create.option.mode"),"chat").option("--permission <json>",i("agent.command.create.option.permission")).action(async o=>{await a$2(c$1.config.directory,async()=>{try{a.debug("Creating agent",{name:o.name,mode:o.mode}),console.log(h(i("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(i("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(i("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(i("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(i("agent.create.error",{vars:{error:"Agent creation failed"}}))),process.exit(1)),console.log(d(i("agent.create.success",{vars:{name:m.name}}))),console.log(""),console.log(h(i("agent.info.heading"))),console.log(""),console.log(i$1(i("agent.info.field.name")+":",m.name)),console.log(i$1(i("agent.info.field.mode")+":",m.mode??"all")),console.log(i$1(i("agent.info.field.native")+":",m.native?i("common.yes"):i("common.no"))),m.permission){console.log(i$1(i("agent.info.field.permission")+":",""));let l=b();console.log(c(l,a$4.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(i("agent.create.error",{vars:{error:r instanceof Error?r.message:String(r)}}))),process.exit(1);}});});}export{W as registerAgentCommands};
1
+ import {a as a$3}from'./chunk-TYD2M4SP.mjs';import'./chunk-FXOUIXIL.mjs';import {a as a$2}from'./chunk-HLW2EHPQ.mjs';import'./chunk-CQVEAYYW.mjs';import {l,d,e,h,i as i$1,b,c,a as a$4}from'./chunk-M3K32WJV.mjs';import'./chunk-QGDQQX6A.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-SGMMA2KV.mjs';import'./chunk-DPHR5M4T.mjs';import'./chunk-JPLRWRX5.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-AAJAKVQY.mjs';import {i}from'./chunk-UNBJ6Y7L.mjs';import'./chunk-OI3BLNYR.mjs';import'./chunk-F6HODP64.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-BJ3DFGMC.mjs';import {a as a$1}from'./chunk-LFYBZHOI.mjs';import'./chunk-KKGI52AW.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(i("agent.command.description"));y.command("list").description(i("agent.command.list.description")).action(async()=>{await a$2(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(i("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(i("agent.list.success",{vars:{count:o.length}}))),console.log(""),console.log(a$3({columns:[{key:"name",header:i("agent.table.header.name"),minWidth:15},{key:"mode",header:i("agent.table.header.mode"),minWidth:10},{key:"native",header:i("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?i("common.yes"):i("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(i("agent.list.error"))),process.exit(1);}});}),y.command("info <agent-id>").description(i("agent.command.info.description")).action(async o=>{await a$2(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(i("agent.get.not_found",{vars:{agentId:o}}))),process.exit(1)),console.log(d(i("agent.get.success"))),console.log(""),console.log(h(i("agent.info.heading"))),console.log(""),console.log(i$1(i("agent.info.field.name")+":",n.name)),console.log(i$1(i("agent.info.field.mode")+":","mode"in n&&n.mode||"primary")),console.log(i$1(i("agent.info.field.native")+":","native"in n&&n.native?i("common.yes"):i("common.no"))),"permission"in n&&n.permission){console.log(i$1(i("agent.info.field.permission")+":",""));let t=b();console.log(c(t,a$4.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(i("agent.get.error"))),process.exit(1);}});}),y.command("create").description(i("agent.command.create.description")).requiredOption("--name <name>",i("agent.command.create.option.name")).option("--mode <mode>",i("agent.command.create.option.mode"),"chat").option("--permission <json>",i("agent.command.create.option.permission")).action(async o=>{await a$2(c$1.config.directory,async()=>{try{a.debug("Creating agent",{name:o.name,mode:o.mode}),console.log(h(i("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(i("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(i("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(i("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(i("agent.create.error",{vars:{error:"Agent creation failed"}}))),process.exit(1)),console.log(d(i("agent.create.success",{vars:{name:m.name}}))),console.log(""),console.log(h(i("agent.info.heading"))),console.log(""),console.log(i$1(i("agent.info.field.name")+":",m.name)),console.log(i$1(i("agent.info.field.mode")+":",m.mode??"all")),console.log(i$1(i("agent.info.field.native")+":",m.native?i("common.yes"):i("common.no"))),m.permission){console.log(i$1(i("agent.info.field.permission")+":",""));let l=b();console.log(c(l,a$4.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(i("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,xa,k,La}from'./chunk-EXZOV2YR.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-WIU6CVKP.mjs';import'./chunk-XTHATUY4.mjs';import'./chunk-W7J4LU42.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-AAJAKVQY.mjs';import {i}from'./chunk-UNBJ6Y7L.mjs';import'./chunk-OEPPJZFZ.mjs';import'./chunk-4GMKI6FY.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-YZOAYITQ.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import'./chunk-R3MXNCX5.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(i("debug.agent.error.not_found",{vars:{agentName:o,command:basename(process.execPath)}}))),process.exit(1));let a=t,d=await C(a),i$1=await P(a,d);if(e$1.tool){let c=d.find(A=>A.id===e$1.tool);c||(console.error(e(i("debug.agent.tool.error.not_found",{vars:{toolID:e$1.tool,agentName:o}}))),process.exit(1)),i$1[e$1.tool]===false&&(console.error(e(i("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$1};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"}),xa.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(i("debug.agent.tool.params.parse_error",{vars:{jsonError:s,evalError:t}}))}}});if(!e||typeof e!="object"||Array.isArray(e))throw new Error(i("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};
1
+ import {e}from'./chunk-M3K32WJV.mjs';import {j,xa,k,La}from'./chunk-QGDQQX6A.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-SGMMA2KV.mjs';import'./chunk-DPHR5M4T.mjs';import'./chunk-JPLRWRX5.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-AAJAKVQY.mjs';import {i}from'./chunk-UNBJ6Y7L.mjs';import'./chunk-OI3BLNYR.mjs';import'./chunk-F6HODP64.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-BJ3DFGMC.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import'./chunk-KKGI52AW.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(i("debug.agent.error.not_found",{vars:{agentName:o,command:basename(process.execPath)}}))),process.exit(1));let a=t,d=await C(a),i$1=await P(a,d);if(e$1.tool){let c=d.find(A=>A.id===e$1.tool);c||(console.error(e(i("debug.agent.tool.error.not_found",{vars:{toolID:e$1.tool,agentName:o}}))),process.exit(1)),i$1[e$1.tool]===false&&(console.error(e(i("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$1};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"}),xa.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(i("debug.agent.tool.params.parse_error",{vars:{jsonError:s,evalError:t}}))}}});if(!e||typeof e!="object"||Array.isArray(e))throw new Error(i("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-OTJQZ7WY.mjs';import'./chunk-CQVEAYYW.mjs';import'./chunk-QGDQQX6A.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-SGMMA2KV.mjs';import'./chunk-DPHR5M4T.mjs';import'./chunk-JPLRWRX5.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-UNBJ6Y7L.mjs';import'./chunk-OI3BLNYR.mjs';import'./chunk-F6HODP64.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-BJ3DFGMC.mjs';import'./chunk-LFYBZHOI.mjs';import'./chunk-KKGI52AW.mjs';import'./chunk-X6ISXWBN.mjs';
@@ -0,0 +1 @@
1
+ export{a as bootstrap,b as bootstrapProgram}from'./chunk-HLW2EHPQ.mjs';import'./chunk-QGDQQX6A.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-SGMMA2KV.mjs';import'./chunk-DPHR5M4T.mjs';import'./chunk-JPLRWRX5.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-UNBJ6Y7L.mjs';import'./chunk-OI3BLNYR.mjs';import'./chunk-F6HODP64.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-BJ3DFGMC.mjs';import'./chunk-LFYBZHOI.mjs';import'./chunk-KKGI52AW.mjs';import'./chunk-X6ISXWBN.mjs';
@@ -1,4 +1,4 @@
1
- import {b as b$1}from'./chunk-HACAZH7T.mjs';import {a as a$1}from'./chunk-XPF2LJT2.mjs';import {Na,ua}from'./chunk-EXZOV2YR.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-WIU6CVKP.mjs';import'./chunk-XTHATUY4.mjs';import'./chunk-W7J4LU42.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-AAJAKVQY.mjs';import {i}from'./chunk-UNBJ6Y7L.mjs';import'./chunk-OEPPJZFZ.mjs';import {b as b$2}from'./chunk-4GMKI6FY.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-YZOAYITQ.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import'./chunk-R3MXNCX5.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(t){try{let o=await O.readFile(t,"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:t,error:o.code});}else b.error("Failed to parse config file",{filePath:t,error:o instanceof Error?o.message:String(o)});return {}}}function T(...t){let o={};for(let n of t)for(let[e,i]of Object.entries(n))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(t={}){let{cwd:o=process.cwd(),customConfigPath:n}=t,e=k();if(t.sdk)try{let{data:i}=await t.sdk.config.get({});i&&(e=i);}catch{}if(n){let i=await N(n);Object.keys(i).length>0&&(e=T(e,i));}return e.directory=o,e}async function A(t={}){let o=t.cwd||process.cwd(),n=t.root||Na.worktree,e=ua({directory:o}),i=await w({cwd:o,root:n,sdk:e,customConfigPath:t.customConfigPath});return {programVersion:b$2.getVersion(),channelOptions:["stdio","http","ws"],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:t,ctx:o})=>{(await import('./tui-SW7BOEMQ.mjs')).registerTuiCommand(t,o);}},{commands:[{name:"run",description:"\u8FD0\u884C\u5355\u6B21\u5BF9\u8BDD",hasSubcommands:false}],register:async({program:t,ctx:o})=>{(await import('./run-BD36UNJF.mjs')).registerRunCommand(t,o);}},{commands:[{name:"generate",description:"\u751F\u6210 OpenAPI \u89C4\u8303",hasSubcommands:false}],register:async({program:t,ctx:o})=>{(await import('./generate-NUX2GBYY.mjs')).registerGenerateCommand(t,o);}},{commands:[{name:"agent",description:"Agent \u7BA1\u7406\u547D\u4EE4",hasSubcommands:true}],register:async({program:t,ctx:o})=>{(await import('./agent-EXH3EXNP.mjs')).registerAgentCommands(t,o);}},{commands:[{name:"session",description:"\u4F1A\u8BDD\u7BA1\u7406\u547D\u4EE4",hasSubcommands:true}],register:async({program:t,ctx:o})=>{let{registerSessionCommands:n}=await import('./session-R3U252OC.mjs');n(t,o);}},{commands:[{name:"mcp",description:"MCP \u670D\u52A1\u5668\u7BA1\u7406",hasSubcommands:true}],register:async({program:t,ctx:o})=>{(await import('./mcp-BR3CYNJB.mjs')).registerMcpCommands(t,o);}},{commands:[{name:"acp",description:"ACP Agent \u901A\u4FE1\u9002\u914D\u5668\u547D\u4EE4",hasSubcommands:true}],register:async({program:t,ctx:o})=>{(await import('./acp-VDKINAWR.mjs')).registerAcpCommand(t,o);}},{commands:[{name:"debug",description:"\u8C03\u8BD5\u548C\u8BCA\u65AD\u5DE5\u5177",hasSubcommands:true}],register:async({program:t,ctx:o})=>{(await import('./debug-4SGU2Y2Q.mjs')).registerDebugCommands(t,o);}},{commands:[{name:"gateway",description:"Gateway \u670D\u52A1\u7BA1\u7406\u547D\u4EE4",hasSubcommands:true}],register:async({program:t,ctx:o})=>{(await import('./gateway-SSDLJMXI.mjs')).registerGatewayCommand(t,o);}},{commands:[{name:"auth",description:"Provider \u51ED\u636E\u7BA1\u7406",hasSubcommands:true}],register:async({program:t,ctx:o})=>{(await import('./auth-3CQMCCCN.mjs')).registerAuthCommand(t,o);}},{commands:[{name:"export",description:"\u5BFC\u51FA\u4F1A\u8BDD\u6570\u636E",hasSubcommands:false}],register:async({program:t,ctx:o})=>{(await import('./export-PNCMUMDM.mjs')).registerExportCommand(t,o);}},{commands:[{name:"github",description:"GitHub Agent \u7BA1\u7406",hasSubcommands:true}],register:async({program:t,ctx:o})=>{(await import('./github-W2LFG2G6.mjs')).registerGithubCommand(t,o);}},{commands:[{name:"import",description:"\u5BFC\u5165\u4F1A\u8BDD\u6570\u636E",hasSubcommands:false}],register:async({program:t,ctx:o})=>{(await import('./import-NFHPQNA7.mjs')).registerImportCommand(t,o);}},{commands:[{name:"pr",description:"PR \u68C0\u51FA\u548C\u4F1A\u8BDD\u5BFC\u5165",hasSubcommands:false}],register:async({program:t,ctx:o})=>{(await import('./pr-4X42BEJT.mjs')).registerPrCommand(t,o);}},{commands:[{name:"stats",description:"Token \u4F7F\u7528\u91CF\u548C\u6210\u672C\u7EDF\u8BA1",hasSubcommands:false}],register:async({program:t,ctx:o})=>{(await import('./stats-QSNMP7FP.mjs')).registerStatsCommand(t,o);}},{commands:[{name:"update",description:"\u66F4\u65B0 Easbot CLI",hasSubcommands:false}],register:async({program:t,ctx:o})=>{(await import('./update-424STNM5.mjs')).registerUpdateCommand(t,o);}}];async function B(t,o,n=process.argv){for(let e of j)await e.register({program:t,ctx:o,argv:n});}async function v(t,o,n=process.argv){await B(t,o,n);}function L(t,o){t.name(i("program.name")).description(i("program.description")),t.option("--cwd <directory>",i("program.option.cwd"),process.cwd()),t.option("--config <path>",i("program.option.config")),t.option("--print-logs",i("program.option.print_logs")),t.option("--log-level <level>",i("program.option.log_level"),"INFO"),t.option("--debug",i("program.option.debug")),t.helpOption("-h, --help",i("program.help.option")),t.helpCommand("help [command]",i("program.help.command")),t.configureHelp({sortSubcommands:true,sortOptions:true,optionTerm:n=>n.flags,subcommandTerm:n=>n.name()}),t.configureOutput({writeOut:n=>{process.stdout.write(E(n));},writeErr:n=>{process.stderr.write(E(n));},outputError:(n,e)=>{e(n);}}),t.addHelpText("afterAll",({command:n})=>n!==t?"":`
1
+ import {b as b$1}from'./chunk-352N6IPS.mjs';import {a as a$1}from'./chunk-XPF2LJT2.mjs';import {Na,ua}from'./chunk-QGDQQX6A.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-SGMMA2KV.mjs';import'./chunk-DPHR5M4T.mjs';import'./chunk-JPLRWRX5.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-AAJAKVQY.mjs';import {i}from'./chunk-UNBJ6Y7L.mjs';import'./chunk-OI3BLNYR.mjs';import {b as b$2}from'./chunk-F6HODP64.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-BJ3DFGMC.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import'./chunk-KKGI52AW.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(t){try{let o=await O.readFile(t,"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:t,error:o.code});}else b.error("Failed to parse config file",{filePath:t,error:o instanceof Error?o.message:String(o)});return {}}}function T(...t){let o={};for(let n of t)for(let[e,i]of Object.entries(n))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(t={}){let{cwd:o=process.cwd(),customConfigPath:n}=t,e=k();if(t.sdk)try{let{data:i}=await t.sdk.config.get({});i&&(e=i);}catch{}if(n){let i=await N(n);Object.keys(i).length>0&&(e=T(e,i));}return e.directory=o,e}async function A(t={}){let o=t.cwd||process.cwd(),n=t.root||Na.worktree,e=ua({directory:o}),i=await w({cwd:o,root:n,sdk:e,customConfigPath:t.customConfigPath});return {programVersion:b$2.getVersion(),channelOptions:["stdio","http","ws"],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:t,ctx:o})=>{(await import('./tui-TT6OCQV4.mjs')).registerTuiCommand(t,o);}},{commands:[{name:"run",description:"\u8FD0\u884C\u5355\u6B21\u5BF9\u8BDD",hasSubcommands:false}],register:async({program:t,ctx:o})=>{(await import('./run-URKJ5DUT.mjs')).registerRunCommand(t,o);}},{commands:[{name:"generate",description:"\u751F\u6210 OpenAPI \u89C4\u8303",hasSubcommands:false}],register:async({program:t,ctx:o})=>{(await import('./generate-QC7LMP4L.mjs')).registerGenerateCommand(t,o);}},{commands:[{name:"agent",description:"Agent \u7BA1\u7406\u547D\u4EE4",hasSubcommands:true}],register:async({program:t,ctx:o})=>{(await import('./agent-3TY5COL7.mjs')).registerAgentCommands(t,o);}},{commands:[{name:"session",description:"\u4F1A\u8BDD\u7BA1\u7406\u547D\u4EE4",hasSubcommands:true}],register:async({program:t,ctx:o})=>{let{registerSessionCommands:n}=await import('./session-MFCBHZIP.mjs');n(t,o);}},{commands:[{name:"mcp",description:"MCP \u670D\u52A1\u5668\u7BA1\u7406",hasSubcommands:true}],register:async({program:t,ctx:o})=>{(await import('./mcp-HYAPWABM.mjs')).registerMcpCommands(t,o);}},{commands:[{name:"acp",description:"ACP Agent \u901A\u4FE1\u9002\u914D\u5668\u547D\u4EE4",hasSubcommands:true}],register:async({program:t,ctx:o})=>{(await import('./acp-AARVJTBA.mjs')).registerAcpCommand(t,o);}},{commands:[{name:"debug",description:"\u8C03\u8BD5\u548C\u8BCA\u65AD\u5DE5\u5177",hasSubcommands:true}],register:async({program:t,ctx:o})=>{(await import('./debug-C7S7OM6A.mjs')).registerDebugCommands(t,o);}},{commands:[{name:"gateway",description:"Gateway \u670D\u52A1\u7BA1\u7406\u547D\u4EE4",hasSubcommands:true}],register:async({program:t,ctx:o})=>{(await import('./gateway-GHZM2PJR.mjs')).registerGatewayCommand(t,o);}},{commands:[{name:"auth",description:"Provider \u51ED\u636E\u7BA1\u7406",hasSubcommands:true}],register:async({program:t,ctx:o})=>{(await import('./auth-3CQMCCCN.mjs')).registerAuthCommand(t,o);}},{commands:[{name:"export",description:"\u5BFC\u51FA\u4F1A\u8BDD\u6570\u636E",hasSubcommands:false}],register:async({program:t,ctx:o})=>{(await import('./export-PNCMUMDM.mjs')).registerExportCommand(t,o);}},{commands:[{name:"github",description:"GitHub Agent \u7BA1\u7406",hasSubcommands:true}],register:async({program:t,ctx:o})=>{(await import('./github-FO4EEXXO.mjs')).registerGithubCommand(t,o);}},{commands:[{name:"import",description:"\u5BFC\u5165\u4F1A\u8BDD\u6570\u636E",hasSubcommands:false}],register:async({program:t,ctx:o})=>{(await import('./import-YZ6DALJH.mjs')).registerImportCommand(t,o);}},{commands:[{name:"pr",description:"PR \u68C0\u51FA\u548C\u4F1A\u8BDD\u5BFC\u5165",hasSubcommands:false}],register:async({program:t,ctx:o})=>{(await import('./pr-HCRWGCWQ.mjs')).registerPrCommand(t,o);}},{commands:[{name:"stats",description:"Token \u4F7F\u7528\u91CF\u548C\u6210\u672C\u7EDF\u8BA1",hasSubcommands:false}],register:async({program:t,ctx:o})=>{(await import('./stats-QSNMP7FP.mjs')).registerStatsCommand(t,o);}},{commands:[{name:"update",description:"\u66F4\u65B0 Easbot CLI",hasSubcommands:false}],register:async({program:t,ctx:o})=>{(await import('./update-VBHR764I.mjs')).registerUpdateCommand(t,o);}}];async function B(t,o,n=process.argv){for(let e of j)await e.register({program:t,ctx:o,argv:n});}async function v(t,o,n=process.argv){await B(t,o,n);}function L(t,o){t.name(i("program.name")).description(i("program.description")),t.option("--cwd <directory>",i("program.option.cwd"),process.cwd()),t.option("--config <path>",i("program.option.config")),t.option("--print-logs",i("program.option.print_logs")),t.option("--log-level <level>",i("program.option.log_level"),"INFO"),t.option("--debug",i("program.option.debug")),t.helpOption("-h, --help",i("program.help.option")),t.helpCommand("help [command]",i("program.help.command")),t.configureHelp({sortSubcommands:true,sortOptions:true,optionTerm:n=>n.flags,subcommandTerm:n=>n.name()}),t.configureOutput({writeOut:n=>{process.stdout.write(E(n));},writeErr:n=>{process.stderr.write(E(n));},outputError:(n,e)=>{e(n);}}),t.addHelpText("afterAll",({command:n})=>n!==t?"":`
2
2
  ${i("program.help.examples")}:
3
3
  easbot # ${i("help.example.tui")}
4
4
  easbot tui --continue # ${i("help.example.tui_continue")}
@@ -0,0 +1 @@
1
+ export{a as Bus}from'./chunk-QGDQQX6A.mjs';import'./chunk-ZBRXNYEM.mjs';import'./chunk-SGMMA2KV.mjs';import'./chunk-DPHR5M4T.mjs';import'./chunk-JPLRWRX5.mjs';import'./chunk-DEZT7DOH.mjs';import'./chunk-2RSIOAZV.mjs';import'./chunk-AAJAKVQY.mjs';import'./chunk-UNBJ6Y7L.mjs';import'./chunk-OI3BLNYR.mjs';import'./chunk-F6HODP64.mjs';import'./chunk-CJTCCLW4.mjs';import'./chunk-BJ3DFGMC.mjs';import'./chunk-LFYBZHOI.mjs';import'./chunk-KKGI52AW.mjs';import'./chunk-X6ISXWBN.mjs';
@@ -1 +1 @@
1
- import {Na}from'./chunk-EXZOV2YR.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import {a as a$1}from'./chunk-R3MXNCX5.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
+ import {Na}from'./chunk-QGDQQX6A.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import {a as a$1}from'./chunk-KKGI52AW.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 {a}from'./chunk-LFYBZHOI.mjs';import {a as a$1}from'./chunk-R3MXNCX5.mjs';import {c,d}from'./chunk-X6ISXWBN.mjs';import s from'path';import a$2 from'fs/promises';import {NamedError,lazy,Filesystem,PKG,$ as $$1,Lock}from'@easbot/utils';import E from'zod';import {glob}from'glob';var $;(J=>{let d$1=a.create({service:"storage"});J.NotFoundError=NamedError.create("NotFoundError",E.object({message:E.string()}));let O=[async n=>{let o=s.resolve(n,"../project");if(await Filesystem.isDir(o))for await(let i of new PKG.Glob("*").scan({cwd:o})){d$1.info(`migrating project ${i}`);let t=i,r=s.join(o,i),e="/";if(t!=="global"){let g=await glob("storage/session/message/*/*.json",{cwd:s.join(o,i),absolute:true});for(let c of g)if(e=(await a$2.readFile(c,"utf-8").then(m=>JSON.parse(m))).path?.root??"",e)break;if(!e||!await Filesystem.isDir(e))continue;let[u]=await $$1`git rev-list --max-parents=0 --all`.quiet().nothrow().cwd(e).text().then(c=>c.split(`
1
+ import {a}from'./chunk-LFYBZHOI.mjs';import {a as a$1}from'./chunk-KKGI52AW.mjs';import {c,d}from'./chunk-X6ISXWBN.mjs';import s from'path';import a$2 from'fs/promises';import {NamedError,lazy,Filesystem,PKG,$ as $$1,Lock}from'@easbot/utils';import E from'zod';import {glob}from'glob';var $;(J=>{let d$1=a.create({service:"storage"});J.NotFoundError=NamedError.create("NotFoundError",E.object({message:E.string()}));let O=[async n=>{let o=s.resolve(n,"../project");if(await Filesystem.isDir(o))for await(let i of new PKG.Glob("*").scan({cwd:o})){d$1.info(`migrating project ${i}`);let t=i,r=s.join(o,i),e="/";if(t!=="global"){let g=await glob("storage/session/message/*/*.json",{cwd:s.join(o,i),absolute:true});for(let c of g)if(e=(await a$2.readFile(c,"utf-8").then(m=>JSON.parse(m))).path?.root??"",e)break;if(!e||!await Filesystem.isDir(e))continue;let[u]=await $$1`git rev-list --max-parents=0 --all`.quiet().nothrow().cwd(e).text().then(c=>c.split(`
2
2
  `).filter(Boolean).map(w=>w.trim()).toSorted());if(!u)continue;t=u,await PKG.write(s.join(n,"project",t+".json"),JSON.stringify({id:u,vcs:"git",worktree:e,time:{created:Date.now(),initialized:Date.now()}})),d$1.info(`migrating sessions for project ${t}`);for await(let c of new PKG.Glob("storage/session/info/*.json").scan({cwd:r,absolute:true})){let w=s.join(n,"session",t,s.basename(c));d$1.info("copying",{sessionFile:c,dest:w});let m=await a$2.readFile(c,"utf-8").then(p=>JSON.parse(p));await a$2.writeFile(w,JSON.stringify(m)),d$1.info(`migrating messages for session ${m.id}`);for await(let p of new PKG.Glob(`storage/session/message/${m.id}/*.json`).scan({cwd:r,absolute:true})){let S=s.join(n,"message",m.id,s.basename(p));d$1.info("copying",{msgFile:p,dest:S});let h=await a$2.readFile(p,"utf-8").then(j=>JSON.parse(j));await a$2.writeFile(S,JSON.stringify(h)),d$1.info(`migrating parts for message ${h.id}`);for await(let j of new PKG.Glob(`storage/session/part/${m.id}/${h.id}/*.json`).scan({cwd:r,absolute:true})){let T=s.join(n,"part",h.id,s.basename(j)),P=await PKG.file(j).json();d$1.info("copying",{partFile:j,dest:T}),await PKG.write(T,JSON.stringify(P));}}}}}},async n=>{for await(let o of new PKG.Glob("session/*/*.json").scan({cwd:n,absolute:true})){let i=await PKG.file(o).json();if(!i.projectID||!i.summary?.diffs)continue;let{diffs:t}=i.summary;await PKG.write(s.join(n,"session_diff",i.id+".json"),JSON.stringify(t)),await PKG.write(s.join(n,"session",i.projectID,i.id+".json"),JSON.stringify({...i,summary:{additions:t.reduce((r,e)=>r+e.additions,0),deletions:t.reduce((r,e)=>r+e.deletions,0)}}));}}],l=lazy(async()=>{let n=s.join(a$1.Path.data,"storage");await a$2.mkdir(n,{recursive:true});let o=s.join(n,"migration"),i=await a$2.readFile(o,"utf-8").then(t=>parseInt(t,10)).catch(()=>0);for(let t=i;t<O.length;t++){d$1.info("running migration",{index:t});let r=O[t];r&&(await r(n).catch(()=>d$1.error("failed to run migration",{index:t})),await a$2.writeFile(o,(t+1).toString(),"utf-8"));}return {dir:n}});async function M(n){let o=await l().then(t=>t.dir),i=s.join(o,...n)+".json";return y(async()=>{await a$2.unlink(i).catch(()=>{});})}J.remove=M;async function R(n){let o=await l().then(t=>t.dir),i=s.join(o,...n)+".json";return y(async()=>{var e=[];try{let t=c(e,await Lock.read(i));let r=await a$2.readFile(i,"utf-8");return JSON.parse(r)}catch(g){var u=g,c$1=true;}finally{d(e,u,c$1);}})}J.read=R;async function A(n,o){let i=await l().then(r=>r.dir),t=s.join(i,...n)+".json";return y(async()=>{var g=[];try{let r=c(g,await Lock.write(t));let e=await a$2.readFile(t,"utf-8").then(m=>JSON.parse(m));o(e);await a$2.writeFile(t,JSON.stringify(e,null,2),"utf-8");return e}catch(u){var c$1=u,w=true;}finally{d(g,c$1,w);}})}J.update=A;async function B(n,o){let i=await l().then(r=>r.dir),t=s.join(i,...n)+".json";return y(async()=>{var e=[];try{let r=c(e,await Lock.write(t));await a$2.mkdir(s.dirname(t),{recursive:!0});await a$2.writeFile(t,JSON.stringify(o,null,2),"utf-8");}catch(g){var u=g,c$1=true;}finally{d(e,u,c$1);}})}J.write=B;async function y(n){return n().catch(o=>{if(!(o instanceof Error))throw o;let i=o;throw i.code==="ENOENT"?new J.NotFoundError({message:`Resource not found: ${i.path}`}):o})}let k="**/*";async function q(n){let o=await l().then(i=>i.dir);try{let t=(await glob(k,{cwd:s.join(o,...n),nodir:!0})).map(r=>[...n,...r.slice(0,-5).split(s.sep)]);return t.sort(),t}catch{return []}}J.list=q;})($||($={}));export{$ as a};
@@ -1 +1 @@
1
- import {formatLocalISOCompact}from'@easbot/utils';import {CommandMetadataSchema}from'@easbot/plugin';export{CommandMetadataSchema as a}from'@easbot/plugin';async function h(n){let{ConfigMarkdown:t}=await import('./markdown-Z6UXVBNP.mjs'),e=await t.parse(n);return {metadata:CommandMetadataSchema.parse(e.data),content:e.content}}function x(n,t,e="command"){return {name:n.name,description:n.description,agent:n.agent,model:n.model,source:e,scope:n.scope,commandType:n.commandType??"prompt",hints:n.hints??[],hidden:n.hidden??false,execute:async(o,i)=>{let m=w(t,o);return {title:n.name,metadata:{sessionID:i.sessionID},output:m,success:true,parts:[{type:"text",text:m}]}}}}async function D(n,t="command"){let{glob:e}=await import('glob'),{Filesystem:o}=await import('@easbot/utils');if(!await o.isDir(n))return [];let i=await e("*.md",{cwd:n,absolute:true,nodir:true,follow:false,dot:false}),m=[];for(let r of i){let{ConfigMarkdown:d}=await import('./markdown-Z6UXVBNP.mjs'),{Bus:u}=await import('./bus-S6EWJZAJ.mjs'),{Session:p}=await import('./session-27P45HFD.mjs'),{NamedError:C}=await import('@easbot/utils');await d.parse(r).then(a=>{let s=CommandMetadataSchema.parse(a.data),f=x(s,a.content,t);m.push(f);}).catch(a=>{let s=a instanceof Error?a.message:`Failed to load command ${r}`;u.publish(p.Event.Error,{error:new C.Unknown({message:s}).toObject()});});}return m}function g(n){return n instanceof Date?formatLocalISOCompact(n):Array.isArray(n)||n!==null&&typeof n=="object"&&n.constructor===Object?JSON.stringify(n,null,2):String(n)}function w(n,t){return typeof t=="string"?n.replace(/\{\{ARGUMENTS\}\}/gi,t):n.replace(/\{\{(\w+)\}\}/gi,(e,o)=>{let i=o.toUpperCase();if(i==="ARGUMENTS")return JSON.stringify(t);let m=t[o]??t[i];return m===void 0?`{{${o}}}`:g(m)})}function I(n,t){let{init:e,isEnabled:o,...i}=t;return {...i,name:n,isEnabled:o,init:e?async m=>({isEnabled:(await e(m)).isEnabled??(typeof o=="function"?await o():o)}):void 0}}export{h as b,x as c,D as d,w as e,I as f};
1
+ import {formatLocalISOCompact}from'@easbot/utils';import {CommandMetadataSchema}from'@easbot/plugin';export{CommandMetadataSchema as a}from'@easbot/plugin';async function h(n){let{ConfigMarkdown:t}=await import('./markdown-Z6UXVBNP.mjs'),e=await t.parse(n);return {metadata:CommandMetadataSchema.parse(e.data),content:e.content}}function x(n,t,e="command"){return {name:n.name,description:n.description,agent:n.agent,model:n.model,source:e,scope:n.scope,commandType:n.commandType??"prompt",hints:n.hints??[],hidden:n.hidden??false,execute:async(o,i)=>{let m=w(t,o);return {title:n.name,metadata:{sessionID:i.sessionID},output:m,success:true,parts:[{type:"text",text:m}]}}}}async function D(n,t="command"){let{glob:e}=await import('glob'),{Filesystem:o}=await import('@easbot/utils');if(!await o.isDir(n))return [];let i=await e("*.md",{cwd:n,absolute:true,nodir:true,follow:false,dot:false}),m=[];for(let r of i){let{ConfigMarkdown:d}=await import('./markdown-Z6UXVBNP.mjs'),{Bus:u}=await import('./bus-YEQKNKMO.mjs'),{Session:p}=await import('./session-MTKITUFM.mjs'),{NamedError:C}=await import('@easbot/utils');await d.parse(r).then(a=>{let s=CommandMetadataSchema.parse(a.data),f=x(s,a.content,t);m.push(f);}).catch(a=>{let s=a instanceof Error?a.message:`Failed to load command ${r}`;u.publish(p.Event.Error,{error:new C.Unknown({message:s}).toObject()});});}return m}function g(n){return n instanceof Date?formatLocalISOCompact(n):Array.isArray(n)||n!==null&&typeof n=="object"&&n.constructor===Object?JSON.stringify(n,null,2):String(n)}function w(n,t){return typeof t=="string"?n.replace(/\{\{ARGUMENTS\}\}/gi,t):n.replace(/\{\{(\w+)\}\}/gi,(e,o)=>{let i=o.toUpperCase();if(i==="ARGUMENTS")return JSON.stringify(t);let m=t[o]??t[i];return m===void 0?`{{${o}}}`:g(m)})}function I(n,t){let{init:e,isEnabled:o,...i}=t;return {...i,name:n,isEnabled:o,init:e?async m=>({isEnabled:(await e(m)).isEnabled??(typeof o=="function"?await o():o)}):void 0}}export{h as b,x as c,D as d,w as e,I as f};
@@ -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-R3MXNCX5.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-KKGI52AW.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 +1 @@
1
- import {Na,pb}from'./chunk-EXZOV2YR.mjs';import {a}from'./chunk-LFYBZHOI.mjs';var e=a.create({service:"cli-bootstrap"});async function f(o,i){let r=o||process.cwd();try{let{Global:t}=await import('./global-ZK2HE4L2.mjs');await t.init();}catch(t){throw e.error("Failed to initialize Global",{error:t instanceof Error?t.message:String(t)}),new Error(`Global initialization failed: ${t instanceof Error?t.message:String(t)}`)}try{return await Na.provide({directory:r,init:pb,fn:async()=>await i()})}catch(t){throw e.error("Failed to execute in Instance context",{directory:r,error:t instanceof Error?t.message:String(t)}),t}}async function g(o={}){let i=o.directory??process.cwd();try{let{Global:r}=await import('./global-ZK2HE4L2.mjs');await r.init();}catch(r){throw e.error("Failed to initialize Global",{error:r instanceof Error?r.message:String(r)}),new Error(`Global initialization failed: ${r instanceof Error?r.message:String(r)}`)}try{return await Na.provide({directory:i,init:pb,fn:async()=>{let{buildProgram:r}=await import('./build-program-HXXT6DQM.mjs');return await r(o)}})}catch(r){throw e.error("Failed to build program in Instance context",{directory:i,error:r instanceof Error?r.message:String(r)}),r}}export{f as a,g as b};
1
+ import {Na,pb}from'./chunk-QGDQQX6A.mjs';import {a}from'./chunk-LFYBZHOI.mjs';var e=a.create({service:"cli-bootstrap"});async function f(o,i){let r=o||process.cwd();try{let{Global:t}=await import('./global-SGSR543B.mjs');await t.init();}catch(t){throw e.error("Failed to initialize Global",{error:t instanceof Error?t.message:String(t)}),new Error(`Global initialization failed: ${t instanceof Error?t.message:String(t)}`)}try{return await Na.provide({directory:r,init:pb,fn:async()=>await i()})}catch(t){throw e.error("Failed to execute in Instance context",{directory:r,error:t instanceof Error?t.message:String(t)}),t}}async function g(o={}){let i=o.directory??process.cwd();try{let{Global:r}=await import('./global-SGSR543B.mjs');await r.init();}catch(r){throw e.error("Failed to initialize Global",{error:r instanceof Error?r.message:String(r)}),new Error(`Global initialization failed: ${r instanceof Error?r.message:String(r)}`)}try{return await Na.provide({directory:i,init:pb,fn:async()=>{let{buildProgram:r}=await import('./build-program-2H5HVRPR.mjs');return await r(o)}})}catch(r){throw e.error("Failed to build program in Instance context",{directory:i,error:r instanceof Error?r.message:String(r)}),r}}export{f as a,g as b};
@@ -1 +1 @@
1
- import {a as a$1}from'./chunk-YZOAYITQ.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-BJ3DFGMC.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,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.33",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.34",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.25.0","@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,2 +1,2 @@
1
- import {a as a$2,b}from'./chunk-4GMKI6FY.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import {a as a$1}from'./chunk-R3MXNCX5.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-F6HODP64.mjs';import {a}from'./chunk-LFYBZHOI.mjs';import {a as a$1}from'./chunk-KKGI52AW.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};