@wingman-ai/gateway 0.1.0

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 (418) hide show
  1. package/.wingman/agents/README.md +161 -0
  2. package/.wingman/agents/coding/agent.md +147 -0
  3. package/.wingman/agents/coding/implementor.md +56 -0
  4. package/.wingman/agents/main/agent.md +19 -0
  5. package/.wingman/agents/researcher/agent.md +62 -0
  6. package/.wingman/agents/stock-trader/agent.md +223 -0
  7. package/.wingman/agents/stock-trader/chain-curator.md +24 -0
  8. package/.wingman/agents/stock-trader/goal-translator.md +42 -0
  9. package/.wingman/agents/stock-trader/guardrails-veto.md +11 -0
  10. package/.wingman/agents/stock-trader/path-planner.md +23 -0
  11. package/.wingman/agents/stock-trader/regime-analyst.md +15 -0
  12. package/.wingman/agents/stock-trader/risk.md +20 -0
  13. package/.wingman/agents/stock-trader/selection.md +22 -0
  14. package/.wingman/agents/stock-trader/strategy-composer.md +38 -0
  15. package/.wingman/agents/wingman/agent.json +12 -0
  16. package/bin/wingman +7 -0
  17. package/dist/agent/config/agentConfig.cjs +95 -0
  18. package/dist/agent/config/agentConfig.d.ts +187 -0
  19. package/dist/agent/config/agentConfig.js +52 -0
  20. package/dist/agent/config/agentLoader.cjs +242 -0
  21. package/dist/agent/config/agentLoader.d.ts +42 -0
  22. package/dist/agent/config/agentLoader.js +208 -0
  23. package/dist/agent/config/mcpClientManager.cjs +168 -0
  24. package/dist/agent/config/mcpClientManager.d.ts +41 -0
  25. package/dist/agent/config/mcpClientManager.js +134 -0
  26. package/dist/agent/config/modelFactory.cjs +175 -0
  27. package/dist/agent/config/modelFactory.d.ts +33 -0
  28. package/dist/agent/config/modelFactory.js +141 -0
  29. package/dist/agent/config/toolRegistry.cjs +111 -0
  30. package/dist/agent/config/toolRegistry.d.ts +25 -0
  31. package/dist/agent/config/toolRegistry.js +71 -0
  32. package/dist/agent/middleware/additional-messages.cjs +60 -0
  33. package/dist/agent/middleware/additional-messages.d.ts +7 -0
  34. package/dist/agent/middleware/additional-messages.js +26 -0
  35. package/dist/agent/middleware/hooks/executor.cjs +137 -0
  36. package/dist/agent/middleware/hooks/executor.d.ts +52 -0
  37. package/dist/agent/middleware/hooks/executor.js +103 -0
  38. package/dist/agent/middleware/hooks/input-builder.cjs +55 -0
  39. package/dist/agent/middleware/hooks/input-builder.d.ts +15 -0
  40. package/dist/agent/middleware/hooks/input-builder.js +21 -0
  41. package/dist/agent/middleware/hooks/matcher.cjs +59 -0
  42. package/dist/agent/middleware/hooks/matcher.d.ts +27 -0
  43. package/dist/agent/middleware/hooks/matcher.js +22 -0
  44. package/dist/agent/middleware/hooks/merger.cjs +54 -0
  45. package/dist/agent/middleware/hooks/merger.d.ts +18 -0
  46. package/dist/agent/middleware/hooks/merger.js +20 -0
  47. package/dist/agent/middleware/hooks/types.cjs +62 -0
  48. package/dist/agent/middleware/hooks/types.d.ts +82 -0
  49. package/dist/agent/middleware/hooks/types.js +19 -0
  50. package/dist/agent/middleware/hooks.cjs +79 -0
  51. package/dist/agent/middleware/hooks.d.ts +19 -0
  52. package/dist/agent/middleware/hooks.js +45 -0
  53. package/dist/agent/middleware/media-compat.cjs +80 -0
  54. package/dist/agent/middleware/media-compat.d.ts +7 -0
  55. package/dist/agent/middleware/media-compat.js +46 -0
  56. package/dist/agent/tests/agentConfig.test.cjs +132 -0
  57. package/dist/agent/tests/agentConfig.test.d.ts +1 -0
  58. package/dist/agent/tests/agentConfig.test.js +126 -0
  59. package/dist/agent/tests/agentLoader.test.cjs +235 -0
  60. package/dist/agent/tests/agentLoader.test.d.ts +1 -0
  61. package/dist/agent/tests/agentLoader.test.js +229 -0
  62. package/dist/agent/tests/modelFactory.test.cjs +114 -0
  63. package/dist/agent/tests/modelFactory.test.d.ts +1 -0
  64. package/dist/agent/tests/modelFactory.test.js +108 -0
  65. package/dist/agent/tests/test-agent-loader.cjs +33 -0
  66. package/dist/agent/tests/test-agent-loader.d.ts +1 -0
  67. package/dist/agent/tests/test-agent-loader.js +27 -0
  68. package/dist/agent/tests/test-subagent-loading.cjs +99 -0
  69. package/dist/agent/tests/test-subagent-loading.d.ts +1 -0
  70. package/dist/agent/tests/test-subagent-loading.js +93 -0
  71. package/dist/agent/tests/toolRegistry.test.cjs +109 -0
  72. package/dist/agent/tests/toolRegistry.test.d.ts +1 -0
  73. package/dist/agent/tests/toolRegistry.test.js +103 -0
  74. package/dist/agent/tools/code_search.cjs +108 -0
  75. package/dist/agent/tools/code_search.d.ts +24 -0
  76. package/dist/agent/tools/code_search.js +74 -0
  77. package/dist/agent/tools/command_execute.cjs +136 -0
  78. package/dist/agent/tools/command_execute.d.ts +12 -0
  79. package/dist/agent/tools/command_execute.js +99 -0
  80. package/dist/agent/tools/git_status.cjs +126 -0
  81. package/dist/agent/tools/git_status.d.ts +15 -0
  82. package/dist/agent/tools/git_status.js +92 -0
  83. package/dist/agent/tools/internet_search.cjs +93 -0
  84. package/dist/agent/tools/internet_search.d.ts +25 -0
  85. package/dist/agent/tools/internet_search.js +56 -0
  86. package/dist/agent/tools/think.cjs +53 -0
  87. package/dist/agent/tools/think.d.ts +26 -0
  88. package/dist/agent/tools/think.js +16 -0
  89. package/dist/agent/tools/web_crawler.cjs +180 -0
  90. package/dist/agent/tools/web_crawler.d.ts +31 -0
  91. package/dist/agent/tools/web_crawler.js +143 -0
  92. package/dist/agent/utils.cjs +54 -0
  93. package/dist/agent/utils.d.ts +1 -0
  94. package/dist/agent/utils.js +10 -0
  95. package/dist/cli/commands/agent.cjs +169 -0
  96. package/dist/cli/commands/agent.d.ts +15 -0
  97. package/dist/cli/commands/agent.js +125 -0
  98. package/dist/cli/commands/gateway.cjs +601 -0
  99. package/dist/cli/commands/gateway.d.ts +12 -0
  100. package/dist/cli/commands/gateway.js +567 -0
  101. package/dist/cli/commands/init.cjs +681 -0
  102. package/dist/cli/commands/init.d.ts +10 -0
  103. package/dist/cli/commands/init.js +634 -0
  104. package/dist/cli/commands/provider.cjs +208 -0
  105. package/dist/cli/commands/provider.d.ts +5 -0
  106. package/dist/cli/commands/provider.js +174 -0
  107. package/dist/cli/commands/skill.cjs +145 -0
  108. package/dist/cli/commands/skill.d.ts +10 -0
  109. package/dist/cli/commands/skill.js +111 -0
  110. package/dist/cli/config/loader.cjs +143 -0
  111. package/dist/cli/config/loader.d.ts +14 -0
  112. package/dist/cli/config/loader.js +109 -0
  113. package/dist/cli/config/schema.cjs +262 -0
  114. package/dist/cli/config/schema.d.ts +268 -0
  115. package/dist/cli/config/schema.js +213 -0
  116. package/dist/cli/core/agentInvoker.cjs +284 -0
  117. package/dist/cli/core/agentInvoker.d.ts +77 -0
  118. package/dist/cli/core/agentInvoker.js +247 -0
  119. package/dist/cli/core/commandHandler.cjs +257 -0
  120. package/dist/cli/core/commandHandler.d.ts +62 -0
  121. package/dist/cli/core/commandHandler.js +223 -0
  122. package/dist/cli/core/database/bunSqliteAdapter.cjs +87 -0
  123. package/dist/cli/core/database/bunSqliteAdapter.d.ts +34 -0
  124. package/dist/cli/core/database/bunSqliteAdapter.js +53 -0
  125. package/dist/cli/core/loggerBridge.cjs +42 -0
  126. package/dist/cli/core/loggerBridge.d.ts +8 -0
  127. package/dist/cli/core/loggerBridge.js +8 -0
  128. package/dist/cli/core/outputManager.cjs +106 -0
  129. package/dist/cli/core/outputManager.d.ts +43 -0
  130. package/dist/cli/core/outputManager.js +72 -0
  131. package/dist/cli/core/sessionManager.cjs +535 -0
  132. package/dist/cli/core/sessionManager.d.ts +111 -0
  133. package/dist/cli/core/sessionManager.js +486 -0
  134. package/dist/cli/core/streamParser.cjs +328 -0
  135. package/dist/cli/core/streamParser.d.ts +42 -0
  136. package/dist/cli/core/streamParser.js +288 -0
  137. package/dist/cli/index.cjs +211 -0
  138. package/dist/cli/index.d.ts +2 -0
  139. package/dist/cli/index.js +205 -0
  140. package/dist/cli/services/skillRepository.cjs +178 -0
  141. package/dist/cli/services/skillRepository.d.ts +35 -0
  142. package/dist/cli/services/skillRepository.js +144 -0
  143. package/dist/cli/services/skillService.cjs +336 -0
  144. package/dist/cli/services/skillService.d.ts +48 -0
  145. package/dist/cli/services/skillService.js +302 -0
  146. package/dist/cli/types/gateway.cjs +18 -0
  147. package/dist/cli/types/gateway.d.ts +18 -0
  148. package/dist/cli/types/gateway.js +0 -0
  149. package/dist/cli/types/init.cjs +18 -0
  150. package/dist/cli/types/init.d.ts +13 -0
  151. package/dist/cli/types/init.js +0 -0
  152. package/dist/cli/types/provider.cjs +18 -0
  153. package/dist/cli/types/provider.d.ts +9 -0
  154. package/dist/cli/types/provider.js +0 -0
  155. package/dist/cli/types/skill.cjs +18 -0
  156. package/dist/cli/types/skill.d.ts +71 -0
  157. package/dist/cli/types/skill.js +0 -0
  158. package/dist/cli/types.cjs +18 -0
  159. package/dist/cli/types.d.ts +175 -0
  160. package/dist/cli/types.js +0 -0
  161. package/dist/cli/ui/AgentOutput.cjs +82 -0
  162. package/dist/cli/ui/AgentOutput.d.ts +8 -0
  163. package/dist/cli/ui/AgentOutput.js +38 -0
  164. package/dist/cli/ui/App.cjs +285 -0
  165. package/dist/cli/ui/App.d.ts +6 -0
  166. package/dist/cli/ui/App.js +241 -0
  167. package/dist/cli/ui/ErrorDisplay.cjs +65 -0
  168. package/dist/cli/ui/ErrorDisplay.d.ts +8 -0
  169. package/dist/cli/ui/ErrorDisplay.js +21 -0
  170. package/dist/cli/ui/LogDisplay.cjs +74 -0
  171. package/dist/cli/ui/LogDisplay.d.ts +13 -0
  172. package/dist/cli/ui/LogDisplay.js +30 -0
  173. package/dist/cli/ui/SessionListDisplay.cjs +135 -0
  174. package/dist/cli/ui/SessionListDisplay.d.ts +9 -0
  175. package/dist/cli/ui/SessionListDisplay.js +91 -0
  176. package/dist/cli/ui/blockHelpers.cjs +80 -0
  177. package/dist/cli/ui/blockHelpers.d.ts +21 -0
  178. package/dist/cli/ui/blockHelpers.js +40 -0
  179. package/dist/cli/ui/components/ToolCallDisplay.cjs +207 -0
  180. package/dist/cli/ui/components/ToolCallDisplay.d.ts +7 -0
  181. package/dist/cli/ui/components/ToolCallDisplay.js +162 -0
  182. package/dist/cli/ui/components/ToolResultDisplay.cjs +86 -0
  183. package/dist/cli/ui/components/ToolResultDisplay.d.ts +8 -0
  184. package/dist/cli/ui/components/ToolResultDisplay.js +42 -0
  185. package/dist/cli/ui/toolDisplayHelpers.cjs +112 -0
  186. package/dist/cli/ui/toolDisplayHelpers.d.ts +3 -0
  187. package/dist/cli/ui/toolDisplayHelpers.js +72 -0
  188. package/dist/gateway/adapters/discord.cjs +298 -0
  189. package/dist/gateway/adapters/discord.d.ts +42 -0
  190. package/dist/gateway/adapters/discord.js +246 -0
  191. package/dist/gateway/auth.cjs +94 -0
  192. package/dist/gateway/auth.d.ts +36 -0
  193. package/dist/gateway/auth.js +60 -0
  194. package/dist/gateway/broadcast.cjs +131 -0
  195. package/dist/gateway/broadcast.d.ts +76 -0
  196. package/dist/gateway/broadcast.js +97 -0
  197. package/dist/gateway/client.cjs +282 -0
  198. package/dist/gateway/client.d.ts +141 -0
  199. package/dist/gateway/client.js +248 -0
  200. package/dist/gateway/daemon.cjs +195 -0
  201. package/dist/gateway/daemon.d.ts +67 -0
  202. package/dist/gateway/daemon.js +161 -0
  203. package/dist/gateway/discovery/index.cjs +72 -0
  204. package/dist/gateway/discovery/index.d.ts +3 -0
  205. package/dist/gateway/discovery/index.js +3 -0
  206. package/dist/gateway/discovery/mdns.cjs +221 -0
  207. package/dist/gateway/discovery/mdns.d.ts +37 -0
  208. package/dist/gateway/discovery/mdns.js +177 -0
  209. package/dist/gateway/discovery/tailscale.cjs +140 -0
  210. package/dist/gateway/discovery/tailscale.d.ts +31 -0
  211. package/dist/gateway/discovery/tailscale.js +106 -0
  212. package/dist/gateway/discovery/types.cjs +18 -0
  213. package/dist/gateway/discovery/types.d.ts +41 -0
  214. package/dist/gateway/discovery/types.js +0 -0
  215. package/dist/gateway/env.cjs +45 -0
  216. package/dist/gateway/env.d.ts +2 -0
  217. package/dist/gateway/env.js +8 -0
  218. package/dist/gateway/hooks/loader.cjs +137 -0
  219. package/dist/gateway/hooks/loader.d.ts +10 -0
  220. package/dist/gateway/hooks/loader.js +103 -0
  221. package/dist/gateway/hooks/registry.cjs +128 -0
  222. package/dist/gateway/hooks/registry.d.ts +13 -0
  223. package/dist/gateway/hooks/registry.js +94 -0
  224. package/dist/gateway/hooks/types.cjs +58 -0
  225. package/dist/gateway/hooks/types.d.ts +50 -0
  226. package/dist/gateway/hooks/types.js +18 -0
  227. package/dist/gateway/http/agents.cjs +280 -0
  228. package/dist/gateway/http/agents.d.ts +2 -0
  229. package/dist/gateway/http/agents.js +246 -0
  230. package/dist/gateway/http/fs.cjs +81 -0
  231. package/dist/gateway/http/fs.d.ts +2 -0
  232. package/dist/gateway/http/fs.js +47 -0
  233. package/dist/gateway/http/providers.cjs +120 -0
  234. package/dist/gateway/http/providers.d.ts +2 -0
  235. package/dist/gateway/http/providers.js +86 -0
  236. package/dist/gateway/http/routines.cjs +196 -0
  237. package/dist/gateway/http/routines.d.ts +20 -0
  238. package/dist/gateway/http/routines.js +159 -0
  239. package/dist/gateway/http/sessions.cjs +241 -0
  240. package/dist/gateway/http/sessions.d.ts +2 -0
  241. package/dist/gateway/http/sessions.js +207 -0
  242. package/dist/gateway/http/types.cjs +18 -0
  243. package/dist/gateway/http/types.d.ts +25 -0
  244. package/dist/gateway/http/types.js +0 -0
  245. package/dist/gateway/http/voice.cjs +167 -0
  246. package/dist/gateway/http/voice.d.ts +2 -0
  247. package/dist/gateway/http/voice.js +133 -0
  248. package/dist/gateway/http/webhooks.cjs +353 -0
  249. package/dist/gateway/http/webhooks.d.ts +22 -0
  250. package/dist/gateway/http/webhooks.js +313 -0
  251. package/dist/gateway/index.cjs +119 -0
  252. package/dist/gateway/index.d.ts +8 -0
  253. package/dist/gateway/index.js +9 -0
  254. package/dist/gateway/node.cjs +218 -0
  255. package/dist/gateway/node.d.ts +112 -0
  256. package/dist/gateway/node.js +184 -0
  257. package/dist/gateway/router.cjs +85 -0
  258. package/dist/gateway/router.d.ts +9 -0
  259. package/dist/gateway/router.js +51 -0
  260. package/dist/gateway/rpcClient.cjs +152 -0
  261. package/dist/gateway/rpcClient.d.ts +24 -0
  262. package/dist/gateway/rpcClient.js +118 -0
  263. package/dist/gateway/server.cjs +1175 -0
  264. package/dist/gateway/server.d.ts +185 -0
  265. package/dist/gateway/server.js +1138 -0
  266. package/dist/gateway/transport/http.cjs +153 -0
  267. package/dist/gateway/transport/http.d.ts +25 -0
  268. package/dist/gateway/transport/http.js +119 -0
  269. package/dist/gateway/transport/index.cjs +40 -0
  270. package/dist/gateway/transport/index.d.ts +3 -0
  271. package/dist/gateway/transport/index.js +3 -0
  272. package/dist/gateway/transport/types.cjs +18 -0
  273. package/dist/gateway/transport/types.d.ts +59 -0
  274. package/dist/gateway/transport/types.js +0 -0
  275. package/dist/gateway/transport/websocket.cjs +132 -0
  276. package/dist/gateway/transport/websocket.d.ts +21 -0
  277. package/dist/gateway/transport/websocket.js +98 -0
  278. package/dist/gateway/types.cjs +18 -0
  279. package/dist/gateway/types.d.ts +215 -0
  280. package/dist/gateway/types.js +0 -0
  281. package/dist/gateway/validation.cjs +225 -0
  282. package/dist/gateway/validation.d.ts +157 -0
  283. package/dist/gateway/validation.js +158 -0
  284. package/dist/index.cjs +95 -0
  285. package/dist/index.d.ts +6 -0
  286. package/dist/index.js +6 -0
  287. package/dist/logger.cjs +270 -0
  288. package/dist/logger.d.ts +54 -0
  289. package/dist/logger.js +215 -0
  290. package/dist/providers/copilot.cjs +148 -0
  291. package/dist/providers/copilot.d.ts +3 -0
  292. package/dist/providers/copilot.js +114 -0
  293. package/dist/providers/credentials.cjs +154 -0
  294. package/dist/providers/credentials.d.ts +26 -0
  295. package/dist/providers/credentials.js +99 -0
  296. package/dist/providers/oauth.cjs +279 -0
  297. package/dist/providers/oauth.d.ts +13 -0
  298. package/dist/providers/oauth.js +245 -0
  299. package/dist/providers/registry.cjs +138 -0
  300. package/dist/providers/registry.d.ts +32 -0
  301. package/dist/providers/registry.js +98 -0
  302. package/dist/tests/additionalMessageMiddleware.test.cjs +45 -0
  303. package/dist/tests/additionalMessageMiddleware.test.d.ts +1 -0
  304. package/dist/tests/additionalMessageMiddleware.test.js +39 -0
  305. package/dist/tests/agent-config-voice.test.cjs +25 -0
  306. package/dist/tests/agent-config-voice.test.d.ts +1 -0
  307. package/dist/tests/agent-config-voice.test.js +19 -0
  308. package/dist/tests/agentInvokerAttachments.test.cjs +67 -0
  309. package/dist/tests/agentInvokerAttachments.test.d.ts +1 -0
  310. package/dist/tests/agentInvokerAttachments.test.js +61 -0
  311. package/dist/tests/attachments-utils.test.cjs +46 -0
  312. package/dist/tests/attachments-utils.test.d.ts +1 -0
  313. package/dist/tests/attachments-utils.test.js +40 -0
  314. package/dist/tests/bunSqliteAdapter.test.cjs +265 -0
  315. package/dist/tests/bunSqliteAdapter.test.d.ts +1 -0
  316. package/dist/tests/bunSqliteAdapter.test.js +259 -0
  317. package/dist/tests/candleRange.test.cjs +48 -0
  318. package/dist/tests/candleRange.test.d.ts +1 -0
  319. package/dist/tests/candleRange.test.js +42 -0
  320. package/dist/tests/cli-config-loader.test.cjs +364 -0
  321. package/dist/tests/cli-config-loader.test.d.ts +1 -0
  322. package/dist/tests/cli-config-loader.test.js +358 -0
  323. package/dist/tests/cli-init.test.cjs +82 -0
  324. package/dist/tests/cli-init.test.d.ts +1 -0
  325. package/dist/tests/cli-init.test.js +76 -0
  326. package/dist/tests/discord-adapter.test.cjs +55 -0
  327. package/dist/tests/discord-adapter.test.d.ts +1 -0
  328. package/dist/tests/discord-adapter.test.js +49 -0
  329. package/dist/tests/gateway.test.cjs +319 -0
  330. package/dist/tests/gateway.test.d.ts +1 -0
  331. package/dist/tests/gateway.test.js +313 -0
  332. package/dist/tests/hooks-matcher.test.cjs +309 -0
  333. package/dist/tests/hooks-matcher.test.d.ts +1 -0
  334. package/dist/tests/hooks-matcher.test.js +303 -0
  335. package/dist/tests/hooks-merger.test.cjs +528 -0
  336. package/dist/tests/hooks-merger.test.d.ts +1 -0
  337. package/dist/tests/hooks-merger.test.js +522 -0
  338. package/dist/tests/integration/agent-invocation.integration.test.cjs +264 -0
  339. package/dist/tests/integration/agent-invocation.integration.test.d.ts +1 -0
  340. package/dist/tests/integration/agent-invocation.integration.test.js +258 -0
  341. package/dist/tests/integration/finnhub-candles.integration.test.cjs +98 -0
  342. package/dist/tests/integration/finnhub-candles.integration.test.d.ts +1 -0
  343. package/dist/tests/integration/finnhub-candles.integration.test.js +92 -0
  344. package/dist/tests/logger.test.cjs +353 -0
  345. package/dist/tests/logger.test.d.ts +1 -0
  346. package/dist/tests/logger.test.js +347 -0
  347. package/dist/tests/mediaCompatibilityMiddleware.test.cjs +106 -0
  348. package/dist/tests/mediaCompatibilityMiddleware.test.d.ts +1 -0
  349. package/dist/tests/mediaCompatibilityMiddleware.test.js +100 -0
  350. package/dist/tests/routines-api.test.cjs +107 -0
  351. package/dist/tests/routines-api.test.d.ts +1 -0
  352. package/dist/tests/routines-api.test.js +101 -0
  353. package/dist/tests/sessionMessageAttachments.test.cjs +108 -0
  354. package/dist/tests/sessionMessageAttachments.test.d.ts +1 -0
  355. package/dist/tests/sessionMessageAttachments.test.js +102 -0
  356. package/dist/tests/sessionMessageRole.test.cjs +44 -0
  357. package/dist/tests/sessionMessageRole.test.d.ts +1 -0
  358. package/dist/tests/sessionMessageRole.test.js +38 -0
  359. package/dist/tests/sessionStateMessages.test.cjs +72 -0
  360. package/dist/tests/sessionStateMessages.test.d.ts +1 -0
  361. package/dist/tests/sessionStateMessages.test.js +66 -0
  362. package/dist/tests/sessions-api.test.cjs +68 -0
  363. package/dist/tests/sessions-api.test.d.ts +1 -0
  364. package/dist/tests/sessions-api.test.js +62 -0
  365. package/dist/tests/technicalIndicators.test.cjs +82 -0
  366. package/dist/tests/technicalIndicators.test.d.ts +1 -0
  367. package/dist/tests/technicalIndicators.test.js +76 -0
  368. package/dist/tests/toolDisplayHelpers.test.cjs +43 -0
  369. package/dist/tests/toolDisplayHelpers.test.d.ts +1 -0
  370. package/dist/tests/toolDisplayHelpers.test.js +37 -0
  371. package/dist/tests/voice-config.test.cjs +35 -0
  372. package/dist/tests/voice-config.test.d.ts +1 -0
  373. package/dist/tests/voice-config.test.js +29 -0
  374. package/dist/tests/yahooCandles.test.cjs +111 -0
  375. package/dist/tests/yahooCandles.test.d.ts +1 -0
  376. package/dist/tests/yahooCandles.test.js +105 -0
  377. package/dist/tools/finance/candleRange.cjs +71 -0
  378. package/dist/tools/finance/candleRange.d.ts +21 -0
  379. package/dist/tools/finance/candleRange.js +28 -0
  380. package/dist/tools/finance/optionsAnalytics.cjs +222 -0
  381. package/dist/tools/finance/optionsAnalytics.d.ts +44 -0
  382. package/dist/tools/finance/optionsAnalytics.js +188 -0
  383. package/dist/tools/finance/optionsAnalytics.test.cjs +128 -0
  384. package/dist/tools/finance/optionsAnalytics.test.d.ts +1 -0
  385. package/dist/tools/finance/optionsAnalytics.test.js +122 -0
  386. package/dist/tools/finance/technicalIndicators.cjs +111 -0
  387. package/dist/tools/finance/technicalIndicators.d.ts +15 -0
  388. package/dist/tools/finance/technicalIndicators.js +68 -0
  389. package/dist/tools/finance/yahooCandles.cjs +125 -0
  390. package/dist/tools/finance/yahooCandles.d.ts +41 -0
  391. package/dist/tools/finance/yahooCandles.js +85 -0
  392. package/dist/tools/mcp-finance.cjs +649 -0
  393. package/dist/tools/mcp-finance.d.ts +1 -0
  394. package/dist/tools/mcp-finance.js +631 -0
  395. package/dist/types/agents.cjs +18 -0
  396. package/dist/types/agents.d.ts +11 -0
  397. package/dist/types/agents.js +0 -0
  398. package/dist/types/hooks.cjs +18 -0
  399. package/dist/types/hooks.d.ts +82 -0
  400. package/dist/types/hooks.js +0 -0
  401. package/dist/types/mcp.cjs +86 -0
  402. package/dist/types/mcp.d.ts +107 -0
  403. package/dist/types/mcp.js +40 -0
  404. package/dist/types/voice.cjs +103 -0
  405. package/dist/types/voice.d.ts +117 -0
  406. package/dist/types/voice.js +51 -0
  407. package/dist/utils/attachments.cjs +46 -0
  408. package/dist/utils/attachments.d.ts +7 -0
  409. package/dist/utils/attachments.js +12 -0
  410. package/dist/voice/config.cjs +52 -0
  411. package/dist/voice/config.d.ts +8 -0
  412. package/dist/voice/config.js +18 -0
  413. package/dist/webui/assets/index-BA0HaStz.css +1 -0
  414. package/dist/webui/assets/index-NHgTZsWN.js +112 -0
  415. package/dist/webui/assets/wingman_icon-DOy91UEF.webp +0 -0
  416. package/dist/webui/assets/wingman_logo-Cogyt3qm.webp +0 -0
  417. package/dist/webui/index.html +19 -0
  418. package/package.json +130 -0
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.n = (module)=>{
5
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
+ __webpack_require__.d(getter, {
7
+ a: getter
8
+ });
9
+ return getter;
10
+ };
11
+ })();
12
+ (()=>{
13
+ __webpack_require__.d = (exports1, definition)=>{
14
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
15
+ enumerable: true,
16
+ get: definition[key]
17
+ });
18
+ };
19
+ })();
20
+ (()=>{
21
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
22
+ })();
23
+ (()=>{
24
+ __webpack_require__.r = (exports1)=>{
25
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
26
+ value: 'Module'
27
+ });
28
+ Object.defineProperty(exports1, '__esModule', {
29
+ value: true
30
+ });
31
+ };
32
+ })();
33
+ var __webpack_exports__ = {};
34
+ __webpack_require__.r(__webpack_exports__);
35
+ __webpack_require__.d(__webpack_exports__, {
36
+ ToolResultDisplay: ()=>ToolResultDisplay
37
+ });
38
+ const external_react_namespaceObject = require("react");
39
+ var external_react_default = /*#__PURE__*/ __webpack_require__.n(external_react_namespaceObject);
40
+ const external_ink_namespaceObject = require("ink");
41
+ const MAX_PREVIEW_LENGTH = 200;
42
+ const ToolResultDisplay = ({ result, executionTime })=>{
43
+ const hasError = !!result.error;
44
+ const outputLength = result.output.length;
45
+ const isLong = outputLength > MAX_PREVIEW_LENGTH;
46
+ const preview = isLong ? result.output.substring(0, MAX_PREVIEW_LENGTH) + "..." : result.output;
47
+ return /*#__PURE__*/ external_react_default().createElement(external_ink_namespaceObject.Box, {
48
+ flexDirection: "column",
49
+ marginY: 1
50
+ }, /*#__PURE__*/ external_react_default().createElement(external_ink_namespaceObject.Box, {
51
+ borderStyle: "single",
52
+ borderColor: hasError ? "red" : "gray",
53
+ paddingX: 1
54
+ }, /*#__PURE__*/ external_react_default().createElement(external_ink_namespaceObject.Box, {
55
+ flexDirection: "column",
56
+ width: "100%"
57
+ }, /*#__PURE__*/ external_react_default().createElement(external_ink_namespaceObject.Box, null, /*#__PURE__*/ external_react_default().createElement(external_ink_namespaceObject.Text, {
58
+ bold: true,
59
+ color: hasError ? "red" : "green"
60
+ }, hasError ? "✗ Error" : "✓ Result"), void 0 !== executionTime && /*#__PURE__*/ external_react_default().createElement(external_ink_namespaceObject.Text, {
61
+ dimColor: true
62
+ }, " (", executionTime.toFixed(2), "s)")), hasError && /*#__PURE__*/ external_react_default().createElement(external_ink_namespaceObject.Box, {
63
+ marginTop: 1
64
+ }, /*#__PURE__*/ external_react_default().createElement(external_ink_namespaceObject.Text, {
65
+ color: "red"
66
+ }, result.error)), !hasError && result.output && /*#__PURE__*/ external_react_default().createElement(external_ink_namespaceObject.Box, {
67
+ flexDirection: "column",
68
+ marginTop: 1
69
+ }, isLong && /*#__PURE__*/ external_react_default().createElement(external_ink_namespaceObject.Text, {
70
+ dimColor: true
71
+ }, "(", outputLength.toLocaleString(), " characters)"), /*#__PURE__*/ external_react_default().createElement(external_ink_namespaceObject.Box, {
72
+ marginTop: isLong ? 1 : 0
73
+ }, /*#__PURE__*/ external_react_default().createElement(external_ink_namespaceObject.Text, null, preview)), result.truncated && /*#__PURE__*/ external_react_default().createElement(external_ink_namespaceObject.Box, {
74
+ marginTop: 1
75
+ }, /*#__PURE__*/ external_react_default().createElement(external_ink_namespaceObject.Text, {
76
+ dimColor: true,
77
+ italic: true
78
+ }, "[Output truncated - full result available in session]"))))));
79
+ };
80
+ exports.ToolResultDisplay = __webpack_exports__.ToolResultDisplay;
81
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
82
+ "ToolResultDisplay"
83
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
84
+ Object.defineProperty(exports, '__esModule', {
85
+ value: true
86
+ });
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import type { ToolResultBlock } from "../../types.js";
3
+ interface ToolResultDisplayProps {
4
+ result: ToolResultBlock;
5
+ executionTime?: number;
6
+ }
7
+ export declare const ToolResultDisplay: React.FC<ToolResultDisplayProps>;
8
+ export {};
@@ -0,0 +1,42 @@
1
+ import react from "react";
2
+ import { Box, Text } from "ink";
3
+ const MAX_PREVIEW_LENGTH = 200;
4
+ const ToolResultDisplay = ({ result, executionTime })=>{
5
+ const hasError = !!result.error;
6
+ const outputLength = result.output.length;
7
+ const isLong = outputLength > MAX_PREVIEW_LENGTH;
8
+ const preview = isLong ? result.output.substring(0, MAX_PREVIEW_LENGTH) + "..." : result.output;
9
+ return /*#__PURE__*/ react.createElement(Box, {
10
+ flexDirection: "column",
11
+ marginY: 1
12
+ }, /*#__PURE__*/ react.createElement(Box, {
13
+ borderStyle: "single",
14
+ borderColor: hasError ? "red" : "gray",
15
+ paddingX: 1
16
+ }, /*#__PURE__*/ react.createElement(Box, {
17
+ flexDirection: "column",
18
+ width: "100%"
19
+ }, /*#__PURE__*/ react.createElement(Box, null, /*#__PURE__*/ react.createElement(Text, {
20
+ bold: true,
21
+ color: hasError ? "red" : "green"
22
+ }, hasError ? "✗ Error" : "✓ Result"), void 0 !== executionTime && /*#__PURE__*/ react.createElement(Text, {
23
+ dimColor: true
24
+ }, " (", executionTime.toFixed(2), "s)")), hasError && /*#__PURE__*/ react.createElement(Box, {
25
+ marginTop: 1
26
+ }, /*#__PURE__*/ react.createElement(Text, {
27
+ color: "red"
28
+ }, result.error)), !hasError && result.output && /*#__PURE__*/ react.createElement(Box, {
29
+ flexDirection: "column",
30
+ marginTop: 1
31
+ }, isLong && /*#__PURE__*/ react.createElement(Text, {
32
+ dimColor: true
33
+ }, "(", outputLength.toLocaleString(), " characters)"), /*#__PURE__*/ react.createElement(Box, {
34
+ marginTop: isLong ? 1 : 0
35
+ }, /*#__PURE__*/ react.createElement(Text, null, preview)), result.truncated && /*#__PURE__*/ react.createElement(Box, {
36
+ marginTop: 1
37
+ }, /*#__PURE__*/ react.createElement(Text, {
38
+ dimColor: true,
39
+ italic: true
40
+ }, "[Output truncated - full result available in session]"))))));
41
+ };
42
+ export { ToolResultDisplay };
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ extractSubagentName: ()=>extractSubagentName,
28
+ extractTaskSummary: ()=>extractTaskSummary,
29
+ isTaskTool: ()=>isTaskTool
30
+ });
31
+ const TASK_TOOL_NAME = "task";
32
+ function isTaskTool(name) {
33
+ return name.trim().toLowerCase() === TASK_TOOL_NAME;
34
+ }
35
+ function extractSubagentName(args) {
36
+ if (!args || "object" != typeof args) return null;
37
+ const directKeys = [
38
+ "subagent",
39
+ "subAgent",
40
+ "agent",
41
+ "agentName",
42
+ "name",
43
+ "id",
44
+ "role"
45
+ ];
46
+ const direct = pickStringFromKeys(args, directKeys);
47
+ if (direct) return direct;
48
+ const nestedKeys = [
49
+ "agent",
50
+ "subagent",
51
+ "delegate",
52
+ "worker",
53
+ "assistant"
54
+ ];
55
+ for (const key of nestedKeys){
56
+ const value = args[key];
57
+ if (!value || "object" != typeof value) continue;
58
+ const nested = pickStringFromKeys(value, [
59
+ "name",
60
+ "id",
61
+ "role",
62
+ "agent"
63
+ ]);
64
+ if (nested) return nested;
65
+ }
66
+ return null;
67
+ }
68
+ function extractTaskSummary(args) {
69
+ if (!args || "object" != typeof args) return null;
70
+ const summaryKeys = [
71
+ "task",
72
+ "goal",
73
+ "objective",
74
+ "instruction",
75
+ "prompt",
76
+ "message",
77
+ "query",
78
+ "description"
79
+ ];
80
+ const summary = pickStringFromKeys(args, summaryKeys);
81
+ if (summary) return summary;
82
+ if ("string" == typeof args.input) return args.input;
83
+ return null;
84
+ }
85
+ function pickStringFromKeys(source, keys) {
86
+ for (const key of keys){
87
+ const value = source[key];
88
+ const picked = normalizeString(value);
89
+ if (picked) return picked;
90
+ if (value && "object" == typeof value) {
91
+ const nested = normalizeString(value.name) || normalizeString(value.id);
92
+ if (nested) return nested;
93
+ }
94
+ }
95
+ return null;
96
+ }
97
+ function normalizeString(value) {
98
+ if ("string" != typeof value) return null;
99
+ const trimmed = value.trim();
100
+ return trimmed.length > 0 ? trimmed : null;
101
+ }
102
+ exports.extractSubagentName = __webpack_exports__.extractSubagentName;
103
+ exports.extractTaskSummary = __webpack_exports__.extractTaskSummary;
104
+ exports.isTaskTool = __webpack_exports__.isTaskTool;
105
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
106
+ "extractSubagentName",
107
+ "extractTaskSummary",
108
+ "isTaskTool"
109
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
110
+ Object.defineProperty(exports, '__esModule', {
111
+ value: true
112
+ });
@@ -0,0 +1,3 @@
1
+ export declare function isTaskTool(name: string): boolean;
2
+ export declare function extractSubagentName(args: Record<string, any>): string | null;
3
+ export declare function extractTaskSummary(args: Record<string, any>): string | null;
@@ -0,0 +1,72 @@
1
+ const TASK_TOOL_NAME = "task";
2
+ function isTaskTool(name) {
3
+ return name.trim().toLowerCase() === TASK_TOOL_NAME;
4
+ }
5
+ function extractSubagentName(args) {
6
+ if (!args || "object" != typeof args) return null;
7
+ const directKeys = [
8
+ "subagent",
9
+ "subAgent",
10
+ "agent",
11
+ "agentName",
12
+ "name",
13
+ "id",
14
+ "role"
15
+ ];
16
+ const direct = pickStringFromKeys(args, directKeys);
17
+ if (direct) return direct;
18
+ const nestedKeys = [
19
+ "agent",
20
+ "subagent",
21
+ "delegate",
22
+ "worker",
23
+ "assistant"
24
+ ];
25
+ for (const key of nestedKeys){
26
+ const value = args[key];
27
+ if (!value || "object" != typeof value) continue;
28
+ const nested = pickStringFromKeys(value, [
29
+ "name",
30
+ "id",
31
+ "role",
32
+ "agent"
33
+ ]);
34
+ if (nested) return nested;
35
+ }
36
+ return null;
37
+ }
38
+ function extractTaskSummary(args) {
39
+ if (!args || "object" != typeof args) return null;
40
+ const summaryKeys = [
41
+ "task",
42
+ "goal",
43
+ "objective",
44
+ "instruction",
45
+ "prompt",
46
+ "message",
47
+ "query",
48
+ "description"
49
+ ];
50
+ const summary = pickStringFromKeys(args, summaryKeys);
51
+ if (summary) return summary;
52
+ if ("string" == typeof args.input) return args.input;
53
+ return null;
54
+ }
55
+ function pickStringFromKeys(source, keys) {
56
+ for (const key of keys){
57
+ const value = source[key];
58
+ const picked = normalizeString(value);
59
+ if (picked) return picked;
60
+ if (value && "object" == typeof value) {
61
+ const nested = normalizeString(value.name) || normalizeString(value.id);
62
+ if (nested) return nested;
63
+ }
64
+ }
65
+ return null;
66
+ }
67
+ function normalizeString(value) {
68
+ if ("string" != typeof value) return null;
69
+ const trimmed = value.trim();
70
+ return trimmed.length > 0 ? trimmed : null;
71
+ }
72
+ export { extractSubagentName, extractTaskSummary, isTaskTool };
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ DiscordGatewayAdapter: ()=>DiscordGatewayAdapter,
28
+ parseAgentIdFromSessionKey: ()=>parseAgentIdFromSessionKey,
29
+ extractSessionOverride: ()=>extractSessionOverride,
30
+ splitDiscordMessage: ()=>splitDiscordMessage,
31
+ DEFAULT_DISCORD_RESPONSE_CHUNK: ()=>DEFAULT_DISCORD_RESPONSE_CHUNK,
32
+ resolveDiscordChannelSessionKey: ()=>resolveDiscordChannelSessionKey,
33
+ stripDiscordBotMention: ()=>stripDiscordBotMention
34
+ });
35
+ const external_discord_js_namespaceObject = require("discord.js");
36
+ const external_logger_cjs_namespaceObject = require("../../logger.cjs");
37
+ const external_rpcClient_cjs_namespaceObject = require("../rpcClient.cjs");
38
+ const streamParser_cjs_namespaceObject = require("../../cli/core/streamParser.cjs");
39
+ function _define_property(obj, key, value) {
40
+ if (key in obj) Object.defineProperty(obj, key, {
41
+ value: value,
42
+ enumerable: true,
43
+ configurable: true,
44
+ writable: true
45
+ });
46
+ else obj[key] = value;
47
+ return obj;
48
+ }
49
+ const DEFAULT_DISCORD_RESPONSE_CHUNK = 1900;
50
+ function splitDiscordMessage(text, maxLength = DEFAULT_DISCORD_RESPONSE_CHUNK) {
51
+ const normalized = text.trim();
52
+ if (!normalized) return [];
53
+ const chunks = [];
54
+ let current = "";
55
+ for (const char of normalized){
56
+ if (current.length + 1 > maxLength) {
57
+ chunks.push(current);
58
+ current = "";
59
+ }
60
+ current += char;
61
+ }
62
+ if (current) chunks.push(current);
63
+ return chunks;
64
+ }
65
+ function stripDiscordBotMention(content, botId) {
66
+ if (!content) return content;
67
+ const mention = new RegExp(`<@!?${botId}>`, "g");
68
+ return content.replace(mention, "").trim();
69
+ }
70
+ function extractSessionOverride(content, command) {
71
+ const trimmed = content.trim();
72
+ if (!command || !trimmed.toLowerCase().startsWith(command.toLowerCase())) return {
73
+ content,
74
+ matched: false
75
+ };
76
+ const withoutCommand = trimmed.slice(command.length).trim();
77
+ if (!withoutCommand) return {
78
+ content: "",
79
+ matched: true
80
+ };
81
+ const [sessionKey, ...rest] = withoutCommand.split(/\s+/);
82
+ return {
83
+ sessionKey,
84
+ content: rest.join(" "),
85
+ matched: true
86
+ };
87
+ }
88
+ function resolveDiscordChannelSessionKey(channelId, channelSessions, parentChannelId) {
89
+ if (!channelSessions) return;
90
+ const direct = channelSessions[channelId];
91
+ if (direct) return direct;
92
+ if (parentChannelId) return channelSessions[parentChannelId];
93
+ }
94
+ function parseAgentIdFromSessionKey(sessionKey) {
95
+ if (!sessionKey) return;
96
+ const match = sessionKey.match(/^agent:([^:]+):/);
97
+ return match?.[1];
98
+ }
99
+ function buildRoutingInfo(message, botUserId) {
100
+ const routing = {
101
+ channel: "discord",
102
+ accountId: botUserId
103
+ };
104
+ if (message.guildId) routing.guildId = message.guildId;
105
+ const channel = message.channel;
106
+ if (channel.isDMBased()) {
107
+ if (channel.type === external_discord_js_namespaceObject.ChannelType.DM) routing.peer = {
108
+ kind: "dm",
109
+ id: message.author.id
110
+ };
111
+ else routing.peer = {
112
+ kind: "group",
113
+ id: channel.id
114
+ };
115
+ return routing;
116
+ }
117
+ if (channel.isThread()) {
118
+ routing.threadId = channel.id;
119
+ routing.peer = {
120
+ kind: "channel",
121
+ id: channel.parentId || channel.id
122
+ };
123
+ return routing;
124
+ }
125
+ routing.peer = {
126
+ kind: "channel",
127
+ id: channel.id
128
+ };
129
+ return routing;
130
+ }
131
+ class DiscordGatewayAdapter {
132
+ async start() {
133
+ if (this.started) return;
134
+ if (!this.config.enabled) return;
135
+ if (!this.config.token) return void this.logger.warn("Discord adapter enabled but no token configured.");
136
+ this.gatewayClient = new external_rpcClient_cjs_namespaceObject.GatewayRpcClient(this.gateway.url, {
137
+ token: this.gateway.token,
138
+ password: this.gateway.password,
139
+ clientType: "discord"
140
+ });
141
+ await this.gatewayClient.connect();
142
+ this.client = new external_discord_js_namespaceObject.Client({
143
+ intents: [
144
+ external_discord_js_namespaceObject.GatewayIntentBits.Guilds,
145
+ external_discord_js_namespaceObject.GatewayIntentBits.GuildMessages,
146
+ external_discord_js_namespaceObject.GatewayIntentBits.DirectMessages,
147
+ external_discord_js_namespaceObject.GatewayIntentBits.MessageContent
148
+ ],
149
+ partials: [
150
+ external_discord_js_namespaceObject.Partials.Channel
151
+ ]
152
+ });
153
+ this.client.on("clientReady", ()=>{
154
+ this.logger.info("Discord adapter connected.");
155
+ });
156
+ this.client.on("error", (error)=>{
157
+ this.logger.error("Discord adapter error", error);
158
+ });
159
+ this.client.on("messageCreate", (message)=>{
160
+ this.handleMessage(message);
161
+ });
162
+ await this.client.login(this.config.token);
163
+ this.started = true;
164
+ }
165
+ async stop() {
166
+ if (!this.started) return;
167
+ this.started = false;
168
+ if (this.client) {
169
+ await this.client.destroy();
170
+ this.client = null;
171
+ }
172
+ if (this.gatewayClient) {
173
+ this.gatewayClient.disconnect();
174
+ this.gatewayClient = null;
175
+ }
176
+ }
177
+ async handleMessage(message) {
178
+ if (!this.client || !this.gatewayClient) return;
179
+ if (!message.content && 0 === message.attachments.size) return;
180
+ if (message.author.bot) {
181
+ if (!this.config.allowBots) return;
182
+ if (message.author.id === this.client.user?.id) return;
183
+ }
184
+ const botUserId = this.client.user?.id;
185
+ if (!botUserId) return;
186
+ if (!message.channel.isTextBased()) return;
187
+ const channel = message.channel;
188
+ if (!("send" in channel)) return;
189
+ const sendChannel = channel;
190
+ if (this.config.allowedGuilds.length > 0 && message.guildId) {
191
+ if (!this.config.allowedGuilds.includes(message.guildId)) return;
192
+ }
193
+ if (this.config.allowedChannels.length > 0) {
194
+ if (!this.config.allowedChannels.includes(message.channelId)) return;
195
+ }
196
+ const isDm = message.channel.isDMBased();
197
+ const mentioned = message.mentions.has(botUserId);
198
+ if (this.config.mentionOnly && !isDm && !mentioned) return;
199
+ const cleaned = stripDiscordBotMention(message.content || "", botUserId);
200
+ const attachments = Array.from(message.attachments.values()).map((attachment)=>attachment.url);
201
+ const attachmentText = attachments.length > 0 ? `\n\nAttachments:\n${attachments.map((url)=>`- ${url}`).join("\n")}` : "";
202
+ let content = `${cleaned}${attachmentText}`.trim();
203
+ const { sessionKey, content: nextContent, matched } = extractSessionOverride(content, this.config.sessionCommand);
204
+ let resolvedSessionKey = sessionKey;
205
+ let usedChannelMapping = false;
206
+ if (matched) {
207
+ content = nextContent.trim();
208
+ if (!sessionKey) return void await sendChannel.send(`Provide a session key after \`${this.config.sessionCommand}\`.`);
209
+ }
210
+ if (!matched) {
211
+ const parentChannelId = message.channel.isThread() ? message.channel.parentId ?? void 0 : void 0;
212
+ resolvedSessionKey = resolveDiscordChannelSessionKey(message.channelId, this.config.channelSessions, parentChannelId);
213
+ usedChannelMapping = Boolean(resolvedSessionKey);
214
+ }
215
+ const inferredAgentId = parseAgentIdFromSessionKey(resolvedSessionKey);
216
+ if (usedChannelMapping && !inferredAgentId) this.logger.warn(`Discord channel session mapping for channel ${message.channelId} does not include an agent prefix. Use "agent:<id>:..." to auto-select an agent.`, {
217
+ sessionKey: resolvedSessionKey
218
+ });
219
+ if (!content) return;
220
+ const payload = {
221
+ agentId: inferredAgentId,
222
+ content,
223
+ routing: buildRoutingInfo(message, botUserId),
224
+ sessionKey: resolvedSessionKey
225
+ };
226
+ try {
227
+ if (sendChannel.sendTyping) await sendChannel.sendTyping();
228
+ let fallbackText = "";
229
+ const textByMessageId = new Map();
230
+ const messageOrder = [];
231
+ await this.gatewayClient.requestAgent(payload, (event)=>{
232
+ if (!event || "object" != typeof event) return;
233
+ if ("agent-error" === event.type) {
234
+ fallbackText += `\n${event.error || "Agent error"}`;
235
+ return;
236
+ }
237
+ if ("agent-stream" !== event.type) return;
238
+ const parsedChunks = (0, streamParser_cjs_namespaceObject.parseStreamChunk)(event.chunk);
239
+ for (const chunk of parsedChunks)if ("text" === chunk.type && chunk.text) {
240
+ if (chunk.messageId) {
241
+ if (!textByMessageId.has(chunk.messageId)) {
242
+ messageOrder.push(chunk.messageId);
243
+ textByMessageId.set(chunk.messageId, chunk.text);
244
+ continue;
245
+ }
246
+ const current = textByMessageId.get(chunk.messageId) || "";
247
+ textByMessageId.set(chunk.messageId, chunk.isDelta ? current + chunk.text : chunk.text);
248
+ continue;
249
+ }
250
+ fallbackText += chunk.text;
251
+ }
252
+ });
253
+ const orderedText = messageOrder.map((id)=>textByMessageId.get(id)).filter((value)=>Boolean(value)).join("\n\n");
254
+ const responseText = `${fallbackText}${fallbackText && orderedText ? "\n\n" : ""}${orderedText}`.trim();
255
+ if (!responseText) return;
256
+ const chunks = splitDiscordMessage(responseText, this.config.responseChunkSize);
257
+ for (const chunk of chunks)await sendChannel.send(chunk);
258
+ } catch (error) {
259
+ this.logger.error("Discord adapter failed to handle message", error);
260
+ try {
261
+ await sendChannel.send("Sorry, I hit an error running that request.");
262
+ } catch {}
263
+ }
264
+ }
265
+ constructor(config, gateway, logger){
266
+ _define_property(this, "config", void 0);
267
+ _define_property(this, "gateway", void 0);
268
+ _define_property(this, "client", void 0);
269
+ _define_property(this, "gatewayClient", void 0);
270
+ _define_property(this, "logger", void 0);
271
+ _define_property(this, "started", void 0);
272
+ this.config = config;
273
+ this.gateway = gateway;
274
+ this.client = null;
275
+ this.gatewayClient = null;
276
+ this.started = false;
277
+ this.logger = logger || (0, external_logger_cjs_namespaceObject.createLogger)();
278
+ }
279
+ }
280
+ exports.DEFAULT_DISCORD_RESPONSE_CHUNK = __webpack_exports__.DEFAULT_DISCORD_RESPONSE_CHUNK;
281
+ exports.DiscordGatewayAdapter = __webpack_exports__.DiscordGatewayAdapter;
282
+ exports.extractSessionOverride = __webpack_exports__.extractSessionOverride;
283
+ exports.parseAgentIdFromSessionKey = __webpack_exports__.parseAgentIdFromSessionKey;
284
+ exports.resolveDiscordChannelSessionKey = __webpack_exports__.resolveDiscordChannelSessionKey;
285
+ exports.splitDiscordMessage = __webpack_exports__.splitDiscordMessage;
286
+ exports.stripDiscordBotMention = __webpack_exports__.stripDiscordBotMention;
287
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
288
+ "DEFAULT_DISCORD_RESPONSE_CHUNK",
289
+ "DiscordGatewayAdapter",
290
+ "extractSessionOverride",
291
+ "parseAgentIdFromSessionKey",
292
+ "resolveDiscordChannelSessionKey",
293
+ "splitDiscordMessage",
294
+ "stripDiscordBotMention"
295
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
296
+ Object.defineProperty(exports, '__esModule', {
297
+ value: true
298
+ });
@@ -0,0 +1,42 @@
1
+ import { type Logger } from "@/logger.js";
2
+ export interface DiscordAdapterConfig {
3
+ enabled: boolean;
4
+ token?: string;
5
+ mentionOnly: boolean;
6
+ allowBots: boolean;
7
+ allowedGuilds: string[];
8
+ allowedChannels: string[];
9
+ channelSessions?: Record<string, string>;
10
+ sessionCommand: string;
11
+ gatewayUrl?: string;
12
+ gatewayToken?: string;
13
+ gatewayPassword?: string;
14
+ responseChunkSize: number;
15
+ }
16
+ export interface DiscordAdapterGatewayConfig {
17
+ url: string;
18
+ token?: string;
19
+ password?: string;
20
+ }
21
+ export declare const DEFAULT_DISCORD_RESPONSE_CHUNK = 1900;
22
+ export declare function splitDiscordMessage(text: string, maxLength?: number): string[];
23
+ export declare function stripDiscordBotMention(content: string, botId: string): string;
24
+ export declare function extractSessionOverride(content: string, command: string): {
25
+ sessionKey?: string;
26
+ content: string;
27
+ matched: boolean;
28
+ };
29
+ export declare function resolveDiscordChannelSessionKey(channelId: string, channelSessions?: Record<string, string>, parentChannelId?: string): string | undefined;
30
+ export declare function parseAgentIdFromSessionKey(sessionKey?: string): string | undefined;
31
+ export declare class DiscordGatewayAdapter {
32
+ private config;
33
+ private gateway;
34
+ private client;
35
+ private gatewayClient;
36
+ private logger;
37
+ private started;
38
+ constructor(config: DiscordAdapterConfig, gateway: DiscordAdapterGatewayConfig, logger?: Logger);
39
+ start(): Promise<void>;
40
+ stop(): Promise<void>;
41
+ private handleMessage;
42
+ }