@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,486 @@
1
+ import { SqliteSaver } from "@langchain/langgraph-checkpoint-sqlite";
2
+ import { createDeepAgent } from "deepagents";
3
+ import { v4 } from "uuid";
4
+ function _define_property(obj, key, value) {
5
+ if (key in obj) Object.defineProperty(obj, key, {
6
+ value: value,
7
+ enumerable: true,
8
+ configurable: true,
9
+ writable: true
10
+ });
11
+ else obj[key] = value;
12
+ return obj;
13
+ }
14
+ const isBunRuntime = void 0 !== globalThis.Bun;
15
+ class SessionManager {
16
+ async initialize() {
17
+ if (!isBunRuntime) throw new Error("SessionManager requires Bun runtime (bun:sqlite not available)");
18
+ const { BunSqliteAdapter } = await import("./database/bunSqliteAdapter.js");
19
+ const adapter = new BunSqliteAdapter(this.dbPath);
20
+ this.checkpointer = new SqliteSaver(adapter);
21
+ await this.checkpointer.setup();
22
+ this.db = adapter.db;
23
+ this.db.run(`
24
+ CREATE TABLE IF NOT EXISTS sessions (
25
+ id TEXT PRIMARY KEY,
26
+ name TEXT NOT NULL,
27
+ agent_name TEXT NOT NULL,
28
+ created_at INTEGER NOT NULL,
29
+ updated_at INTEGER NOT NULL,
30
+ status TEXT NOT NULL DEFAULT 'active',
31
+ message_count INTEGER DEFAULT 0,
32
+ last_message_preview TEXT,
33
+ metadata TEXT
34
+ );
35
+
36
+ CREATE INDEX IF NOT EXISTS idx_sessions_updated ON sessions(updated_at DESC);
37
+ CREATE INDEX IF NOT EXISTS idx_sessions_agent ON sessions(agent_name);
38
+ `);
39
+ }
40
+ createSession(agentName, name) {
41
+ if (!this.db) throw new Error("SessionManager not initialized");
42
+ const id = v4();
43
+ const now = Date.now();
44
+ const sessionName = name || `Session ${new Date().toLocaleString()}`;
45
+ const stmt = this.db.prepare(`
46
+ INSERT INTO sessions (id, name, agent_name, created_at, updated_at, status, message_count)
47
+ VALUES (?, ?, ?, ?, ?, 'active', 0)
48
+ `);
49
+ stmt.run(id, sessionName, agentName, now, now);
50
+ return {
51
+ id,
52
+ name: sessionName,
53
+ agentName,
54
+ createdAt: new Date(now),
55
+ updatedAt: new Date(now),
56
+ status: "active",
57
+ messageCount: 0
58
+ };
59
+ }
60
+ getOrCreateSession(sessionId, agentName, name) {
61
+ if (!this.db) throw new Error("SessionManager not initialized");
62
+ const existing = this.getSession(sessionId);
63
+ if (existing) return existing;
64
+ const now = Date.now();
65
+ const sessionName = name || `Session ${new Date().toLocaleString()}`;
66
+ const stmt = this.db.prepare(`
67
+ INSERT INTO sessions (id, name, agent_name, created_at, updated_at, status, message_count)
68
+ VALUES (?, ?, ?, ?, ?, 'active', 0)
69
+ `);
70
+ stmt.run(sessionId, sessionName, agentName, now, now);
71
+ return {
72
+ id: sessionId,
73
+ name: sessionName,
74
+ agentName,
75
+ createdAt: new Date(now),
76
+ updatedAt: new Date(now),
77
+ status: "active",
78
+ messageCount: 0
79
+ };
80
+ }
81
+ getSession(sessionId) {
82
+ if (!this.db) throw new Error("SessionManager not initialized");
83
+ const stmt = this.db.prepare(`
84
+ SELECT * FROM sessions WHERE id = ?
85
+ `);
86
+ const row = stmt.get(sessionId);
87
+ if (!row) return null;
88
+ return this.rowToSession(row);
89
+ }
90
+ getLastSession() {
91
+ if (!this.db) throw new Error("SessionManager not initialized");
92
+ const stmt = this.db.prepare(`
93
+ SELECT * FROM sessions
94
+ WHERE status = 'active'
95
+ ORDER BY updated_at DESC
96
+ LIMIT 1
97
+ `);
98
+ const row = stmt.get();
99
+ if (!row) return null;
100
+ return this.rowToSession(row);
101
+ }
102
+ listSessions(options = {}) {
103
+ if (!this.db) throw new Error("SessionManager not initialized");
104
+ const { status = "active", limit = 10, offset = 0, agentName } = options;
105
+ let query = `
106
+ SELECT * FROM sessions
107
+ WHERE status = ?
108
+ `;
109
+ const params = [
110
+ status
111
+ ];
112
+ if (agentName) {
113
+ query += " AND agent_name = ?";
114
+ params.push(agentName);
115
+ }
116
+ query += " ORDER BY updated_at DESC LIMIT ? OFFSET ?";
117
+ params.push(limit, offset);
118
+ const stmt = this.db.prepare(query);
119
+ const rows = stmt.all(...params);
120
+ return rows.map(this.rowToSession);
121
+ }
122
+ updateSession(sessionId, updates) {
123
+ if (!this.db) throw new Error("SessionManager not initialized");
124
+ const fields = [];
125
+ const values = [];
126
+ if (void 0 !== updates.name) {
127
+ fields.push("name = ?");
128
+ values.push(updates.name);
129
+ }
130
+ if (void 0 !== updates.status) {
131
+ fields.push("status = ?");
132
+ values.push(updates.status);
133
+ }
134
+ if (void 0 !== updates.messageCount) {
135
+ fields.push("message_count = ?");
136
+ values.push(updates.messageCount);
137
+ }
138
+ if (void 0 !== updates.lastMessagePreview) {
139
+ fields.push("last_message_preview = ?");
140
+ values.push(updates.lastMessagePreview);
141
+ }
142
+ fields.push("updated_at = ?");
143
+ values.push(Date.now());
144
+ values.push(sessionId);
145
+ const stmt = this.db.prepare(`
146
+ UPDATE sessions
147
+ SET ${fields.join(", ")}
148
+ WHERE id = ?
149
+ `);
150
+ stmt.run(...values);
151
+ }
152
+ updateSessionMetadata(sessionId, metadata) {
153
+ if (!this.db) throw new Error("SessionManager not initialized");
154
+ const existing = this.getSession(sessionId);
155
+ const nextMetadata = {
156
+ ...existing?.metadata || {},
157
+ ...metadata
158
+ };
159
+ const stmt = this.db.prepare(`
160
+ UPDATE sessions
161
+ SET metadata = ?, updated_at = ?
162
+ WHERE id = ?
163
+ `);
164
+ stmt.run(JSON.stringify(nextMetadata), Date.now(), sessionId);
165
+ }
166
+ archiveSession(sessionId) {
167
+ this.updateSession(sessionId, {
168
+ status: "archived"
169
+ });
170
+ }
171
+ deleteSession(sessionId) {
172
+ if (!this.db || !this.checkpointer) throw new Error("SessionManager not initialized");
173
+ const sessionStmt = this.db.prepare("DELETE FROM sessions WHERE id = ?");
174
+ sessionStmt.run(sessionId);
175
+ const checkpointStmt = this.db.prepare("DELETE FROM checkpoints WHERE thread_id = ?");
176
+ checkpointStmt.run(sessionId);
177
+ const writesStmt = this.db.prepare("DELETE FROM writes WHERE thread_id = ?");
178
+ writesStmt.run(sessionId);
179
+ }
180
+ clearSessionMessages(sessionId) {
181
+ if (!this.db || !this.checkpointer) throw new Error("SessionManager not initialized");
182
+ const checkpointStmt = this.db.prepare("DELETE FROM checkpoints WHERE thread_id = ?");
183
+ checkpointStmt.run(sessionId);
184
+ const writesStmt = this.db.prepare("DELETE FROM writes WHERE thread_id = ?");
185
+ writesStmt.run(sessionId);
186
+ const sessionStmt = this.db.prepare(`
187
+ UPDATE sessions
188
+ SET message_count = 0, last_message_preview = NULL, updated_at = ?
189
+ WHERE id = ?
190
+ `);
191
+ sessionStmt.run(Date.now(), sessionId);
192
+ }
193
+ getCheckpointer() {
194
+ if (!this.checkpointer) throw new Error("SessionManager not initialized");
195
+ return this.checkpointer;
196
+ }
197
+ async listMessages(sessionId) {
198
+ if (!this.checkpointer) throw new Error("SessionManager not initialized");
199
+ const stateMessages = await this.loadMessagesFromState(sessionId);
200
+ if (null !== stateMessages) return stateMessages;
201
+ const rawCheckpoints = this.loadRecentCheckpoints(sessionId, 25);
202
+ const fallbackTuple = 0 === rawCheckpoints.length ? await this.checkpointer.getTuple({
203
+ configurable: {
204
+ thread_id: sessionId
205
+ }
206
+ }) : null;
207
+ const checkpoints = [
208
+ ...rawCheckpoints,
209
+ ...fallbackTuple?.checkpoint ? [
210
+ fallbackTuple.checkpoint
211
+ ] : []
212
+ ];
213
+ if (0 === checkpoints.length) return [];
214
+ let bestScore = -1;
215
+ let bestMessages = [];
216
+ for (const checkpoint of checkpoints){
217
+ const channelValues = checkpoint?.channel_values || checkpoint?.channelValues || checkpoint?.state?.channel_values || checkpoint?.state?.channelValues || {};
218
+ const candidates = [];
219
+ if (Array.isArray(channelValues?.messages)) candidates.push(channelValues.messages);
220
+ for (const value of Object.values(channelValues))if (Array.isArray(value)) candidates.push(value);
221
+ const relevantCandidates = candidates.filter((arr)=>arr.some(isMessageLike));
222
+ if (0 === relevantCandidates.length) continue;
223
+ const baseTime = parseTimestamp(checkpoint?.ts);
224
+ const scored = relevantCandidates.map((candidate)=>scoreMessages(candidate, baseTime));
225
+ scored.sort((a, b)=>b.score - a.score);
226
+ if (scored[0] && scored[0].score > bestScore) {
227
+ bestScore = scored[0].score;
228
+ bestMessages = scored[0].messages;
229
+ }
230
+ }
231
+ if (0 === bestMessages.length) return [];
232
+ return filterEmptyAssistantMessages(bestMessages);
233
+ }
234
+ rowToSession(row) {
235
+ return {
236
+ id: row.id,
237
+ name: row.name,
238
+ agentName: row.agent_name,
239
+ createdAt: new Date(row.created_at),
240
+ updatedAt: new Date(row.updated_at),
241
+ status: row.status,
242
+ messageCount: row.message_count,
243
+ lastMessagePreview: row.last_message_preview,
244
+ metadata: row.metadata ? JSON.parse(row.metadata) : void 0
245
+ };
246
+ }
247
+ close() {
248
+ if (this.db) this.db.close();
249
+ }
250
+ loadRecentCheckpoints(sessionId, limit) {
251
+ if (!this.db) return [];
252
+ const stmt = this.db.prepare(`
253
+ SELECT checkpoint
254
+ FROM checkpoints
255
+ WHERE thread_id = ?
256
+ ORDER BY rowid DESC
257
+ LIMIT ?
258
+ `);
259
+ const rows = stmt.all(sessionId, limit);
260
+ const checkpoints = [];
261
+ for (const row of rows){
262
+ if (!row?.checkpoint) continue;
263
+ const raw = row.checkpoint;
264
+ let text = null;
265
+ if ("string" == typeof raw) text = raw;
266
+ else if (raw instanceof Uint8Array) text = new TextDecoder().decode(raw);
267
+ if (text) try {
268
+ checkpoints.push(JSON.parse(text));
269
+ } catch {
270
+ continue;
271
+ }
272
+ }
273
+ return checkpoints;
274
+ }
275
+ getStateReaderAgent() {
276
+ if (!this.checkpointer) throw new Error("SessionManager not initialized");
277
+ if (!this.stateReaderAgent) this.stateReaderAgent = createDeepAgent({
278
+ checkpointer: this.checkpointer
279
+ });
280
+ return this.stateReaderAgent;
281
+ }
282
+ async loadMessagesFromState(sessionId) {
283
+ if (!this.checkpointer) return null;
284
+ try {
285
+ const agent = this.getStateReaderAgent();
286
+ if ("function" != typeof agent.getState) return null;
287
+ const state = await agent.getState({
288
+ configurable: {
289
+ thread_id: sessionId
290
+ }
291
+ });
292
+ return extractMessagesFromState(state);
293
+ } catch {
294
+ return null;
295
+ }
296
+ }
297
+ constructor(dbPath){
298
+ _define_property(this, "checkpointer", null);
299
+ _define_property(this, "stateReaderAgent", null);
300
+ _define_property(this, "db", null);
301
+ _define_property(this, "dbPath", void 0);
302
+ this.dbPath = dbPath;
303
+ }
304
+ }
305
+ function isMessageLike(entry) {
306
+ if (!entry || "object" != typeof entry) return false;
307
+ return "string" == typeof entry.role || "string" == typeof entry.type || "string" == typeof entry?.kwargs?.role || "string" == typeof entry?.additional_kwargs?.role;
308
+ }
309
+ function toSessionMessage(entry, index, baseTime) {
310
+ if (!entry || "object" != typeof entry) return null;
311
+ if (entry?.additional_kwargs?.ui_hidden || entry?.additional_kwargs?.uiHidden) return null;
312
+ if (entry?.metadata?.ui_hidden || entry?.metadata?.uiHidden) return null;
313
+ const role = resolveMessageRole(entry);
314
+ if ("user" !== role && "assistant" !== role) return null;
315
+ const blocks = extractContentBlocks(entry);
316
+ const content = "string" == typeof entry.content ? entry.content : "string" == typeof entry?.kwargs?.content ? entry.kwargs.content : "string" == typeof entry?.additional_kwargs?.content ? entry.additional_kwargs.content : "string" == typeof entry?.data?.content ? entry.data.content : blocks.length > 0 ? blocks.filter((block)=>block && "text" === block.type && block.text).map((block)=>block.text).join("") : "";
317
+ if ("user" === role && isUiHiddenContent(content)) return null;
318
+ const attachments = extractAttachments(blocks);
319
+ return {
320
+ id: `msg-${index}`,
321
+ role,
322
+ content,
323
+ attachments: attachments.length > 0 ? attachments : void 0,
324
+ createdAt: baseTime + index
325
+ };
326
+ }
327
+ function extractMessagesFromState(state) {
328
+ if (!state || "object" != typeof state) return null;
329
+ const values = state?.values ?? state?.value ?? state?.state ?? {};
330
+ const candidates = [
331
+ values?.messages,
332
+ values?.channel_values?.messages,
333
+ values?.channelValues?.messages,
334
+ state?.channel_values?.messages,
335
+ state?.channelValues?.messages
336
+ ];
337
+ const messages = candidates.find((candidate)=>Array.isArray(candidate));
338
+ if (!messages) return null;
339
+ const baseTime = parseTimestamp(state?.createdAt ?? values?.createdAt ?? state?.metadata?.createdAt ?? state?.metadata?.created_at ?? state?.ts);
340
+ const mapped = messages.map((message, index)=>toSessionMessage(message, index, baseTime)).filter(Boolean);
341
+ return filterEmptyAssistantMessages(mapped);
342
+ }
343
+ function extractContentBlocks(entry) {
344
+ if (!entry || "object" != typeof entry) return [];
345
+ const candidates = [
346
+ entry?.content,
347
+ entry?.kwargs?.content,
348
+ entry?.additional_kwargs?.content,
349
+ entry?.data?.content
350
+ ];
351
+ for (const candidate of candidates)if (Array.isArray(candidate)) return candidate;
352
+ return [];
353
+ }
354
+ function extractAttachments(blocks) {
355
+ const attachments = [];
356
+ for (const block of blocks){
357
+ if (!block || "object" != typeof block) continue;
358
+ const imageUrl = extractImageUrl(block);
359
+ if (imageUrl) {
360
+ attachments.push({
361
+ kind: "image",
362
+ dataUrl: imageUrl
363
+ });
364
+ continue;
365
+ }
366
+ const audioUrl = extractAudioUrl(block);
367
+ if (audioUrl) attachments.push({
368
+ kind: "audio",
369
+ dataUrl: audioUrl
370
+ });
371
+ }
372
+ return attachments;
373
+ }
374
+ function extractImageAttachments(blocks) {
375
+ return extractAttachments(blocks).filter((attachment)=>"image" === attachment.kind);
376
+ }
377
+ function extractImageUrl(block) {
378
+ if ("image_url" === block.type) {
379
+ if ("string" == typeof block.image_url) return block.image_url;
380
+ if ("string" == typeof block.image_url?.url) return block.image_url.url;
381
+ }
382
+ if ("input_image" === block.type) {
383
+ if ("string" == typeof block.image_url) return block.image_url;
384
+ if ("string" == typeof block.image_url?.url) return block.image_url.url;
385
+ if ("string" == typeof block.url) return block.url;
386
+ }
387
+ if ("image" === block.type && block.source) {
388
+ const mediaType = block.source.media_type || block.source.mediaType;
389
+ const data = block.source.data;
390
+ if (mediaType && data) return `data:${mediaType};base64,${data}`;
391
+ }
392
+ return null;
393
+ }
394
+ function extractAudioUrl(block) {
395
+ if ("audio_url" === block.type) {
396
+ if ("string" == typeof block.audio_url) return block.audio_url;
397
+ if ("string" == typeof block.audio_url?.url) return block.audio_url.url;
398
+ }
399
+ if ("input_audio" === block.type) {
400
+ const input = block.input_audio || block.audio;
401
+ const data = "string" == typeof input?.data ? input.data : null;
402
+ const format = "string" == typeof input?.format ? input.format : void 0;
403
+ if (data) {
404
+ const mimeType = format ? resolveAudioMimeType(format) : "audio/wav";
405
+ return `data:${mimeType};base64,${data}`;
406
+ }
407
+ }
408
+ if ("audio" === block.type && block.source) {
409
+ const mediaType = block.source.media_type || block.source.mediaType;
410
+ const data = block.source.data;
411
+ if (mediaType && data) return `data:${mediaType};base64,${data}`;
412
+ }
413
+ if ("audio" === block.type) {
414
+ const sourceType = block.source_type || block.sourceType;
415
+ const data = block.data;
416
+ if ("base64" === sourceType && "string" == typeof data) {
417
+ const rawFormat = block.mime_type || block.media_type || block.mediaType || block.format;
418
+ const mimeType = "string" == typeof rawFormat ? rawFormat.includes("/") ? rawFormat : resolveAudioMimeType(rawFormat) : "audio/wav";
419
+ return `data:${mimeType};base64,${data}`;
420
+ }
421
+ if ("url" === sourceType && "string" == typeof block.url) return block.url;
422
+ }
423
+ return null;
424
+ }
425
+ function resolveAudioMimeType(format) {
426
+ const normalized = format.toLowerCase();
427
+ switch(normalized){
428
+ case "mp3":
429
+ case "mpeg":
430
+ return "audio/mpeg";
431
+ case "wav":
432
+ return "audio/wav";
433
+ case "m4a":
434
+ case "mp4":
435
+ return "audio/mp4";
436
+ case "ogg":
437
+ return "audio/ogg";
438
+ case "webm":
439
+ return "audio/webm";
440
+ default:
441
+ return `audio/${normalized}`;
442
+ }
443
+ }
444
+ function mapMessageType(type) {
445
+ if (!type) return null;
446
+ if ("human" === type || "user" === type) return "user";
447
+ if ("ai" === type || "assistant" === type) return "assistant";
448
+ return null;
449
+ }
450
+ function mapMessageTypeFromId(id) {
451
+ if (!Array.isArray(id) || 0 === id.length) return null;
452
+ const last = String(id[id.length - 1] || "").toLowerCase();
453
+ if (last.includes("human") || last.includes("user")) return "user";
454
+ if (last.includes("ai") || last.includes("assistant")) return "assistant";
455
+ return null;
456
+ }
457
+ function resolveMessageRole(entry) {
458
+ return entry?.role || entry?.kwargs?.role || entry?.additional_kwargs?.role || mapMessageType(entry?.type) || mapMessageTypeFromId(entry?.id ?? entry?.lc_id ?? entry?.kwargs?.id);
459
+ }
460
+ function parseTimestamp(value) {
461
+ if ("number" == typeof value && Number.isFinite(value)) return value;
462
+ if ("string" == typeof value) {
463
+ const parsed = Date.parse(value);
464
+ if (!Number.isNaN(parsed)) return parsed;
465
+ }
466
+ return Date.now();
467
+ }
468
+ function isUiHiddenContent(content) {
469
+ if (!content) return false;
470
+ return content.includes("Current Date Time (UTC):") || content.startsWith("# User's Machine Information");
471
+ }
472
+ function scoreMessages(candidate, baseTime) {
473
+ const messages = candidate.map((message, index)=>toSessionMessage(message, index, baseTime)).filter(Boolean);
474
+ const contentful = messages.filter((msg)=>msg.content.trim().length > 0 || (msg.attachments?.length ?? 0) > 0).length;
475
+ const assistantContentful = messages.filter((msg)=>"assistant" === msg.role && msg.content.trim().length > 0).length;
476
+ const score = 3 * assistantContentful + 2 * contentful + messages.length;
477
+ return {
478
+ score,
479
+ messages
480
+ };
481
+ }
482
+ function filterEmptyAssistantMessages(messages) {
483
+ const filtered = messages.filter((message)=>"assistant" !== message.role || message.content.trim().length > 0 || (message.attachments?.length ?? 0) > 0);
484
+ return filtered.length > 0 ? filtered : messages;
485
+ }
486
+ export { SessionManager, extractAttachments, extractImageAttachments, extractImageUrl, extractMessagesFromState, resolveMessageRole };