@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,284 @@
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
+ buildUserContent: ()=>buildUserContent,
28
+ AgentInvoker: ()=>AgentInvoker
29
+ });
30
+ const external_deepagents_namespaceObject = require("deepagents");
31
+ const external_node_path_namespaceObject = require("node:path");
32
+ const external_uuid_namespaceObject = require("uuid");
33
+ const agentLoader_cjs_namespaceObject = require("../../agent/config/agentLoader.cjs");
34
+ const loader_cjs_namespaceObject = require("../config/loader.cjs");
35
+ const additional_messages_cjs_namespaceObject = require("../../agent/middleware/additional-messages.cjs");
36
+ const hooks_cjs_namespaceObject = require("../../agent/middleware/hooks.cjs");
37
+ const merger_cjs_namespaceObject = require("../../agent/middleware/hooks/merger.cjs");
38
+ const media_compat_cjs_namespaceObject = require("../../agent/middleware/media-compat.cjs");
39
+ const mcpClientManager_cjs_namespaceObject = require("../../agent/config/mcpClientManager.cjs");
40
+ function _define_property(obj, key, value) {
41
+ if (key in obj) Object.defineProperty(obj, key, {
42
+ value: value,
43
+ enumerable: true,
44
+ configurable: true,
45
+ writable: true
46
+ });
47
+ else obj[key] = value;
48
+ return obj;
49
+ }
50
+ class AgentInvoker {
51
+ findAllAgents() {
52
+ const agentConfigs = this.loader.loadAllAgentConfigs();
53
+ return agentConfigs;
54
+ }
55
+ async findAgent(name) {
56
+ return await this.loader.loadAgent(name);
57
+ }
58
+ async invokeAgent(agentName, prompt, sessionId, attachments) {
59
+ try {
60
+ const targetAgent = await this.findAgent(agentName);
61
+ if (!targetAgent) throw new Error(`Agent "${agentName}" not found`);
62
+ this.logger.info(`Invoking agent: ${agentName}`);
63
+ const preview = prompt.trim() || (attachments && attachments.length > 0 ? buildAttachmentPreview(attachments) : "");
64
+ this.outputManager.emitAgentStart(agentName, preview);
65
+ this.logger.debug(`Found ${this.wingmanConfig.toolHooks ? "global hooks" : "no global hooks"}`);
66
+ this.logger.debug(`Found ${targetAgent.toolHooks ? "agent-specific hooks" : "no agent-specific hooks"}`);
67
+ const mergedHooks = (0, merger_cjs_namespaceObject.mergeHooks)(this.wingmanConfig.toolHooks, targetAgent.toolHooks);
68
+ const hookSessionId = sessionId || (0, external_uuid_namespaceObject.v4)();
69
+ const mcpConfigs = [];
70
+ if (targetAgent.mcpConfig) mcpConfigs.push(targetAgent.mcpConfig);
71
+ if (targetAgent.mcpUseGlobal && this.wingmanConfig.mcp) mcpConfigs.push(this.wingmanConfig.mcp);
72
+ if (mcpConfigs.length > 0) {
73
+ this.logger.debug("Initializing MCP client for agent invocation");
74
+ this.mcpManager = new mcpClientManager_cjs_namespaceObject.MCPClientManager(mcpConfigs, this.logger);
75
+ await this.mcpManager.initialize();
76
+ const mcpTools = await this.mcpManager.getTools();
77
+ if (mcpTools.length > 0) {
78
+ const existing = new Set((targetAgent.tools || []).map((tool)=>tool.name));
79
+ const unique = mcpTools.filter((tool)=>!existing.has(tool.name));
80
+ targetAgent.tools = [
81
+ ...targetAgent.tools || [],
82
+ ...unique
83
+ ];
84
+ this.logger.info(`Added ${unique.length} MCP tools to agent`);
85
+ }
86
+ }
87
+ const middleware = [
88
+ (0, media_compat_cjs_namespaceObject.mediaCompatibilityMiddleware)({
89
+ model: targetAgent.model
90
+ }),
91
+ (0, additional_messages_cjs_namespaceObject.additionalMessageMiddleware)({
92
+ workdir: this.workdir,
93
+ defaultOutputDir: this.defaultOutputDir
94
+ })
95
+ ];
96
+ if (mergedHooks) {
97
+ this.logger.debug(`Adding hooks middleware with ${mergedHooks.PreToolUse?.length || 0} PreToolUse hooks, ${mergedHooks.PostToolUse?.length || 0} PostToolUse hooks, and ${mergedHooks.Stop?.length || 0} Stop hooks`);
98
+ middleware.push((0, hooks_cjs_namespaceObject.createHooksMiddleware)(mergedHooks, this.workspace, hookSessionId, this.logger));
99
+ }
100
+ const checkpointer = this.sessionManager?.getCheckpointer();
101
+ const standaloneAgent = (0, external_deepagents_namespaceObject.createDeepAgent)({
102
+ systemPrompt: targetAgent.systemPrompt,
103
+ tools: targetAgent.tools,
104
+ model: targetAgent.model,
105
+ backend: ()=>new external_deepagents_namespaceObject.CompositeBackend(new external_deepagents_namespaceObject.FilesystemBackend({
106
+ rootDir: this.workspace,
107
+ virtualMode: true
108
+ }), {
109
+ "/memories/": new external_deepagents_namespaceObject.FilesystemBackend({
110
+ rootDir: (0, external_node_path_namespaceObject.join)(this.workspace, this.configDir, "memories"),
111
+ virtualMode: true
112
+ })
113
+ }),
114
+ middleware,
115
+ skills: [
116
+ "/skills/"
117
+ ],
118
+ subagents: [
119
+ ...targetAgent.subagents || []
120
+ ],
121
+ checkpointer: checkpointer
122
+ });
123
+ this.logger.debug("Agent created, sending message");
124
+ const userContent = buildUserContent(prompt, attachments);
125
+ if (this.sessionManager && sessionId) {
126
+ this.logger.debug(`Using streaming with session: ${sessionId}`);
127
+ const stream = await standaloneAgent.streamEvents({
128
+ messages: [
129
+ {
130
+ role: "user",
131
+ content: userContent
132
+ }
133
+ ]
134
+ }, {
135
+ recursionLimit: this.wingmanConfig.recursionLimit,
136
+ configurable: {
137
+ thread_id: sessionId
138
+ },
139
+ version: "v2"
140
+ });
141
+ for await (const chunk of stream)this.outputManager.emitAgentStream(chunk);
142
+ this.logger.info("Agent streaming completed successfully");
143
+ this.outputManager.emitAgentComplete({
144
+ streaming: true
145
+ });
146
+ return {
147
+ streaming: true
148
+ };
149
+ }
150
+ {
151
+ this.logger.debug("Using blocking invoke (no session manager)");
152
+ const result = await standaloneAgent.invoke({
153
+ messages: [
154
+ {
155
+ role: "user",
156
+ content: userContent
157
+ }
158
+ ]
159
+ }, {
160
+ recursionLimit: this.wingmanConfig.recursionLimit
161
+ });
162
+ this.logger.info("Agent completed successfully");
163
+ this.outputManager.emitAgentComplete(result);
164
+ return result;
165
+ }
166
+ } catch (error) {
167
+ this.logger.error(`Agent invocation failed: ${error instanceof Error ? error.message : String(error)}`);
168
+ this.outputManager.emitAgentError(error);
169
+ throw error;
170
+ } finally{
171
+ if (this.mcpManager) {
172
+ this.logger.debug("Cleaning up MCP client");
173
+ await this.mcpManager.cleanup();
174
+ this.mcpManager = null;
175
+ }
176
+ }
177
+ }
178
+ listAgents() {
179
+ const agents = this.findAllAgents();
180
+ return agents.map((a)=>({
181
+ name: a.name,
182
+ description: a.description
183
+ }));
184
+ }
185
+ constructor(options){
186
+ _define_property(this, "loader", void 0);
187
+ _define_property(this, "outputManager", void 0);
188
+ _define_property(this, "logger", void 0);
189
+ _define_property(this, "workspace", void 0);
190
+ _define_property(this, "configDir", void 0);
191
+ _define_property(this, "wingmanConfig", void 0);
192
+ _define_property(this, "mcpManager", null);
193
+ _define_property(this, "sessionManager", null);
194
+ _define_property(this, "workdir", null);
195
+ _define_property(this, "defaultOutputDir", null);
196
+ this.outputManager = options.outputManager;
197
+ this.logger = options.logger;
198
+ this.workspace = options.workspace || process.cwd();
199
+ this.configDir = options.configDir || ".wingman";
200
+ this.sessionManager = options.sessionManager || null;
201
+ this.workdir = options.workdir || null;
202
+ this.defaultOutputDir = options.defaultOutputDir || null;
203
+ const configLoader = new loader_cjs_namespaceObject.WingmanConfigLoader(this.configDir, this.workspace);
204
+ this.wingmanConfig = configLoader.loadConfig();
205
+ this.loader = new agentLoader_cjs_namespaceObject.AgentLoader(this.configDir, this.workspace, this.wingmanConfig);
206
+ }
207
+ }
208
+ function buildUserContent(prompt, attachments) {
209
+ const text = prompt?.trim() ?? "";
210
+ if (!attachments || 0 === attachments.length) return text;
211
+ const parts = [];
212
+ if (text) parts.push({
213
+ type: "text",
214
+ text
215
+ });
216
+ for (const attachment of attachments)if (attachment?.dataUrl) {
217
+ if (isAudioAttachment(attachment)) {
218
+ const audioPart = buildAudioPart(attachment);
219
+ if (audioPart) parts.push(audioPart);
220
+ continue;
221
+ }
222
+ parts.push({
223
+ type: "image_url",
224
+ image_url: {
225
+ url: attachment.dataUrl
226
+ }
227
+ });
228
+ }
229
+ if (0 === parts.length) {
230
+ if (!text) throw new Error("Attachment payload is empty or invalid.");
231
+ return text;
232
+ }
233
+ return parts;
234
+ }
235
+ function isAudioAttachment(attachment) {
236
+ if ("audio" === attachment.kind) return true;
237
+ if (attachment.mimeType?.startsWith("audio/")) return true;
238
+ if (attachment.dataUrl?.startsWith("data:audio/")) return true;
239
+ return false;
240
+ }
241
+ function buildAudioPart(attachment) {
242
+ const parsed = parseDataUrl(attachment.dataUrl);
243
+ const mimeType = attachment.mimeType || parsed.mimeType;
244
+ if (parsed.data) return {
245
+ type: "audio",
246
+ source_type: "base64",
247
+ data: parsed.data,
248
+ mime_type: mimeType
249
+ };
250
+ return {
251
+ type: "audio",
252
+ source_type: "url",
253
+ url: attachment.dataUrl,
254
+ mime_type: mimeType
255
+ };
256
+ }
257
+ function parseDataUrl(dataUrl) {
258
+ if (!dataUrl.startsWith("data:")) return {};
259
+ const match = dataUrl.match(/^data:([^;]+);base64,(.+)$/);
260
+ if (!match) return {};
261
+ return {
262
+ mimeType: match[1],
263
+ data: match[2]
264
+ };
265
+ }
266
+ function buildAttachmentPreview(attachments) {
267
+ let hasAudio = false;
268
+ let hasImage = false;
269
+ for (const attachment of attachments)if (isAudioAttachment(attachment)) hasAudio = true;
270
+ else hasImage = true;
271
+ if (hasAudio && hasImage) return "[attachments]";
272
+ if (hasAudio) return "[audio]";
273
+ if (hasImage) return "[image]";
274
+ return "";
275
+ }
276
+ exports.AgentInvoker = __webpack_exports__.AgentInvoker;
277
+ exports.buildUserContent = __webpack_exports__.buildUserContent;
278
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
279
+ "AgentInvoker",
280
+ "buildUserContent"
281
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
282
+ Object.defineProperty(exports, '__esModule', {
283
+ value: true
284
+ });
@@ -0,0 +1,77 @@
1
+ import type { OutputManager } from "./outputManager.js";
2
+ import type { Logger } from "../../logger.js";
3
+ import type { WingmanAgentConfig } from "@/agent/config/agentConfig.js";
4
+ import type { WingmanAgent } from "@/types/agents.js";
5
+ import { SessionManager } from "./sessionManager.js";
6
+ export interface AgentInvokerOptions {
7
+ workspace?: string;
8
+ configDir?: string;
9
+ outputManager: OutputManager;
10
+ logger: Logger;
11
+ sessionManager?: SessionManager;
12
+ workdir?: string | null;
13
+ defaultOutputDir?: string | null;
14
+ }
15
+ export type ImageAttachment = {
16
+ kind?: "image";
17
+ dataUrl: string;
18
+ mimeType?: string;
19
+ name?: string;
20
+ size?: number;
21
+ };
22
+ export type AudioAttachment = {
23
+ kind: "audio";
24
+ dataUrl: string;
25
+ mimeType?: string;
26
+ name?: string;
27
+ size?: number;
28
+ };
29
+ export type MediaAttachment = ImageAttachment | AudioAttachment;
30
+ export declare class AgentInvoker {
31
+ private loader;
32
+ private outputManager;
33
+ private logger;
34
+ private workspace;
35
+ private configDir;
36
+ private wingmanConfig;
37
+ private mcpManager;
38
+ private sessionManager;
39
+ private workdir;
40
+ private defaultOutputDir;
41
+ constructor(options: AgentInvokerOptions);
42
+ findAllAgents(): WingmanAgentConfig[];
43
+ /**
44
+ * Find an agent by name
45
+ */
46
+ findAgent(name: string): Promise<WingmanAgent | undefined>;
47
+ /**
48
+ * Invoke a specific agent directly (bypassing main orchestration)
49
+ */
50
+ invokeAgent(agentName: string, prompt: string, sessionId?: string, attachments?: MediaAttachment[]): Promise<any>;
51
+ /**
52
+ * List all available agents with their descriptions
53
+ */
54
+ listAgents(): Array<{
55
+ name: string;
56
+ description: string;
57
+ }>;
58
+ }
59
+ export declare function buildUserContent(prompt: string, attachments?: MediaAttachment[]): string | Array<{
60
+ type: "text";
61
+ text: string;
62
+ } | {
63
+ type: "image_url";
64
+ image_url: {
65
+ url: string;
66
+ };
67
+ } | {
68
+ type: "audio";
69
+ source_type: "base64";
70
+ data: string;
71
+ mime_type?: string;
72
+ } | {
73
+ type: "audio";
74
+ source_type: "url";
75
+ url: string;
76
+ mime_type?: string;
77
+ }>;
@@ -0,0 +1,247 @@
1
+ import { CompositeBackend, FilesystemBackend, createDeepAgent } from "deepagents";
2
+ import { join } from "node:path";
3
+ import { v4 } from "uuid";
4
+ import { AgentLoader } from "../../agent/config/agentLoader.js";
5
+ import { WingmanConfigLoader } from "../config/loader.js";
6
+ import { additionalMessageMiddleware } from "../../agent/middleware/additional-messages.js";
7
+ import { createHooksMiddleware } from "../../agent/middleware/hooks.js";
8
+ import { mergeHooks } from "../../agent/middleware/hooks/merger.js";
9
+ import { mediaCompatibilityMiddleware } from "../../agent/middleware/media-compat.js";
10
+ import { MCPClientManager } from "../../agent/config/mcpClientManager.js";
11
+ function _define_property(obj, key, value) {
12
+ if (key in obj) Object.defineProperty(obj, key, {
13
+ value: value,
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true
17
+ });
18
+ else obj[key] = value;
19
+ return obj;
20
+ }
21
+ class AgentInvoker {
22
+ findAllAgents() {
23
+ const agentConfigs = this.loader.loadAllAgentConfigs();
24
+ return agentConfigs;
25
+ }
26
+ async findAgent(name) {
27
+ return await this.loader.loadAgent(name);
28
+ }
29
+ async invokeAgent(agentName, prompt, sessionId, attachments) {
30
+ try {
31
+ const targetAgent = await this.findAgent(agentName);
32
+ if (!targetAgent) throw new Error(`Agent "${agentName}" not found`);
33
+ this.logger.info(`Invoking agent: ${agentName}`);
34
+ const preview = prompt.trim() || (attachments && attachments.length > 0 ? buildAttachmentPreview(attachments) : "");
35
+ this.outputManager.emitAgentStart(agentName, preview);
36
+ this.logger.debug(`Found ${this.wingmanConfig.toolHooks ? "global hooks" : "no global hooks"}`);
37
+ this.logger.debug(`Found ${targetAgent.toolHooks ? "agent-specific hooks" : "no agent-specific hooks"}`);
38
+ const mergedHooks = mergeHooks(this.wingmanConfig.toolHooks, targetAgent.toolHooks);
39
+ const hookSessionId = sessionId || v4();
40
+ const mcpConfigs = [];
41
+ if (targetAgent.mcpConfig) mcpConfigs.push(targetAgent.mcpConfig);
42
+ if (targetAgent.mcpUseGlobal && this.wingmanConfig.mcp) mcpConfigs.push(this.wingmanConfig.mcp);
43
+ if (mcpConfigs.length > 0) {
44
+ this.logger.debug("Initializing MCP client for agent invocation");
45
+ this.mcpManager = new MCPClientManager(mcpConfigs, this.logger);
46
+ await this.mcpManager.initialize();
47
+ const mcpTools = await this.mcpManager.getTools();
48
+ if (mcpTools.length > 0) {
49
+ const existing = new Set((targetAgent.tools || []).map((tool)=>tool.name));
50
+ const unique = mcpTools.filter((tool)=>!existing.has(tool.name));
51
+ targetAgent.tools = [
52
+ ...targetAgent.tools || [],
53
+ ...unique
54
+ ];
55
+ this.logger.info(`Added ${unique.length} MCP tools to agent`);
56
+ }
57
+ }
58
+ const middleware = [
59
+ mediaCompatibilityMiddleware({
60
+ model: targetAgent.model
61
+ }),
62
+ additionalMessageMiddleware({
63
+ workdir: this.workdir,
64
+ defaultOutputDir: this.defaultOutputDir
65
+ })
66
+ ];
67
+ if (mergedHooks) {
68
+ this.logger.debug(`Adding hooks middleware with ${mergedHooks.PreToolUse?.length || 0} PreToolUse hooks, ${mergedHooks.PostToolUse?.length || 0} PostToolUse hooks, and ${mergedHooks.Stop?.length || 0} Stop hooks`);
69
+ middleware.push(createHooksMiddleware(mergedHooks, this.workspace, hookSessionId, this.logger));
70
+ }
71
+ const checkpointer = this.sessionManager?.getCheckpointer();
72
+ const standaloneAgent = createDeepAgent({
73
+ systemPrompt: targetAgent.systemPrompt,
74
+ tools: targetAgent.tools,
75
+ model: targetAgent.model,
76
+ backend: ()=>new CompositeBackend(new FilesystemBackend({
77
+ rootDir: this.workspace,
78
+ virtualMode: true
79
+ }), {
80
+ "/memories/": new FilesystemBackend({
81
+ rootDir: join(this.workspace, this.configDir, "memories"),
82
+ virtualMode: true
83
+ })
84
+ }),
85
+ middleware,
86
+ skills: [
87
+ "/skills/"
88
+ ],
89
+ subagents: [
90
+ ...targetAgent.subagents || []
91
+ ],
92
+ checkpointer: checkpointer
93
+ });
94
+ this.logger.debug("Agent created, sending message");
95
+ const userContent = buildUserContent(prompt, attachments);
96
+ if (this.sessionManager && sessionId) {
97
+ this.logger.debug(`Using streaming with session: ${sessionId}`);
98
+ const stream = await standaloneAgent.streamEvents({
99
+ messages: [
100
+ {
101
+ role: "user",
102
+ content: userContent
103
+ }
104
+ ]
105
+ }, {
106
+ recursionLimit: this.wingmanConfig.recursionLimit,
107
+ configurable: {
108
+ thread_id: sessionId
109
+ },
110
+ version: "v2"
111
+ });
112
+ for await (const chunk of stream)this.outputManager.emitAgentStream(chunk);
113
+ this.logger.info("Agent streaming completed successfully");
114
+ this.outputManager.emitAgentComplete({
115
+ streaming: true
116
+ });
117
+ return {
118
+ streaming: true
119
+ };
120
+ }
121
+ {
122
+ this.logger.debug("Using blocking invoke (no session manager)");
123
+ const result = await standaloneAgent.invoke({
124
+ messages: [
125
+ {
126
+ role: "user",
127
+ content: userContent
128
+ }
129
+ ]
130
+ }, {
131
+ recursionLimit: this.wingmanConfig.recursionLimit
132
+ });
133
+ this.logger.info("Agent completed successfully");
134
+ this.outputManager.emitAgentComplete(result);
135
+ return result;
136
+ }
137
+ } catch (error) {
138
+ this.logger.error(`Agent invocation failed: ${error instanceof Error ? error.message : String(error)}`);
139
+ this.outputManager.emitAgentError(error);
140
+ throw error;
141
+ } finally{
142
+ if (this.mcpManager) {
143
+ this.logger.debug("Cleaning up MCP client");
144
+ await this.mcpManager.cleanup();
145
+ this.mcpManager = null;
146
+ }
147
+ }
148
+ }
149
+ listAgents() {
150
+ const agents = this.findAllAgents();
151
+ return agents.map((a)=>({
152
+ name: a.name,
153
+ description: a.description
154
+ }));
155
+ }
156
+ constructor(options){
157
+ _define_property(this, "loader", void 0);
158
+ _define_property(this, "outputManager", void 0);
159
+ _define_property(this, "logger", void 0);
160
+ _define_property(this, "workspace", void 0);
161
+ _define_property(this, "configDir", void 0);
162
+ _define_property(this, "wingmanConfig", void 0);
163
+ _define_property(this, "mcpManager", null);
164
+ _define_property(this, "sessionManager", null);
165
+ _define_property(this, "workdir", null);
166
+ _define_property(this, "defaultOutputDir", null);
167
+ this.outputManager = options.outputManager;
168
+ this.logger = options.logger;
169
+ this.workspace = options.workspace || process.cwd();
170
+ this.configDir = options.configDir || ".wingman";
171
+ this.sessionManager = options.sessionManager || null;
172
+ this.workdir = options.workdir || null;
173
+ this.defaultOutputDir = options.defaultOutputDir || null;
174
+ const configLoader = new WingmanConfigLoader(this.configDir, this.workspace);
175
+ this.wingmanConfig = configLoader.loadConfig();
176
+ this.loader = new AgentLoader(this.configDir, this.workspace, this.wingmanConfig);
177
+ }
178
+ }
179
+ function buildUserContent(prompt, attachments) {
180
+ const text = prompt?.trim() ?? "";
181
+ if (!attachments || 0 === attachments.length) return text;
182
+ const parts = [];
183
+ if (text) parts.push({
184
+ type: "text",
185
+ text
186
+ });
187
+ for (const attachment of attachments)if (attachment?.dataUrl) {
188
+ if (isAudioAttachment(attachment)) {
189
+ const audioPart = buildAudioPart(attachment);
190
+ if (audioPart) parts.push(audioPart);
191
+ continue;
192
+ }
193
+ parts.push({
194
+ type: "image_url",
195
+ image_url: {
196
+ url: attachment.dataUrl
197
+ }
198
+ });
199
+ }
200
+ if (0 === parts.length) {
201
+ if (!text) throw new Error("Attachment payload is empty or invalid.");
202
+ return text;
203
+ }
204
+ return parts;
205
+ }
206
+ function isAudioAttachment(attachment) {
207
+ if ("audio" === attachment.kind) return true;
208
+ if (attachment.mimeType?.startsWith("audio/")) return true;
209
+ if (attachment.dataUrl?.startsWith("data:audio/")) return true;
210
+ return false;
211
+ }
212
+ function buildAudioPart(attachment) {
213
+ const parsed = parseDataUrl(attachment.dataUrl);
214
+ const mimeType = attachment.mimeType || parsed.mimeType;
215
+ if (parsed.data) return {
216
+ type: "audio",
217
+ source_type: "base64",
218
+ data: parsed.data,
219
+ mime_type: mimeType
220
+ };
221
+ return {
222
+ type: "audio",
223
+ source_type: "url",
224
+ url: attachment.dataUrl,
225
+ mime_type: mimeType
226
+ };
227
+ }
228
+ function parseDataUrl(dataUrl) {
229
+ if (!dataUrl.startsWith("data:")) return {};
230
+ const match = dataUrl.match(/^data:([^;]+);base64,(.+)$/);
231
+ if (!match) return {};
232
+ return {
233
+ mimeType: match[1],
234
+ data: match[2]
235
+ };
236
+ }
237
+ function buildAttachmentPreview(attachments) {
238
+ let hasAudio = false;
239
+ let hasImage = false;
240
+ for (const attachment of attachments)if (isAudioAttachment(attachment)) hasAudio = true;
241
+ else hasImage = true;
242
+ if (hasAudio && hasImage) return "[attachments]";
243
+ if (hasAudio) return "[audio]";
244
+ if (hasImage) return "[image]";
245
+ return "";
246
+ }
247
+ export { AgentInvoker, buildUserContent };