@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,264 @@
1
+ "use strict";
2
+ var __webpack_exports__ = {};
3
+ const external_vitest_namespaceObject = require("vitest");
4
+ const agentLoader_cjs_namespaceObject = require("../../agent/config/agentLoader.cjs");
5
+ const external_fs_namespaceObject = require("fs");
6
+ const external_path_namespaceObject = require("path");
7
+ const external_os_namespaceObject = require("os");
8
+ (0, external_vitest_namespaceObject.describe)("Agent Invocation Integration", ()=>{
9
+ let testDir;
10
+ let configDir;
11
+ let agentsDir;
12
+ (0, external_vitest_namespaceObject.beforeEach)(()=>{
13
+ testDir = (0, external_path_namespaceObject.join)((0, external_os_namespaceObject.tmpdir)(), `wingman-integration-${Date.now()}`);
14
+ configDir = (0, external_path_namespaceObject.join)(testDir, ".wingman");
15
+ agentsDir = (0, external_path_namespaceObject.join)(configDir, "agents");
16
+ (0, external_fs_namespaceObject.mkdirSync)(agentsDir, {
17
+ recursive: true
18
+ });
19
+ });
20
+ (0, external_vitest_namespaceObject.afterEach)(()=>{
21
+ if ((0, external_fs_namespaceObject.existsSync)(testDir)) (0, external_fs_namespaceObject.rmSync)(testDir, {
22
+ recursive: true,
23
+ force: true
24
+ });
25
+ });
26
+ (0, external_vitest_namespaceObject.describe)("Agent Loading", ()=>{
27
+ (0, external_vitest_namespaceObject.it)("should load agent with tools", ()=>{
28
+ const agentConfig = {
29
+ name: "test-agent",
30
+ description: "Test agent for integration testing",
31
+ systemPrompt: "You are a test agent",
32
+ tools: [
33
+ "think",
34
+ "internet_search"
35
+ ]
36
+ };
37
+ const agentDir = (0, external_path_namespaceObject.join)(agentsDir, "test-agent");
38
+ (0, external_fs_namespaceObject.mkdirSync)(agentDir, {
39
+ recursive: true
40
+ });
41
+ (0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(agentConfig));
42
+ const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
43
+ const agents = loader.loadAllAgentConfigs();
44
+ (0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
45
+ (0, external_vitest_namespaceObject.expect)(agents[0].name).toBe("test-agent");
46
+ (0, external_vitest_namespaceObject.expect)(agents[0].tools).toEqual([
47
+ "think",
48
+ "internet_search"
49
+ ]);
50
+ });
51
+ (0, external_vitest_namespaceObject.it)("should load multiple agents", ()=>{
52
+ const agent1Config = {
53
+ name: "agent1",
54
+ description: "First test agent",
55
+ systemPrompt: "You are agent 1",
56
+ tools: [
57
+ "think"
58
+ ]
59
+ };
60
+ const agent2Config = {
61
+ name: "agent2",
62
+ description: "Second test agent",
63
+ systemPrompt: "You are agent 2",
64
+ tools: [
65
+ "internet_search"
66
+ ]
67
+ };
68
+ const agent1Dir = (0, external_path_namespaceObject.join)(agentsDir, "agent1");
69
+ const agent2Dir = (0, external_path_namespaceObject.join)(agentsDir, "agent2");
70
+ (0, external_fs_namespaceObject.mkdirSync)(agent1Dir, {
71
+ recursive: true
72
+ });
73
+ (0, external_fs_namespaceObject.mkdirSync)(agent2Dir, {
74
+ recursive: true
75
+ });
76
+ (0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agent1Dir, "agent.json"), JSON.stringify(agent1Config));
77
+ (0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agent2Dir, "agent.json"), JSON.stringify(agent2Config));
78
+ const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
79
+ const agents = loader.loadAllAgentConfigs();
80
+ (0, external_vitest_namespaceObject.expect)(agents).toHaveLength(2);
81
+ (0, external_vitest_namespaceObject.expect)(agents.map((a)=>a.name)).toContain("agent1");
82
+ (0, external_vitest_namespaceObject.expect)(agents.map((a)=>a.name)).toContain("agent2");
83
+ });
84
+ (0, external_vitest_namespaceObject.it)("should create agent with command_execute tool and safety options", ()=>{
85
+ const agentConfig = {
86
+ name: "coder-agent",
87
+ description: "Agent with command execution",
88
+ systemPrompt: "You are a coding agent",
89
+ tools: [
90
+ "command_execute"
91
+ ],
92
+ blockedCommands: [
93
+ "rm",
94
+ "sudo"
95
+ ],
96
+ allowScriptExecution: false,
97
+ commandTimeout: 30000
98
+ };
99
+ const agentDir = (0, external_path_namespaceObject.join)(agentsDir, "coder-agent");
100
+ (0, external_fs_namespaceObject.mkdirSync)(agentDir, {
101
+ recursive: true
102
+ });
103
+ (0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(agentConfig));
104
+ const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
105
+ const agents = loader.loadAllAgentConfigs();
106
+ (0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
107
+ (0, external_vitest_namespaceObject.expect)(agents[0].name).toBe("coder-agent");
108
+ (0, external_vitest_namespaceObject.expect)(agents[0].tools).toEqual([
109
+ "command_execute"
110
+ ]);
111
+ (0, external_vitest_namespaceObject.expect)(agents[0].blockedCommands).toEqual([
112
+ "rm",
113
+ "sudo"
114
+ ]);
115
+ (0, external_vitest_namespaceObject.expect)(agents[0].allowScriptExecution).toBe(false);
116
+ (0, external_vitest_namespaceObject.expect)(agents[0].commandTimeout).toBe(30000);
117
+ });
118
+ (0, external_vitest_namespaceObject.it)("should find specific agent by name", async ()=>{
119
+ const agentConfig = {
120
+ name: "specific-agent",
121
+ description: "Specific test agent",
122
+ systemPrompt: "You are a specific agent"
123
+ };
124
+ const agentDir = (0, external_path_namespaceObject.join)(agentsDir, "specific-agent");
125
+ (0, external_fs_namespaceObject.mkdirSync)(agentDir, {
126
+ recursive: true
127
+ });
128
+ (0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(agentConfig));
129
+ const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
130
+ const agent = await loader.loadAgent("specific-agent");
131
+ (0, external_vitest_namespaceObject.expect)(agent).toBeDefined();
132
+ (0, external_vitest_namespaceObject.expect)(agent?.name).toBe("specific-agent");
133
+ });
134
+ (0, external_vitest_namespaceObject.it)("should return undefined for non-existent agent", async ()=>{
135
+ const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
136
+ const agent = await loader.loadAgent("non-existent-agent");
137
+ (0, external_vitest_namespaceObject.expect)(agent).toBeUndefined();
138
+ });
139
+ });
140
+ (0, external_vitest_namespaceObject.describe)("Agent Configuration Validation", ()=>{
141
+ (0, external_vitest_namespaceObject.it)("should skip agents with invalid configuration", ()=>{
142
+ const validConfig = {
143
+ name: "valid-agent",
144
+ description: "Valid agent",
145
+ systemPrompt: "You are valid"
146
+ };
147
+ const invalidConfig = {
148
+ name: "invalid-agent"
149
+ };
150
+ const validDir = (0, external_path_namespaceObject.join)(agentsDir, "valid-agent");
151
+ const invalidDir = (0, external_path_namespaceObject.join)(agentsDir, "invalid-agent");
152
+ (0, external_fs_namespaceObject.mkdirSync)(validDir, {
153
+ recursive: true
154
+ });
155
+ (0, external_fs_namespaceObject.mkdirSync)(invalidDir, {
156
+ recursive: true
157
+ });
158
+ (0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(validDir, "agent.json"), JSON.stringify(validConfig));
159
+ (0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(invalidDir, "agent.json"), JSON.stringify(invalidConfig));
160
+ const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
161
+ const agents = loader.loadAllAgentConfigs();
162
+ (0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
163
+ (0, external_vitest_namespaceObject.expect)(agents[0].name).toBe("valid-agent");
164
+ });
165
+ (0, external_vitest_namespaceObject.it)("should skip agents with invalid tool names", ()=>{
166
+ const agentConfig = {
167
+ name: "test-agent",
168
+ description: "Test agent with invalid tool",
169
+ systemPrompt: "You are a test agent",
170
+ tools: [
171
+ "invalid_tool"
172
+ ]
173
+ };
174
+ const agentDir = (0, external_path_namespaceObject.join)(agentsDir, "test-agent");
175
+ (0, external_fs_namespaceObject.mkdirSync)(agentDir, {
176
+ recursive: true
177
+ });
178
+ (0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(agentConfig));
179
+ const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
180
+ const agents = loader.loadAllAgentConfigs();
181
+ (0, external_vitest_namespaceObject.expect)(agents).toHaveLength(0);
182
+ });
183
+ });
184
+ (0, external_vitest_namespaceObject.describe)("Agent with Model Override", ()=>{
185
+ (0, external_vitest_namespaceObject.it)("should support model override", ()=>{
186
+ const agentConfig = {
187
+ name: "custom-model-agent",
188
+ description: "Agent with custom model",
189
+ systemPrompt: "You are an agent with custom model",
190
+ model: "anthropic:claude-opus-4-5"
191
+ };
192
+ const agentDir = (0, external_path_namespaceObject.join)(agentsDir, "custom-model-agent");
193
+ (0, external_fs_namespaceObject.mkdirSync)(agentDir, {
194
+ recursive: true
195
+ });
196
+ (0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(agentConfig));
197
+ const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
198
+ const agents = loader.loadAllAgentConfigs();
199
+ (0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
200
+ (0, external_vitest_namespaceObject.expect)(agents[0].name).toBe("custom-model-agent");
201
+ (0, external_vitest_namespaceObject.expect)(agents[0].model).toBeDefined();
202
+ });
203
+ });
204
+ (0, external_vitest_namespaceObject.describe)("Subagent Loading", ()=>{
205
+ (0, external_vitest_namespaceObject.it)("should load agent with subagents", ()=>{
206
+ const agentConfig = {
207
+ name: "parent-agent",
208
+ description: "Parent agent with subagents",
209
+ systemPrompt: "You are a parent agent",
210
+ subagents: [
211
+ {
212
+ name: "subagent1",
213
+ description: "First subagent",
214
+ systemPrompt: "You are subagent 1",
215
+ tools: [
216
+ "think"
217
+ ]
218
+ },
219
+ {
220
+ name: "subagent2",
221
+ description: "Second subagent",
222
+ systemPrompt: "You are subagent 2",
223
+ tools: [
224
+ "internet_search"
225
+ ]
226
+ }
227
+ ]
228
+ };
229
+ const agentDir = (0, external_path_namespaceObject.join)(agentsDir, "parent-agent");
230
+ (0, external_fs_namespaceObject.mkdirSync)(agentDir, {
231
+ recursive: true
232
+ });
233
+ (0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(agentConfig));
234
+ const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
235
+ const agents = loader.loadAllAgentConfigs();
236
+ (0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
237
+ (0, external_vitest_namespaceObject.expect)(agents[0].name).toBe("parent-agent");
238
+ (0, external_vitest_namespaceObject.expect)(agents[0].subAgents).toBeDefined();
239
+ (0, external_vitest_namespaceObject.expect)(agents[0].subAgents?.length).toBe(2);
240
+ (0, external_vitest_namespaceObject.expect)(agents[0].subAgents?.[0].name).toBe("subagent1");
241
+ (0, external_vitest_namespaceObject.expect)(agents[0].subAgents?.[1].name).toBe("subagent2");
242
+ });
243
+ });
244
+ (0, external_vitest_namespaceObject.describe)("Empty Workspace", ()=>{
245
+ (0, external_vitest_namespaceObject.it)("should return empty array when no agents exist", ()=>{
246
+ const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
247
+ const agents = loader.loadAllAgentConfigs();
248
+ (0, external_vitest_namespaceObject.expect)(agents).toEqual([]);
249
+ });
250
+ (0, external_vitest_namespaceObject.it)("should return empty array when agents directory doesn't exist", ()=>{
251
+ (0, external_fs_namespaceObject.rmSync)(agentsDir, {
252
+ recursive: true,
253
+ force: true
254
+ });
255
+ const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
256
+ const agents = loader.loadAllAgentConfigs();
257
+ (0, external_vitest_namespaceObject.expect)(agents).toEqual([]);
258
+ });
259
+ });
260
+ });
261
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
262
+ Object.defineProperty(exports, '__esModule', {
263
+ value: true
264
+ });
@@ -0,0 +1,258 @@
1
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
2
+ import { AgentLoader } from "../../agent/config/agentLoader.js";
3
+ import { existsSync, mkdirSync, rmSync, writeFileSync } from "fs";
4
+ import { join } from "path";
5
+ import { tmpdir } from "os";
6
+ describe("Agent Invocation Integration", ()=>{
7
+ let testDir;
8
+ let configDir;
9
+ let agentsDir;
10
+ beforeEach(()=>{
11
+ testDir = join(tmpdir(), `wingman-integration-${Date.now()}`);
12
+ configDir = join(testDir, ".wingman");
13
+ agentsDir = join(configDir, "agents");
14
+ mkdirSync(agentsDir, {
15
+ recursive: true
16
+ });
17
+ });
18
+ afterEach(()=>{
19
+ if (existsSync(testDir)) rmSync(testDir, {
20
+ recursive: true,
21
+ force: true
22
+ });
23
+ });
24
+ describe("Agent Loading", ()=>{
25
+ it("should load agent with tools", ()=>{
26
+ const agentConfig = {
27
+ name: "test-agent",
28
+ description: "Test agent for integration testing",
29
+ systemPrompt: "You are a test agent",
30
+ tools: [
31
+ "think",
32
+ "internet_search"
33
+ ]
34
+ };
35
+ const agentDir = join(agentsDir, "test-agent");
36
+ mkdirSync(agentDir, {
37
+ recursive: true
38
+ });
39
+ writeFileSync(join(agentDir, "agent.json"), JSON.stringify(agentConfig));
40
+ const loader = new AgentLoader(configDir, testDir);
41
+ const agents = loader.loadAllAgentConfigs();
42
+ expect(agents).toHaveLength(1);
43
+ expect(agents[0].name).toBe("test-agent");
44
+ expect(agents[0].tools).toEqual([
45
+ "think",
46
+ "internet_search"
47
+ ]);
48
+ });
49
+ it("should load multiple agents", ()=>{
50
+ const agent1Config = {
51
+ name: "agent1",
52
+ description: "First test agent",
53
+ systemPrompt: "You are agent 1",
54
+ tools: [
55
+ "think"
56
+ ]
57
+ };
58
+ const agent2Config = {
59
+ name: "agent2",
60
+ description: "Second test agent",
61
+ systemPrompt: "You are agent 2",
62
+ tools: [
63
+ "internet_search"
64
+ ]
65
+ };
66
+ const agent1Dir = join(agentsDir, "agent1");
67
+ const agent2Dir = join(agentsDir, "agent2");
68
+ mkdirSync(agent1Dir, {
69
+ recursive: true
70
+ });
71
+ mkdirSync(agent2Dir, {
72
+ recursive: true
73
+ });
74
+ writeFileSync(join(agent1Dir, "agent.json"), JSON.stringify(agent1Config));
75
+ writeFileSync(join(agent2Dir, "agent.json"), JSON.stringify(agent2Config));
76
+ const loader = new AgentLoader(configDir, testDir);
77
+ const agents = loader.loadAllAgentConfigs();
78
+ expect(agents).toHaveLength(2);
79
+ expect(agents.map((a)=>a.name)).toContain("agent1");
80
+ expect(agents.map((a)=>a.name)).toContain("agent2");
81
+ });
82
+ it("should create agent with command_execute tool and safety options", ()=>{
83
+ const agentConfig = {
84
+ name: "coder-agent",
85
+ description: "Agent with command execution",
86
+ systemPrompt: "You are a coding agent",
87
+ tools: [
88
+ "command_execute"
89
+ ],
90
+ blockedCommands: [
91
+ "rm",
92
+ "sudo"
93
+ ],
94
+ allowScriptExecution: false,
95
+ commandTimeout: 30000
96
+ };
97
+ const agentDir = join(agentsDir, "coder-agent");
98
+ mkdirSync(agentDir, {
99
+ recursive: true
100
+ });
101
+ writeFileSync(join(agentDir, "agent.json"), JSON.stringify(agentConfig));
102
+ const loader = new AgentLoader(configDir, testDir);
103
+ const agents = loader.loadAllAgentConfigs();
104
+ expect(agents).toHaveLength(1);
105
+ expect(agents[0].name).toBe("coder-agent");
106
+ expect(agents[0].tools).toEqual([
107
+ "command_execute"
108
+ ]);
109
+ expect(agents[0].blockedCommands).toEqual([
110
+ "rm",
111
+ "sudo"
112
+ ]);
113
+ expect(agents[0].allowScriptExecution).toBe(false);
114
+ expect(agents[0].commandTimeout).toBe(30000);
115
+ });
116
+ it("should find specific agent by name", async ()=>{
117
+ const agentConfig = {
118
+ name: "specific-agent",
119
+ description: "Specific test agent",
120
+ systemPrompt: "You are a specific agent"
121
+ };
122
+ const agentDir = join(agentsDir, "specific-agent");
123
+ mkdirSync(agentDir, {
124
+ recursive: true
125
+ });
126
+ writeFileSync(join(agentDir, "agent.json"), JSON.stringify(agentConfig));
127
+ const loader = new AgentLoader(configDir, testDir);
128
+ const agent = await loader.loadAgent("specific-agent");
129
+ expect(agent).toBeDefined();
130
+ expect(agent?.name).toBe("specific-agent");
131
+ });
132
+ it("should return undefined for non-existent agent", async ()=>{
133
+ const loader = new AgentLoader(configDir, testDir);
134
+ const agent = await loader.loadAgent("non-existent-agent");
135
+ expect(agent).toBeUndefined();
136
+ });
137
+ });
138
+ describe("Agent Configuration Validation", ()=>{
139
+ it("should skip agents with invalid configuration", ()=>{
140
+ const validConfig = {
141
+ name: "valid-agent",
142
+ description: "Valid agent",
143
+ systemPrompt: "You are valid"
144
+ };
145
+ const invalidConfig = {
146
+ name: "invalid-agent"
147
+ };
148
+ const validDir = join(agentsDir, "valid-agent");
149
+ const invalidDir = join(agentsDir, "invalid-agent");
150
+ mkdirSync(validDir, {
151
+ recursive: true
152
+ });
153
+ mkdirSync(invalidDir, {
154
+ recursive: true
155
+ });
156
+ writeFileSync(join(validDir, "agent.json"), JSON.stringify(validConfig));
157
+ writeFileSync(join(invalidDir, "agent.json"), JSON.stringify(invalidConfig));
158
+ const loader = new AgentLoader(configDir, testDir);
159
+ const agents = loader.loadAllAgentConfigs();
160
+ expect(agents).toHaveLength(1);
161
+ expect(agents[0].name).toBe("valid-agent");
162
+ });
163
+ it("should skip agents with invalid tool names", ()=>{
164
+ const agentConfig = {
165
+ name: "test-agent",
166
+ description: "Test agent with invalid tool",
167
+ systemPrompt: "You are a test agent",
168
+ tools: [
169
+ "invalid_tool"
170
+ ]
171
+ };
172
+ const agentDir = join(agentsDir, "test-agent");
173
+ mkdirSync(agentDir, {
174
+ recursive: true
175
+ });
176
+ writeFileSync(join(agentDir, "agent.json"), JSON.stringify(agentConfig));
177
+ const loader = new AgentLoader(configDir, testDir);
178
+ const agents = loader.loadAllAgentConfigs();
179
+ expect(agents).toHaveLength(0);
180
+ });
181
+ });
182
+ describe("Agent with Model Override", ()=>{
183
+ it("should support model override", ()=>{
184
+ const agentConfig = {
185
+ name: "custom-model-agent",
186
+ description: "Agent with custom model",
187
+ systemPrompt: "You are an agent with custom model",
188
+ model: "anthropic:claude-opus-4-5"
189
+ };
190
+ const agentDir = join(agentsDir, "custom-model-agent");
191
+ mkdirSync(agentDir, {
192
+ recursive: true
193
+ });
194
+ writeFileSync(join(agentDir, "agent.json"), JSON.stringify(agentConfig));
195
+ const loader = new AgentLoader(configDir, testDir);
196
+ const agents = loader.loadAllAgentConfigs();
197
+ expect(agents).toHaveLength(1);
198
+ expect(agents[0].name).toBe("custom-model-agent");
199
+ expect(agents[0].model).toBeDefined();
200
+ });
201
+ });
202
+ describe("Subagent Loading", ()=>{
203
+ it("should load agent with subagents", ()=>{
204
+ const agentConfig = {
205
+ name: "parent-agent",
206
+ description: "Parent agent with subagents",
207
+ systemPrompt: "You are a parent agent",
208
+ subagents: [
209
+ {
210
+ name: "subagent1",
211
+ description: "First subagent",
212
+ systemPrompt: "You are subagent 1",
213
+ tools: [
214
+ "think"
215
+ ]
216
+ },
217
+ {
218
+ name: "subagent2",
219
+ description: "Second subagent",
220
+ systemPrompt: "You are subagent 2",
221
+ tools: [
222
+ "internet_search"
223
+ ]
224
+ }
225
+ ]
226
+ };
227
+ const agentDir = join(agentsDir, "parent-agent");
228
+ mkdirSync(agentDir, {
229
+ recursive: true
230
+ });
231
+ writeFileSync(join(agentDir, "agent.json"), JSON.stringify(agentConfig));
232
+ const loader = new AgentLoader(configDir, testDir);
233
+ const agents = loader.loadAllAgentConfigs();
234
+ expect(agents).toHaveLength(1);
235
+ expect(agents[0].name).toBe("parent-agent");
236
+ expect(agents[0].subAgents).toBeDefined();
237
+ expect(agents[0].subAgents?.length).toBe(2);
238
+ expect(agents[0].subAgents?.[0].name).toBe("subagent1");
239
+ expect(agents[0].subAgents?.[1].name).toBe("subagent2");
240
+ });
241
+ });
242
+ describe("Empty Workspace", ()=>{
243
+ it("should return empty array when no agents exist", ()=>{
244
+ const loader = new AgentLoader(configDir, testDir);
245
+ const agents = loader.loadAllAgentConfigs();
246
+ expect(agents).toEqual([]);
247
+ });
248
+ it("should return empty array when agents directory doesn't exist", ()=>{
249
+ rmSync(agentsDir, {
250
+ recursive: true,
251
+ force: true
252
+ });
253
+ const loader = new AgentLoader(configDir, testDir);
254
+ const agents = loader.loadAllAgentConfigs();
255
+ expect(agents).toEqual([]);
256
+ });
257
+ });
258
+ });
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __webpack_exports__ = {};
3
+ const external_vitest_namespaceObject = require("vitest");
4
+ const FINNHUB_BASE_URL = process.env.FINNHUB_BASE_URL?.trim() || "https://finnhub.io/api/v1";
5
+ const FINNHUB_API_KEY = process.env.FINNHUB_API_KEY?.trim();
6
+ const RUN_LIVE = "1" === process.env.FINNHUB_LIVE_TESTS;
7
+ const describeLive = FINNHUB_API_KEY && RUN_LIVE ? external_vitest_namespaceObject.describe : external_vitest_namespaceObject.describe.skip;
8
+ const secondsPerDay = 86400;
9
+ const buildCandleUrl = (scenario)=>{
10
+ const to = Math.floor(Date.now() / 1000);
11
+ const from = to - scenario.lookbackDays * secondsPerDay;
12
+ const url = new URL(`${FINNHUB_BASE_URL}/stock/candle`);
13
+ url.searchParams.set("symbol", scenario.symbol);
14
+ url.searchParams.set("resolution", scenario.resolution);
15
+ url.searchParams.set("from", String(from));
16
+ url.searchParams.set("to", String(to));
17
+ url.searchParams.set("token", FINNHUB_API_KEY || "");
18
+ return url.toString();
19
+ };
20
+ const scenarios = [
21
+ {
22
+ label: "daily-365",
23
+ symbol: "AAPL",
24
+ resolution: "D",
25
+ lookbackDays: 365
26
+ },
27
+ {
28
+ label: "daily-180",
29
+ symbol: "AAPL",
30
+ resolution: "D",
31
+ lookbackDays: 180
32
+ },
33
+ {
34
+ label: "daily-90",
35
+ symbol: "AAPL",
36
+ resolution: "D",
37
+ lookbackDays: 90
38
+ },
39
+ {
40
+ label: "hourly-180",
41
+ symbol: "AAPL",
42
+ resolution: "60",
43
+ lookbackDays: 180
44
+ },
45
+ {
46
+ label: "hourly-90",
47
+ symbol: "AAPL",
48
+ resolution: "60",
49
+ lookbackDays: 90
50
+ },
51
+ {
52
+ label: "hourly-30",
53
+ symbol: "AAPL",
54
+ resolution: "60",
55
+ lookbackDays: 30
56
+ },
57
+ {
58
+ label: "15m-30",
59
+ symbol: "AAPL",
60
+ resolution: "15",
61
+ lookbackDays: 30
62
+ },
63
+ {
64
+ label: "1m-7",
65
+ symbol: "AAPL",
66
+ resolution: "1",
67
+ lookbackDays: 7
68
+ }
69
+ ];
70
+ describeLive("Finnhub candle access (live)", ()=>{
71
+ (0, external_vitest_namespaceObject.it)("does not return 403 for supported ranges", async ()=>{
72
+ const failures = [];
73
+ for (const scenario of scenarios){
74
+ const url = buildCandleUrl(scenario);
75
+ const response = await fetch(url, {
76
+ headers: {
77
+ "User-Agent": "wingman-finnhub-test"
78
+ }
79
+ });
80
+ const body = await response.text();
81
+ console.info(`Finnhub candle ${scenario.label} -> ${response.status}`);
82
+ if (403 === response.status) {
83
+ failures.push(`403 for ${scenario.label} (${scenario.resolution}, ${scenario.lookbackDays}d): ${body.slice(0, 200)}`);
84
+ continue;
85
+ }
86
+ if (429 === response.status) {
87
+ console.warn(`Rate limited for ${scenario.label}; skipping assert.`);
88
+ continue;
89
+ }
90
+ (0, external_vitest_namespaceObject.expect)(response.status).toBe(200);
91
+ }
92
+ if (failures.length > 0) throw new Error(failures.join("\n"));
93
+ });
94
+ });
95
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
96
+ Object.defineProperty(exports, '__esModule', {
97
+ value: true
98
+ });