@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,114 @@
1
+ "use strict";
2
+ var __webpack_exports__ = {};
3
+ const external_vitest_namespaceObject = require("vitest");
4
+ const modelFactory_cjs_namespaceObject = require("../config/modelFactory.cjs");
5
+ const anthropic_namespaceObject = require("@langchain/anthropic");
6
+ const openai_namespaceObject = require("@langchain/openai");
7
+ (0, external_vitest_namespaceObject.describe)("ModelFactory", ()=>{
8
+ (0, external_vitest_namespaceObject.describe)("createModel", ()=>{
9
+ (0, external_vitest_namespaceObject.it)("should create an Anthropic model", ()=>{
10
+ const model = modelFactory_cjs_namespaceObject.ModelFactory.createModel("anthropic:claude-opus-4-5");
11
+ (0, external_vitest_namespaceObject.expect)(model).toBeInstanceOf(anthropic_namespaceObject.ChatAnthropic);
12
+ });
13
+ (0, external_vitest_namespaceObject.it)("should create an OpenAI model", ()=>{
14
+ const model = modelFactory_cjs_namespaceObject.ModelFactory.createModel("openai:gpt-4o");
15
+ (0, external_vitest_namespaceObject.expect)(model).toBeInstanceOf(openai_namespaceObject.ChatOpenAI);
16
+ });
17
+ (0, external_vitest_namespaceObject.it)("should create an OpenRouter model", ()=>{
18
+ const model = modelFactory_cjs_namespaceObject.ModelFactory.createModel("openrouter:openai/gpt-4o");
19
+ (0, external_vitest_namespaceObject.expect)(model).toBeInstanceOf(openai_namespaceObject.ChatOpenAI);
20
+ });
21
+ (0, external_vitest_namespaceObject.it)("should create a Copilot model", ()=>{
22
+ const model = modelFactory_cjs_namespaceObject.ModelFactory.createModel("copilot:gpt-4o");
23
+ (0, external_vitest_namespaceObject.expect)(model).toBeInstanceOf(openai_namespaceObject.ChatOpenAI);
24
+ });
25
+ (0, external_vitest_namespaceObject.it)("should create an LMStudio model", ()=>{
26
+ const model = modelFactory_cjs_namespaceObject.ModelFactory.createModel("lmstudio:llama-3.1-8b");
27
+ (0, external_vitest_namespaceObject.expect)(model).toBeInstanceOf(openai_namespaceObject.ChatOpenAI);
28
+ });
29
+ (0, external_vitest_namespaceObject.it)("should create an Ollama model", ()=>{
30
+ const model = modelFactory_cjs_namespaceObject.ModelFactory.createModel("ollama:llama3.2");
31
+ (0, external_vitest_namespaceObject.expect)(model).toBeInstanceOf(openai_namespaceObject.ChatOpenAI);
32
+ });
33
+ (0, external_vitest_namespaceObject.it)("should throw error for invalid format (missing colon)", ()=>{
34
+ (0, external_vitest_namespaceObject.expect)(()=>{
35
+ modelFactory_cjs_namespaceObject.ModelFactory.createModel("anthropic-claude-opus");
36
+ }).toThrow(/Invalid model format/);
37
+ });
38
+ (0, external_vitest_namespaceObject.it)("should throw error for invalid format (empty provider)", ()=>{
39
+ (0, external_vitest_namespaceObject.expect)(()=>{
40
+ modelFactory_cjs_namespaceObject.ModelFactory.createModel(":claude-opus-4-5");
41
+ }).toThrow(/Invalid model format/);
42
+ });
43
+ (0, external_vitest_namespaceObject.it)("should throw error for invalid format (empty model)", ()=>{
44
+ (0, external_vitest_namespaceObject.expect)(()=>{
45
+ modelFactory_cjs_namespaceObject.ModelFactory.createModel("anthropic:");
46
+ }).toThrow(/Invalid model format/);
47
+ });
48
+ (0, external_vitest_namespaceObject.it)("should throw error for unsupported provider", ()=>{
49
+ (0, external_vitest_namespaceObject.expect)(()=>{
50
+ modelFactory_cjs_namespaceObject.ModelFactory.createModel("unsupported:model-name");
51
+ }).toThrow(/Unknown model provider/);
52
+ });
53
+ (0, external_vitest_namespaceObject.it)("should be case insensitive for provider names", ()=>{
54
+ const model1 = modelFactory_cjs_namespaceObject.ModelFactory.createModel("Anthropic:claude-opus-4-5");
55
+ const model2 = modelFactory_cjs_namespaceObject.ModelFactory.createModel("ANTHROPIC:claude-opus-4-5");
56
+ (0, external_vitest_namespaceObject.expect)(model1).toBeInstanceOf(anthropic_namespaceObject.ChatAnthropic);
57
+ (0, external_vitest_namespaceObject.expect)(model2).toBeInstanceOf(anthropic_namespaceObject.ChatAnthropic);
58
+ });
59
+ });
60
+ (0, external_vitest_namespaceObject.describe)("validateModelString", ()=>{
61
+ (0, external_vitest_namespaceObject.it)("should validate correct model strings", ()=>{
62
+ const validModels = [
63
+ "anthropic:claude-opus-4-5",
64
+ "openai:gpt-4o",
65
+ "anthropic:claude-sonnet-4-5-20250929",
66
+ "openrouter:openai/gpt-4o",
67
+ "copilot:gpt-4o",
68
+ "lmstudio:llama-3.1-8b",
69
+ "ollama:llama3.2"
70
+ ];
71
+ for (const modelString of validModels){
72
+ const result = modelFactory_cjs_namespaceObject.ModelFactory.validateModelString(modelString);
73
+ (0, external_vitest_namespaceObject.expect)(result.valid).toBe(true);
74
+ (0, external_vitest_namespaceObject.expect)(result.error).toBeUndefined();
75
+ }
76
+ });
77
+ (0, external_vitest_namespaceObject.it)("should reject invalid format", ()=>{
78
+ const result = modelFactory_cjs_namespaceObject.ModelFactory.validateModelString("invalid-format");
79
+ (0, external_vitest_namespaceObject.expect)(result.valid).toBe(false);
80
+ (0, external_vitest_namespaceObject.expect)(result.error).toContain("Invalid format");
81
+ });
82
+ (0, external_vitest_namespaceObject.it)("should reject empty provider", ()=>{
83
+ const result = modelFactory_cjs_namespaceObject.ModelFactory.validateModelString(":model-name");
84
+ (0, external_vitest_namespaceObject.expect)(result.valid).toBe(false);
85
+ (0, external_vitest_namespaceObject.expect)(result.error).toContain("required");
86
+ });
87
+ (0, external_vitest_namespaceObject.it)("should reject empty model", ()=>{
88
+ const result = modelFactory_cjs_namespaceObject.ModelFactory.validateModelString("anthropic:");
89
+ (0, external_vitest_namespaceObject.expect)(result.valid).toBe(false);
90
+ (0, external_vitest_namespaceObject.expect)(result.error).toContain("required");
91
+ });
92
+ (0, external_vitest_namespaceObject.it)("should reject unsupported provider", ()=>{
93
+ const result = modelFactory_cjs_namespaceObject.ModelFactory.validateModelString("unsupported:model");
94
+ (0, external_vitest_namespaceObject.expect)(result.valid).toBe(false);
95
+ (0, external_vitest_namespaceObject.expect)(result.error).toContain("Unknown provider");
96
+ });
97
+ (0, external_vitest_namespaceObject.it)("should accept case variations of providers", ()=>{
98
+ const result1 = modelFactory_cjs_namespaceObject.ModelFactory.validateModelString("Anthropic:model");
99
+ const result2 = modelFactory_cjs_namespaceObject.ModelFactory.validateModelString("OPENAI:model");
100
+ const result3 = modelFactory_cjs_namespaceObject.ModelFactory.validateModelString("Copilot:model");
101
+ const result4 = modelFactory_cjs_namespaceObject.ModelFactory.validateModelString("LMStudio:model");
102
+ const result5 = modelFactory_cjs_namespaceObject.ModelFactory.validateModelString("OLLAMA:model");
103
+ (0, external_vitest_namespaceObject.expect)(result1.valid).toBe(true);
104
+ (0, external_vitest_namespaceObject.expect)(result2.valid).toBe(true);
105
+ (0, external_vitest_namespaceObject.expect)(result3.valid).toBe(true);
106
+ (0, external_vitest_namespaceObject.expect)(result4.valid).toBe(true);
107
+ (0, external_vitest_namespaceObject.expect)(result5.valid).toBe(true);
108
+ });
109
+ });
110
+ });
111
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
112
+ Object.defineProperty(exports, '__esModule', {
113
+ value: true
114
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,108 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { ModelFactory } from "../config/modelFactory.js";
3
+ import { ChatAnthropic } from "@langchain/anthropic";
4
+ import { ChatOpenAI } from "@langchain/openai";
5
+ describe("ModelFactory", ()=>{
6
+ describe("createModel", ()=>{
7
+ it("should create an Anthropic model", ()=>{
8
+ const model = ModelFactory.createModel("anthropic:claude-opus-4-5");
9
+ expect(model).toBeInstanceOf(ChatAnthropic);
10
+ });
11
+ it("should create an OpenAI model", ()=>{
12
+ const model = ModelFactory.createModel("openai:gpt-4o");
13
+ expect(model).toBeInstanceOf(ChatOpenAI);
14
+ });
15
+ it("should create an OpenRouter model", ()=>{
16
+ const model = ModelFactory.createModel("openrouter:openai/gpt-4o");
17
+ expect(model).toBeInstanceOf(ChatOpenAI);
18
+ });
19
+ it("should create a Copilot model", ()=>{
20
+ const model = ModelFactory.createModel("copilot:gpt-4o");
21
+ expect(model).toBeInstanceOf(ChatOpenAI);
22
+ });
23
+ it("should create an LMStudio model", ()=>{
24
+ const model = ModelFactory.createModel("lmstudio:llama-3.1-8b");
25
+ expect(model).toBeInstanceOf(ChatOpenAI);
26
+ });
27
+ it("should create an Ollama model", ()=>{
28
+ const model = ModelFactory.createModel("ollama:llama3.2");
29
+ expect(model).toBeInstanceOf(ChatOpenAI);
30
+ });
31
+ it("should throw error for invalid format (missing colon)", ()=>{
32
+ expect(()=>{
33
+ ModelFactory.createModel("anthropic-claude-opus");
34
+ }).toThrow(/Invalid model format/);
35
+ });
36
+ it("should throw error for invalid format (empty provider)", ()=>{
37
+ expect(()=>{
38
+ ModelFactory.createModel(":claude-opus-4-5");
39
+ }).toThrow(/Invalid model format/);
40
+ });
41
+ it("should throw error for invalid format (empty model)", ()=>{
42
+ expect(()=>{
43
+ ModelFactory.createModel("anthropic:");
44
+ }).toThrow(/Invalid model format/);
45
+ });
46
+ it("should throw error for unsupported provider", ()=>{
47
+ expect(()=>{
48
+ ModelFactory.createModel("unsupported:model-name");
49
+ }).toThrow(/Unknown model provider/);
50
+ });
51
+ it("should be case insensitive for provider names", ()=>{
52
+ const model1 = ModelFactory.createModel("Anthropic:claude-opus-4-5");
53
+ const model2 = ModelFactory.createModel("ANTHROPIC:claude-opus-4-5");
54
+ expect(model1).toBeInstanceOf(ChatAnthropic);
55
+ expect(model2).toBeInstanceOf(ChatAnthropic);
56
+ });
57
+ });
58
+ describe("validateModelString", ()=>{
59
+ it("should validate correct model strings", ()=>{
60
+ const validModels = [
61
+ "anthropic:claude-opus-4-5",
62
+ "openai:gpt-4o",
63
+ "anthropic:claude-sonnet-4-5-20250929",
64
+ "openrouter:openai/gpt-4o",
65
+ "copilot:gpt-4o",
66
+ "lmstudio:llama-3.1-8b",
67
+ "ollama:llama3.2"
68
+ ];
69
+ for (const modelString of validModels){
70
+ const result = ModelFactory.validateModelString(modelString);
71
+ expect(result.valid).toBe(true);
72
+ expect(result.error).toBeUndefined();
73
+ }
74
+ });
75
+ it("should reject invalid format", ()=>{
76
+ const result = ModelFactory.validateModelString("invalid-format");
77
+ expect(result.valid).toBe(false);
78
+ expect(result.error).toContain("Invalid format");
79
+ });
80
+ it("should reject empty provider", ()=>{
81
+ const result = ModelFactory.validateModelString(":model-name");
82
+ expect(result.valid).toBe(false);
83
+ expect(result.error).toContain("required");
84
+ });
85
+ it("should reject empty model", ()=>{
86
+ const result = ModelFactory.validateModelString("anthropic:");
87
+ expect(result.valid).toBe(false);
88
+ expect(result.error).toContain("required");
89
+ });
90
+ it("should reject unsupported provider", ()=>{
91
+ const result = ModelFactory.validateModelString("unsupported:model");
92
+ expect(result.valid).toBe(false);
93
+ expect(result.error).toContain("Unknown provider");
94
+ });
95
+ it("should accept case variations of providers", ()=>{
96
+ const result1 = ModelFactory.validateModelString("Anthropic:model");
97
+ const result2 = ModelFactory.validateModelString("OPENAI:model");
98
+ const result3 = ModelFactory.validateModelString("Copilot:model");
99
+ const result4 = ModelFactory.validateModelString("LMStudio:model");
100
+ const result5 = ModelFactory.validateModelString("OLLAMA:model");
101
+ expect(result1.valid).toBe(true);
102
+ expect(result2.valid).toBe(true);
103
+ expect(result3.valid).toBe(true);
104
+ expect(result4.valid).toBe(true);
105
+ expect(result5.valid).toBe(true);
106
+ });
107
+ });
108
+ });
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __webpack_exports__ = {};
3
+ const agentLoader_cjs_namespaceObject = require("../config/agentLoader.cjs");
4
+ const loader = new agentLoader_cjs_namespaceObject.AgentLoader(".wingman", process.cwd());
5
+ const agents = loader.loadAllAgentConfigs();
6
+ console.log(`Loaded ${agents.length} agents:`);
7
+ agents.forEach((agent)=>{
8
+ console.log(` - ${agent.name}: ${agent.description}`);
9
+ console.log(` Tools: ${agent.tools?.length || 0}`);
10
+ console.log(` Model: ${agent.model ? "Custom" : "Default"}`);
11
+ });
12
+ const expectedAgents = [
13
+ "researcher",
14
+ "coding",
15
+ "planner",
16
+ "implementor",
17
+ "reviewer"
18
+ ];
19
+ const loadedAgentNames = agents.map((a)=>a.name);
20
+ console.log("\nExpected agents check:");
21
+ expectedAgents.forEach((name)=>{
22
+ const found = loadedAgentNames.includes(name);
23
+ console.log(` ${found ? "āœ“" : "āœ—"} ${name}`);
24
+ });
25
+ if (agents.length !== expectedAgents.length) {
26
+ console.error(`\nERROR: Expected ${expectedAgents.length} agents, but loaded ${agents.length}`);
27
+ process.exit(1);
28
+ }
29
+ console.log("\nāœ“ All tests passed!");
30
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
31
+ Object.defineProperty(exports, '__esModule', {
32
+ value: true
33
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,27 @@
1
+ import { AgentLoader } from "../config/agentLoader.js";
2
+ const loader = new AgentLoader(".wingman", process.cwd());
3
+ const agents = loader.loadAllAgentConfigs();
4
+ console.log(`Loaded ${agents.length} agents:`);
5
+ agents.forEach((agent)=>{
6
+ console.log(` - ${agent.name}: ${agent.description}`);
7
+ console.log(` Tools: ${agent.tools?.length || 0}`);
8
+ console.log(` Model: ${agent.model ? "Custom" : "Default"}`);
9
+ });
10
+ const expectedAgents = [
11
+ "researcher",
12
+ "coding",
13
+ "planner",
14
+ "implementor",
15
+ "reviewer"
16
+ ];
17
+ const loadedAgentNames = agents.map((a)=>a.name);
18
+ console.log("\nExpected agents check:");
19
+ expectedAgents.forEach((name)=>{
20
+ const found = loadedAgentNames.includes(name);
21
+ console.log(` ${found ? "āœ“" : "āœ—"} ${name}`);
22
+ });
23
+ if (agents.length !== expectedAgents.length) {
24
+ console.error(`\nERROR: Expected ${expectedAgents.length} agents, but loaded ${agents.length}`);
25
+ process.exit(1);
26
+ }
27
+ console.log("\nāœ“ All tests passed!");
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __webpack_exports__ = {};
3
+ const external_node_fs_namespaceObject = require("node:fs");
4
+ const external_node_path_namespaceObject = require("node:path");
5
+ const agentLoader_cjs_namespaceObject = require("../config/agentLoader.cjs");
6
+ const testDir = (0, external_node_path_namespaceObject.join)(process.cwd(), ".test-subagents");
7
+ const testAgentsDir = (0, external_node_path_namespaceObject.join)(testDir, "agents");
8
+ function cleanup() {
9
+ if ((0, external_node_fs_namespaceObject.existsSync)(testDir)) {
10
+ (0, external_node_fs_namespaceObject.unlinkSync)((0, external_node_path_namespaceObject.join)(testAgentsDir, "parent-agent.json"));
11
+ process.chdir(process.cwd());
12
+ }
13
+ }
14
+ try {
15
+ if (!(0, external_node_fs_namespaceObject.existsSync)(testDir)) (0, external_node_fs_namespaceObject.mkdirSync)(testDir, {
16
+ recursive: true
17
+ });
18
+ if (!(0, external_node_fs_namespaceObject.existsSync)(testAgentsDir)) (0, external_node_fs_namespaceObject.mkdirSync)(testAgentsDir, {
19
+ recursive: true
20
+ });
21
+ console.log("\n=== Test 1: Agent with subagents ===");
22
+ const agentWithSubagents = {
23
+ name: "parent-agent",
24
+ description: "Parent agent with subagents",
25
+ systemPrompt: "You are a parent agent that delegates to subagents.",
26
+ tools: [
27
+ "think"
28
+ ],
29
+ subagents: [
30
+ {
31
+ name: "child-1",
32
+ description: "First child agent",
33
+ systemPrompt: "You are child agent 1",
34
+ tools: [
35
+ "web_crawler"
36
+ ]
37
+ },
38
+ {
39
+ name: "child-2",
40
+ description: "Second child agent",
41
+ systemPrompt: "You are child agent 2",
42
+ tools: [
43
+ "internet_search"
44
+ ]
45
+ }
46
+ ]
47
+ };
48
+ (0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(testAgentsDir, "parent-agent.json"), JSON.stringify(agentWithSubagents, null, 2));
49
+ const loader1 = new agentLoader_cjs_namespaceObject.AgentLoader(".wingman", testDir);
50
+ const agents1 = loader1.loadAllAgentConfigs();
51
+ console.log(`Loaded ${agents1.length} agent(s)`);
52
+ console.log(`Agent name: ${agents1[0]?.name}`);
53
+ console.log(`Agent has subagents: ${agents1[0]?.subagents ? "Yes" : "No"}`);
54
+ if (agents1[0]?.subagents) {
55
+ console.log(`Number of subagents: ${agents1[0].subagents.length}`);
56
+ agents1[0].subagents.forEach((sub, i)=>{
57
+ console.log(` Subagent ${i + 1}: ${sub.name} - ${sub.description}`);
58
+ console.log(` Tools: ${sub.tools?.length || 0}`);
59
+ });
60
+ }
61
+ console.log("\n=== Test 2: Validation - Subagents cannot have subagents ===");
62
+ const invalidAgent = {
63
+ name: "invalid-agent",
64
+ description: "Agent with nested subagents (should fail)",
65
+ systemPrompt: "Invalid config",
66
+ subagents: [
67
+ {
68
+ name: "child",
69
+ description: "Child with its own subagents",
70
+ systemPrompt: "Child agent",
71
+ subagents: [
72
+ {
73
+ name: "grandchild",
74
+ description: "This should fail validation",
75
+ systemPrompt: "Grandchild"
76
+ }
77
+ ]
78
+ }
79
+ ]
80
+ };
81
+ (0, external_node_fs_namespaceObject.writeFileSync)((0, external_node_path_namespaceObject.join)(testAgentsDir, "parent-agent.json"), JSON.stringify(invalidAgent, null, 2));
82
+ const loader2 = new agentLoader_cjs_namespaceObject.AgentLoader(".wingman", testDir);
83
+ const agents2 = loader2.loadAllAgentConfigs();
84
+ if (0 === agents2.length) console.log("āœ“ Validation correctly rejected nested subagents");
85
+ else {
86
+ console.log("āœ— ERROR: Validation should have rejected nested subagents");
87
+ process.exit(1);
88
+ }
89
+ console.log("\nāœ“ All subagent tests passed!");
90
+ cleanup();
91
+ } catch (error) {
92
+ console.error("Test failed:", error);
93
+ cleanup();
94
+ process.exit(1);
95
+ }
96
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
97
+ Object.defineProperty(exports, '__esModule', {
98
+ value: true
99
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,93 @@
1
+ import { existsSync, mkdirSync, unlinkSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { AgentLoader } from "../config/agentLoader.js";
4
+ const testDir = join(process.cwd(), ".test-subagents");
5
+ const testAgentsDir = join(testDir, "agents");
6
+ function cleanup() {
7
+ if (existsSync(testDir)) {
8
+ unlinkSync(join(testAgentsDir, "parent-agent.json"));
9
+ process.chdir(process.cwd());
10
+ }
11
+ }
12
+ try {
13
+ if (!existsSync(testDir)) mkdirSync(testDir, {
14
+ recursive: true
15
+ });
16
+ if (!existsSync(testAgentsDir)) mkdirSync(testAgentsDir, {
17
+ recursive: true
18
+ });
19
+ console.log("\n=== Test 1: Agent with subagents ===");
20
+ const agentWithSubagents = {
21
+ name: "parent-agent",
22
+ description: "Parent agent with subagents",
23
+ systemPrompt: "You are a parent agent that delegates to subagents.",
24
+ tools: [
25
+ "think"
26
+ ],
27
+ subagents: [
28
+ {
29
+ name: "child-1",
30
+ description: "First child agent",
31
+ systemPrompt: "You are child agent 1",
32
+ tools: [
33
+ "web_crawler"
34
+ ]
35
+ },
36
+ {
37
+ name: "child-2",
38
+ description: "Second child agent",
39
+ systemPrompt: "You are child agent 2",
40
+ tools: [
41
+ "internet_search"
42
+ ]
43
+ }
44
+ ]
45
+ };
46
+ writeFileSync(join(testAgentsDir, "parent-agent.json"), JSON.stringify(agentWithSubagents, null, 2));
47
+ const loader1 = new AgentLoader(".wingman", testDir);
48
+ const agents1 = loader1.loadAllAgentConfigs();
49
+ console.log(`Loaded ${agents1.length} agent(s)`);
50
+ console.log(`Agent name: ${agents1[0]?.name}`);
51
+ console.log(`Agent has subagents: ${agents1[0]?.subagents ? "Yes" : "No"}`);
52
+ if (agents1[0]?.subagents) {
53
+ console.log(`Number of subagents: ${agents1[0].subagents.length}`);
54
+ agents1[0].subagents.forEach((sub, i)=>{
55
+ console.log(` Subagent ${i + 1}: ${sub.name} - ${sub.description}`);
56
+ console.log(` Tools: ${sub.tools?.length || 0}`);
57
+ });
58
+ }
59
+ console.log("\n=== Test 2: Validation - Subagents cannot have subagents ===");
60
+ const invalidAgent = {
61
+ name: "invalid-agent",
62
+ description: "Agent with nested subagents (should fail)",
63
+ systemPrompt: "Invalid config",
64
+ subagents: [
65
+ {
66
+ name: "child",
67
+ description: "Child with its own subagents",
68
+ systemPrompt: "Child agent",
69
+ subagents: [
70
+ {
71
+ name: "grandchild",
72
+ description: "This should fail validation",
73
+ systemPrompt: "Grandchild"
74
+ }
75
+ ]
76
+ }
77
+ ]
78
+ };
79
+ writeFileSync(join(testAgentsDir, "parent-agent.json"), JSON.stringify(invalidAgent, null, 2));
80
+ const loader2 = new AgentLoader(".wingman", testDir);
81
+ const agents2 = loader2.loadAllAgentConfigs();
82
+ if (0 === agents2.length) console.log("āœ“ Validation correctly rejected nested subagents");
83
+ else {
84
+ console.log("āœ— ERROR: Validation should have rejected nested subagents");
85
+ process.exit(1);
86
+ }
87
+ console.log("\nāœ“ All subagent tests passed!");
88
+ cleanup();
89
+ } catch (error) {
90
+ console.error("Test failed:", error);
91
+ cleanup();
92
+ process.exit(1);
93
+ }
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __webpack_exports__ = {};
3
+ const external_vitest_namespaceObject = require("vitest");
4
+ const toolRegistry_cjs_namespaceObject = require("../config/toolRegistry.cjs");
5
+ (0, external_vitest_namespaceObject.describe)("Tool Registry", ()=>{
6
+ (0, external_vitest_namespaceObject.describe)("createTool", ()=>{
7
+ (0, external_vitest_namespaceObject.it)("should create internet_search tool", ()=>{
8
+ const tool = (0, toolRegistry_cjs_namespaceObject.createTool)("internet_search");
9
+ (0, external_vitest_namespaceObject.expect)(tool).not.toBeNull();
10
+ (0, external_vitest_namespaceObject.expect)(tool?.name).toBe("internet_search");
11
+ });
12
+ (0, external_vitest_namespaceObject.it)("should create web_crawler tool", ()=>{
13
+ const tool = (0, toolRegistry_cjs_namespaceObject.createTool)("web_crawler");
14
+ (0, external_vitest_namespaceObject.expect)(tool).not.toBeNull();
15
+ (0, external_vitest_namespaceObject.expect)(tool?.name).toBe("web_crawler");
16
+ });
17
+ (0, external_vitest_namespaceObject.it)("should create command_execute tool with default options", ()=>{
18
+ const tool = (0, toolRegistry_cjs_namespaceObject.createTool)("command_execute");
19
+ (0, external_vitest_namespaceObject.expect)(tool).not.toBeNull();
20
+ (0, external_vitest_namespaceObject.expect)(tool?.name).toBe("command_execute");
21
+ });
22
+ (0, external_vitest_namespaceObject.it)("should create command_execute tool with custom options", ()=>{
23
+ const tool = (0, toolRegistry_cjs_namespaceObject.createTool)("command_execute", {
24
+ workspace: "/custom/path",
25
+ blockedCommands: [
26
+ "rm",
27
+ "mv"
28
+ ],
29
+ allowScriptExecution: false,
30
+ timeout: 60000
31
+ });
32
+ (0, external_vitest_namespaceObject.expect)(tool).not.toBeNull();
33
+ (0, external_vitest_namespaceObject.expect)(tool?.name).toBe("command_execute");
34
+ });
35
+ (0, external_vitest_namespaceObject.it)("should create think tool", ()=>{
36
+ const tool = (0, toolRegistry_cjs_namespaceObject.createTool)("think");
37
+ (0, external_vitest_namespaceObject.expect)(tool).not.toBeNull();
38
+ (0, external_vitest_namespaceObject.expect)(tool?.name).toBe("think");
39
+ });
40
+ (0, external_vitest_namespaceObject.it)("should return null for unknown tool name", ()=>{
41
+ const tool = (0, toolRegistry_cjs_namespaceObject.createTool)("unknown_tool");
42
+ (0, external_vitest_namespaceObject.expect)(tool).toBeNull();
43
+ });
44
+ });
45
+ (0, external_vitest_namespaceObject.describe)("createTools", ()=>{
46
+ (0, external_vitest_namespaceObject.it)("should create multiple tools from array", async ()=>{
47
+ const tools = await (0, toolRegistry_cjs_namespaceObject.createTools)([
48
+ "internet_search",
49
+ "web_crawler",
50
+ "think"
51
+ ]);
52
+ (0, external_vitest_namespaceObject.expect)(tools).toHaveLength(3);
53
+ (0, external_vitest_namespaceObject.expect)(tools[0].name).toBe("internet_search");
54
+ (0, external_vitest_namespaceObject.expect)(tools[1].name).toBe("web_crawler");
55
+ (0, external_vitest_namespaceObject.expect)(tools[2].name).toBe("think");
56
+ });
57
+ (0, external_vitest_namespaceObject.it)("should create empty array for empty input", async ()=>{
58
+ const tools = await (0, toolRegistry_cjs_namespaceObject.createTools)([]);
59
+ (0, external_vitest_namespaceObject.expect)(tools).toHaveLength(0);
60
+ });
61
+ (0, external_vitest_namespaceObject.it)("should skip unknown tool names", async ()=>{
62
+ const tools = await (0, toolRegistry_cjs_namespaceObject.createTools)([
63
+ "internet_search",
64
+ "unknown_tool",
65
+ "think"
66
+ ]);
67
+ (0, external_vitest_namespaceObject.expect)(tools).toHaveLength(2);
68
+ (0, external_vitest_namespaceObject.expect)(tools[0].name).toBe("internet_search");
69
+ (0, external_vitest_namespaceObject.expect)(tools[1].name).toBe("think");
70
+ });
71
+ (0, external_vitest_namespaceObject.it)("should pass options to all tools", async ()=>{
72
+ const tools = await (0, toolRegistry_cjs_namespaceObject.createTools)([
73
+ "command_execute"
74
+ ], {
75
+ workspace: "/test/path",
76
+ timeout: 30000
77
+ });
78
+ (0, external_vitest_namespaceObject.expect)(tools).toHaveLength(1);
79
+ (0, external_vitest_namespaceObject.expect)(tools[0].name).toBe("command_execute");
80
+ });
81
+ (0, external_vitest_namespaceObject.it)("should create all available tools", async ()=>{
82
+ const availableTools = (0, toolRegistry_cjs_namespaceObject.getAvailableTools)();
83
+ const tools = await (0, toolRegistry_cjs_namespaceObject.createTools)(availableTools);
84
+ (0, external_vitest_namespaceObject.expect)(tools).toHaveLength(availableTools.length);
85
+ });
86
+ });
87
+ (0, external_vitest_namespaceObject.describe)("getAvailableTools", ()=>{
88
+ (0, external_vitest_namespaceObject.it)("should return all available tool names", ()=>{
89
+ const tools = (0, toolRegistry_cjs_namespaceObject.getAvailableTools)();
90
+ (0, external_vitest_namespaceObject.expect)(tools).toEqual([
91
+ "internet_search",
92
+ "web_crawler",
93
+ "command_execute",
94
+ "think",
95
+ "code_search",
96
+ "git_status"
97
+ ]);
98
+ });
99
+ (0, external_vitest_namespaceObject.it)("should return a consistent list", ()=>{
100
+ const tools1 = (0, toolRegistry_cjs_namespaceObject.getAvailableTools)();
101
+ const tools2 = (0, toolRegistry_cjs_namespaceObject.getAvailableTools)();
102
+ (0, external_vitest_namespaceObject.expect)(tools1).toEqual(tools2);
103
+ });
104
+ });
105
+ });
106
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
107
+ Object.defineProperty(exports, '__esModule', {
108
+ value: true
109
+ });
@@ -0,0 +1 @@
1
+ export {};