@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,681 @@
1
+ "use strict";
2
+ const __rslib_import_meta_url__ = /*#__PURE__*/ function() {
3
+ return "u" < typeof document ? new (require('url'.replace('', ''))).URL('file:' + __filename).href : document.currentScript && document.currentScript.src || new URL('main.js', document.baseURI).href;
4
+ }();
5
+ var __webpack_require__ = {};
6
+ (()=>{
7
+ __webpack_require__.n = (module)=>{
8
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
9
+ __webpack_require__.d(getter, {
10
+ a: getter
11
+ });
12
+ return getter;
13
+ };
14
+ })();
15
+ (()=>{
16
+ __webpack_require__.d = (exports1, definition)=>{
17
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
18
+ enumerable: true,
19
+ get: definition[key]
20
+ });
21
+ };
22
+ })();
23
+ (()=>{
24
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
25
+ })();
26
+ (()=>{
27
+ __webpack_require__.r = (exports1)=>{
28
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
29
+ value: 'Module'
30
+ });
31
+ Object.defineProperty(exports1, '__esModule', {
32
+ value: true
33
+ });
34
+ };
35
+ })();
36
+ var __webpack_exports__ = {};
37
+ __webpack_require__.r(__webpack_exports__);
38
+ __webpack_require__.d(__webpack_exports__, {
39
+ executeInitCommand: ()=>executeInitCommand
40
+ });
41
+ const external_node_fs_namespaceObject = require("node:fs");
42
+ const external_node_path_namespaceObject = require("node:path");
43
+ const external_node_url_namespaceObject = require("node:url");
44
+ const external_chalk_namespaceObject = require("chalk");
45
+ var external_chalk_default = /*#__PURE__*/ __webpack_require__.n(external_chalk_namespaceObject);
46
+ const prompts_namespaceObject = require("@clack/prompts");
47
+ const outputManager_cjs_namespaceObject = require("../core/outputManager.cjs");
48
+ const schema_cjs_namespaceObject = require("../config/schema.cjs");
49
+ const external_logger_cjs_namespaceObject = require("../../logger.cjs");
50
+ const registry_cjs_namespaceObject = require("../../providers/registry.cjs");
51
+ const credentials_cjs_namespaceObject = require("../../providers/credentials.cjs");
52
+ const modelFactory_cjs_namespaceObject = require("../../agent/config/modelFactory.cjs");
53
+ const DEFAULT_AGENT_ID = "wingman";
54
+ const DEFAULT_AGENT_DESCRIPTION = "General-purpose coding assistant for this workspace.";
55
+ const DEFAULT_AGENT_PROMPT = "You are Wingman, a coding assistant for this repository.\nBe direct and concise. Ask clarifying questions when requirements are unclear.\nPrefer minimal diffs and safe changes. Avoid destructive actions unless asked.\nUse tools to inspect the codebase before editing.";
56
+ const DEFAULT_TOOLS = [
57
+ "code_search",
58
+ "git_status",
59
+ "command_execute",
60
+ "internet_search",
61
+ "think"
62
+ ];
63
+ const DEFAULT_FS_ROOT = ".";
64
+ const DEFAULT_MODELS = {
65
+ anthropic: "anthropic:claude-sonnet-4-5",
66
+ openai: "openai:gpt-4o",
67
+ openrouter: "openrouter:openai/gpt-4o",
68
+ copilot: "copilot:gpt-4o",
69
+ xai: "xai:grok-beta"
70
+ };
71
+ async function executeInitCommand(args, options = {}) {
72
+ const outputManager = new outputManager_cjs_namespaceObject.OutputManager(args.outputMode);
73
+ const logger = (0, external_logger_cjs_namespaceObject.createLogger)(args.verbosity);
74
+ const workspace = options.workspace || process.cwd();
75
+ const configDir = options.configDir || ".wingman";
76
+ const configRoot = (0, external_node_path_namespaceObject.join)(workspace, configDir);
77
+ const configPath = (0, external_node_path_namespaceObject.join)(configRoot, "wingman.config.json");
78
+ try {
79
+ if (isHelpCommand(args.subcommand)) return void showInitHelp(outputManager, args.outputMode);
80
+ const optionMap = args.options || {};
81
+ const nonInteractive = "interactive" !== outputManager.getMode() || getBooleanOption(optionMap, [
82
+ "yes",
83
+ "non-interactive"
84
+ ], false);
85
+ const skipConfig = getBooleanOption(optionMap, [
86
+ "skip-config"
87
+ ], false);
88
+ const skipAgent = getBooleanOption(optionMap, [
89
+ "skip-agent"
90
+ ], false);
91
+ const skipProvider = getBooleanOption(optionMap, [
92
+ "skip-provider"
93
+ ], false);
94
+ const force = getBooleanOption(optionMap, [
95
+ "force"
96
+ ], false);
97
+ const merge = getBooleanOption(optionMap, [
98
+ "merge"
99
+ ], false);
100
+ const fsRoot = getStringOption(optionMap, [
101
+ "fs-root"
102
+ ]) || DEFAULT_FS_ROOT;
103
+ const useClack = shouldUseClack(outputManager, nonInteractive);
104
+ renderInitBanner(outputManager, nonInteractive);
105
+ const bundledAgentsPath = resolveBundledAgentsPath();
106
+ const bundledAgents = bundledAgentsPath ? listBundledAgents(bundledAgentsPath) : [];
107
+ const explicitAgent = Boolean(args.agent?.trim()) || Boolean(args.subcommand) && !isHelpCommand(args.subcommand) && !args.subcommand.startsWith("-");
108
+ const agentPlan = await resolveAgentPlan({
109
+ explicitAgent,
110
+ defaultAgentId: resolveAgentId(args),
111
+ bundledAgents,
112
+ nonInteractive,
113
+ optionMap,
114
+ outputManager
115
+ });
116
+ const providerName = await resolveProviderSelection({
117
+ nonInteractive,
118
+ skipProvider,
119
+ optionMap,
120
+ outputManager
121
+ });
122
+ const model = await resolveModelSelection({
123
+ nonInteractive,
124
+ optionMap,
125
+ providerName,
126
+ outputManager
127
+ });
128
+ if (skipConfig) writeLine(outputManager, "Skipping config setup (--skip-config).");
129
+ else await runStep(useClack, "Writing workspace config", async ()=>handleConfigSetup({
130
+ configPath,
131
+ configRoot,
132
+ agentId: agentPlan.defaultAgentId,
133
+ fsRoot,
134
+ force,
135
+ merge,
136
+ nonInteractive,
137
+ outputManager
138
+ }));
139
+ if (skipAgent) writeLine(outputManager, "Skipping starter agent (--skip-agent).");
140
+ else await runStep(useClack, "Installing bundled agents", async ()=>handleAgentSetup({
141
+ configRoot,
142
+ agentId: agentPlan.defaultAgentId,
143
+ model,
144
+ force,
145
+ nonInteractive,
146
+ outputManager,
147
+ bundledAgentsPath,
148
+ copyAgents: agentPlan.copyAgents
149
+ }));
150
+ if (skipProvider) writeLine(outputManager, "Skipping provider setup (--skip-provider).");
151
+ else await runStep(useClack, "Connecting providers", async ()=>handleProviderSetup({
152
+ providerName,
153
+ optionMap,
154
+ nonInteractive,
155
+ outputManager
156
+ }));
157
+ if (useClack) (0, prompts_namespaceObject.outro)(external_chalk_default().green("Wingman init complete."));
158
+ else {
159
+ writeLine(outputManager, "");
160
+ writeLine(outputManager, "Wingman init complete.");
161
+ }
162
+ writeLine(outputManager, `Workspace: ${workspace}`);
163
+ writeLine(outputManager, `Config: ${configPath}`);
164
+ writeLine(outputManager, `Agent: ${skipAgent ? "skipped" : agentPlan.defaultAgentId}`);
165
+ if (!model) writeLine(outputManager, "Note: No model set yet. Update your agent config with a model string.");
166
+ writeLine(outputManager, "");
167
+ writeLine(outputManager, "Next steps:");
168
+ writeLine(outputManager, ` 1) wingman agent --local --agent ${agentPlan.defaultAgentId} "hello"`);
169
+ writeLine(outputManager, " 2) wingman gateway start");
170
+ } catch (error) {
171
+ const errorMsg = error instanceof Error ? error.message : String(error);
172
+ const logFile = (0, external_logger_cjs_namespaceObject.getLogFilePath)();
173
+ logger.error("Init command failed", {
174
+ error: errorMsg
175
+ });
176
+ if ("interactive" === outputManager.getMode()) {
177
+ console.error(`\nError: ${errorMsg}`);
178
+ console.error(`Logs: ${logFile}`);
179
+ process.exit(1);
180
+ } else {
181
+ outputManager.emitAgentError(error);
182
+ process.exit(1);
183
+ }
184
+ }
185
+ }
186
+ function renderInitBanner(outputManager, nonInteractive) {
187
+ if ("interactive" !== outputManager.getMode() || nonInteractive) return;
188
+ const title = "__ ___ _ _ ____ __ __ _ _ _\n\\ \\ / / | \\ | |/ ___| \\/ | / \\ | \\ | |\n \\ \\ /\\ / /| | \\| | | _| |\\/| | / _ \\ | \\| |\n \\ V V / | | |\\ | |_| | | | |/ ___ \\| |\\ |\n \\_/\\_/ |_|_| \\_|\\____|_| |_/_/ \\_\\_| \\_|";
189
+ const accent = process.stdout.isTTY ? external_chalk_default().cyanBright : (text)=>text;
190
+ const muted = process.stdout.isTTY ? external_chalk_default().gray : (text)=>text;
191
+ const emphasis = process.stdout.isTTY ? external_chalk_default().whiteBright : (text)=>text;
192
+ (0, prompts_namespaceObject.intro)(accent(title));
193
+ (0, prompts_namespaceObject.note)(muted("We will set up config, install bundled agents, and connect providers."), emphasis("Wingman Init Wizard"));
194
+ (0, prompts_namespaceObject.note)(muted("Press Enter to accept defaults."), emphasis("Tip"));
195
+ }
196
+ function isHelpCommand(subcommand) {
197
+ return [
198
+ "help",
199
+ "--help",
200
+ "-h"
201
+ ].includes(subcommand);
202
+ }
203
+ function resolveAgentId(args) {
204
+ if (args.agent && args.agent.trim()) return args.agent.trim();
205
+ if (args.subcommand && !isHelpCommand(args.subcommand) && !args.subcommand.startsWith("-")) return args.subcommand.trim();
206
+ return DEFAULT_AGENT_ID;
207
+ }
208
+ async function resolveAgentPlan(input) {
209
+ const { explicitAgent, defaultAgentId, bundledAgents, nonInteractive, optionMap, outputManager } = input;
210
+ let nextDefaultAgent = sanitizeAgentId(defaultAgentId);
211
+ const availableAgents = bundledAgents.slice();
212
+ if (!explicitAgent && !nonInteractive && availableAgents.length > 0) nextDefaultAgent = await promptForDefaultAgent(availableAgents, nextDefaultAgent);
213
+ const rawAgentsList = getStringOption(optionMap, [
214
+ "agents"
215
+ ]);
216
+ if (rawAgentsList) {
217
+ const selected = parseAgentList(rawAgentsList, availableAgents);
218
+ const unique = ensureIncludesDefault(selected, nextDefaultAgent, availableAgents);
219
+ return {
220
+ defaultAgentId: nextDefaultAgent,
221
+ copyAgents: unique
222
+ };
223
+ }
224
+ if (nonInteractive || 0 === availableAgents.length) return {
225
+ defaultAgentId: nextDefaultAgent
226
+ };
227
+ const copyAll = await promptConfirm("Copy all bundled agents?", true);
228
+ if (copyAll) return {
229
+ defaultAgentId: nextDefaultAgent
230
+ };
231
+ const selectedAgents = await promptForAgentSelection(availableAgents, nextDefaultAgent);
232
+ const finalAgents = ensureIncludesDefault(selectedAgents, nextDefaultAgent, availableAgents);
233
+ if (0 === finalAgents.length) {
234
+ writeLine(outputManager, "No bundled agents selected.");
235
+ return {
236
+ defaultAgentId: nextDefaultAgent,
237
+ copyAgents: []
238
+ };
239
+ }
240
+ return {
241
+ defaultAgentId: nextDefaultAgent,
242
+ copyAgents: finalAgents
243
+ };
244
+ }
245
+ function sanitizeAgentId(value) {
246
+ const trimmed = value.trim();
247
+ if (!trimmed) throw new Error("Agent name is required.");
248
+ if (trimmed.includes("/") || trimmed.includes("\\")) throw new Error("Agent name cannot include path separators.");
249
+ if (trimmed.includes("..")) throw new Error("Agent name cannot include '..'.");
250
+ return trimmed;
251
+ }
252
+ async function handleConfigSetup(input) {
253
+ const { configPath, configRoot, agentId, fsRoot, force, merge, nonInteractive, outputManager } = input;
254
+ const configExists = (0, external_node_fs_namespaceObject.existsSync)(configPath);
255
+ if (configExists && !force && !merge) {
256
+ if (nonInteractive) return void writeLine(outputManager, "Config already exists. Use --merge or --force to update it.");
257
+ const shouldMerge = await promptConfirm("Config exists. Update with recommended settings? (y/N): ", false);
258
+ if (!shouldMerge) return void writeLine(outputManager, "Leaving existing config unchanged.");
259
+ }
260
+ const nextConfig = configExists && !force ? mergeConfigFile(configPath, agentId, fsRoot) : buildDefaultConfig(agentId, fsRoot);
261
+ if (!nextConfig) return void writeLine(outputManager, "Config already has recommended settings.");
262
+ (0, external_node_fs_namespaceObject.mkdirSync)(configRoot, {
263
+ recursive: true
264
+ });
265
+ (0, external_node_fs_namespaceObject.writeFileSync)(configPath, JSON.stringify(nextConfig, null, 2));
266
+ writeLine(outputManager, `Saved config to ${configPath}`);
267
+ }
268
+ function mergeConfigFile(configPath, agentId, fsRoot) {
269
+ const raw = (0, external_node_fs_namespaceObject.readFileSync)(configPath, "utf-8");
270
+ let parsed;
271
+ try {
272
+ parsed = JSON.parse(raw);
273
+ } catch {
274
+ throw new Error("Existing wingman.config.json is invalid JSON. Use --force to overwrite.");
275
+ }
276
+ if (!parsed || "object" != typeof parsed || Array.isArray(parsed)) throw new Error("Existing wingman.config.json is not a JSON object. Use --force to overwrite.");
277
+ const { config, changed } = mergeConfigValues(parsed, agentId, fsRoot);
278
+ return changed ? config : null;
279
+ }
280
+ function mergeConfigValues(config, agentId, fsRoot) {
281
+ let changed = false;
282
+ const nextConfig = {
283
+ ...config
284
+ };
285
+ if (!nextConfig.defaultAgent) {
286
+ nextConfig.defaultAgent = agentId;
287
+ changed = true;
288
+ }
289
+ const gatewayRaw = nextConfig.gateway;
290
+ const gateway = gatewayRaw && "object" == typeof gatewayRaw && !Array.isArray(gatewayRaw) ? {
291
+ ...gatewayRaw
292
+ } : {};
293
+ const fsRootsRaw = gateway.fsRoots;
294
+ const fsRoots = Array.isArray(fsRootsRaw) ? [
295
+ ...fsRootsRaw
296
+ ] : [];
297
+ if (fsRoot && !fsRoots.includes(fsRoot)) {
298
+ fsRoots.push(fsRoot);
299
+ changed = true;
300
+ }
301
+ if (changed) nextConfig.gateway = {
302
+ ...gateway,
303
+ fsRoots
304
+ };
305
+ return {
306
+ config: nextConfig,
307
+ changed
308
+ };
309
+ }
310
+ function buildDefaultConfig(agentId, fsRoot) {
311
+ const config = schema_cjs_namespaceObject.WingmanConfigSchema.parse({});
312
+ config.defaultAgent = agentId;
313
+ config.gateway = {
314
+ ...config.gateway,
315
+ fsRoots: [
316
+ fsRoot
317
+ ]
318
+ };
319
+ return config;
320
+ }
321
+ async function handleAgentSetup(input) {
322
+ const { configRoot, agentId, model, force, nonInteractive, outputManager, bundledAgentsPath, copyAgents } = input;
323
+ const copiedAgents = bundledAgentsPath ? copyBundledAgents({
324
+ bundledAgentsPath,
325
+ configRoot,
326
+ force,
327
+ outputManager,
328
+ agentNames: copyAgents
329
+ }) : new Set();
330
+ if (copiedAgents.size > 0) writeLine(outputManager, `Copied ${copiedAgents.size} bundled agent(s) to ${(0, external_node_path_namespaceObject.join)(configRoot, "agents")}`);
331
+ const expectedAgentDir = (0, external_node_path_namespaceObject.join)(configRoot, "agents", agentId);
332
+ const expectedAgentPath = (0, external_node_path_namespaceObject.join)(expectedAgentDir, "agent.json");
333
+ const expectedAgentExists = (0, external_node_fs_namespaceObject.existsSync)(expectedAgentPath);
334
+ if (!expectedAgentExists) return void await createFallbackAgent({
335
+ configRoot,
336
+ agentId,
337
+ model,
338
+ force,
339
+ nonInteractive,
340
+ outputManager
341
+ });
342
+ if (model) applyModelToAgent(expectedAgentPath, model, outputManager);
343
+ }
344
+ function resolveBundledAgentsPath() {
345
+ const candidates = [
346
+ new URL("../../../../.wingman/agents", __rslib_import_meta_url__),
347
+ new URL("../../../.wingman/agents", __rslib_import_meta_url__)
348
+ ];
349
+ for (const candidate of candidates){
350
+ const resolved = (0, external_node_url_namespaceObject.fileURLToPath)(candidate);
351
+ if ((0, external_node_fs_namespaceObject.existsSync)(resolved) && (0, external_node_fs_namespaceObject.statSync)(resolved).isDirectory()) return resolved;
352
+ }
353
+ const cwdFallback = (0, external_node_path_namespaceObject.join)(process.cwd(), ".wingman", "agents");
354
+ if ((0, external_node_fs_namespaceObject.existsSync)(cwdFallback) && (0, external_node_fs_namespaceObject.statSync)(cwdFallback).isDirectory()) return cwdFallback;
355
+ return null;
356
+ }
357
+ function listBundledAgents(bundledAgentsPath) {
358
+ return (0, external_node_fs_namespaceObject.readdirSync)(bundledAgentsPath, {
359
+ withFileTypes: true
360
+ }).filter((dirent)=>dirent.isDirectory()).map((dirent)=>dirent.name).sort((a, b)=>a.localeCompare(b));
361
+ }
362
+ function copyBundledAgents(input) {
363
+ const { bundledAgentsPath, configRoot, force, outputManager, agentNames } = input;
364
+ const available = listBundledAgents(bundledAgentsPath);
365
+ const entries = agentNames ? agentNames : available;
366
+ const copied = new Set();
367
+ const targetRoot = (0, external_node_path_namespaceObject.join)(configRoot, "agents");
368
+ for (const entry of entries){
369
+ const sourceDir = (0, external_node_path_namespaceObject.join)(bundledAgentsPath, entry);
370
+ const targetDir = (0, external_node_path_namespaceObject.join)(targetRoot, entry);
371
+ if ((0, external_node_fs_namespaceObject.existsSync)(targetDir) && !force) {
372
+ writeLine(outputManager, `Agent "${entry}" already exists. Skipping (use --force to overwrite).`);
373
+ continue;
374
+ }
375
+ if ((0, external_node_fs_namespaceObject.existsSync)(targetDir) && force) (0, external_node_fs_namespaceObject.rmSync)(targetDir, {
376
+ recursive: true,
377
+ force: true
378
+ });
379
+ copyDirectory(sourceDir, targetDir);
380
+ copied.add(entry);
381
+ }
382
+ return copied;
383
+ }
384
+ function copyDirectory(source, target) {
385
+ (0, external_node_fs_namespaceObject.mkdirSync)(target, {
386
+ recursive: true
387
+ });
388
+ const entries = (0, external_node_fs_namespaceObject.readdirSync)(source, {
389
+ withFileTypes: true
390
+ });
391
+ for (const entry of entries){
392
+ const sourcePath = (0, external_node_path_namespaceObject.join)(source, entry.name);
393
+ const targetPath = (0, external_node_path_namespaceObject.join)(target, entry.name);
394
+ if (entry.isDirectory()) copyDirectory(sourcePath, targetPath);
395
+ else (0, external_node_fs_namespaceObject.copyFileSync)(sourcePath, targetPath);
396
+ }
397
+ }
398
+ async function createFallbackAgent(input) {
399
+ const { configRoot, agentId, model, force, nonInteractive, outputManager } = input;
400
+ const agentDir = (0, external_node_path_namespaceObject.join)(configRoot, "agents", agentId);
401
+ const agentPath = (0, external_node_path_namespaceObject.join)(agentDir, "agent.json");
402
+ const agentExists = (0, external_node_fs_namespaceObject.existsSync)(agentPath);
403
+ if (agentExists && !force) {
404
+ if (nonInteractive) return void writeLine(outputManager, `Agent "${agentId}" already exists. Use --force to overwrite.`);
405
+ const shouldOverwrite = await promptConfirm(`Agent "${agentId}" exists. Overwrite? (y/N): `, false);
406
+ if (!shouldOverwrite) return void writeLine(outputManager, `Keeping existing agent "${agentId}".`);
407
+ }
408
+ (0, external_node_fs_namespaceObject.mkdirSync)(agentDir, {
409
+ recursive: true
410
+ });
411
+ const agentConfig = {
412
+ name: agentId,
413
+ description: DEFAULT_AGENT_DESCRIPTION,
414
+ systemPrompt: DEFAULT_AGENT_PROMPT,
415
+ tools: DEFAULT_TOOLS
416
+ };
417
+ if (model) agentConfig.model = model;
418
+ (0, external_node_fs_namespaceObject.writeFileSync)(agentPath, JSON.stringify(agentConfig, null, 2));
419
+ writeLine(outputManager, `Created starter agent at ${agentPath}`);
420
+ }
421
+ function applyModelToAgent(agentPath, model, outputManager) {
422
+ try {
423
+ const raw = (0, external_node_fs_namespaceObject.readFileSync)(agentPath, "utf-8");
424
+ const parsed = JSON.parse(raw);
425
+ parsed.model = model;
426
+ (0, external_node_fs_namespaceObject.writeFileSync)(agentPath, JSON.stringify(parsed, null, 2));
427
+ writeLine(outputManager, `Updated ${agentPath} with model ${model}`);
428
+ } catch {
429
+ writeLine(outputManager, `Unable to update model for ${agentPath}. Update manually.`);
430
+ }
431
+ }
432
+ async function resolveProviderSelection(input) {
433
+ const { nonInteractive, skipProvider, optionMap, outputManager } = input;
434
+ if (skipProvider) return;
435
+ const providerOption = getStringOption(optionMap, [
436
+ "provider"
437
+ ]);
438
+ if (providerOption) {
439
+ const normalized = (0, registry_cjs_namespaceObject.normalizeProviderName)(providerOption);
440
+ if (!normalized) throw new Error(`Unknown provider: ${providerOption}`);
441
+ return normalized;
442
+ }
443
+ if (nonInteractive) return;
444
+ const providers = (0, registry_cjs_namespaceObject.listProviderSpecs)("model");
445
+ const options = [
446
+ {
447
+ value: "__skip__",
448
+ label: "Skip for now"
449
+ },
450
+ ...providers.map((provider)=>({
451
+ value: provider.name,
452
+ label: provider.label,
453
+ hint: provider.name
454
+ }))
455
+ ];
456
+ const selection = await (0, prompts_namespaceObject.select)({
457
+ message: "Choose a provider to configure",
458
+ options
459
+ });
460
+ if ((0, prompts_namespaceObject.isCancel)(selection)) abortSetup();
461
+ if ("__skip__" === selection) return void writeLine(outputManager, "Skipping provider configuration.");
462
+ const normalized = (0, registry_cjs_namespaceObject.normalizeProviderName)(String(selection));
463
+ if (!normalized) throw new Error(`Unknown provider: ${String(selection)}`);
464
+ return normalized;
465
+ }
466
+ async function resolveModelSelection(input) {
467
+ const { nonInteractive, optionMap, providerName, outputManager } = input;
468
+ const explicitModel = getStringOption(optionMap, [
469
+ "model"
470
+ ]);
471
+ if (explicitModel) {
472
+ validateModel(explicitModel);
473
+ return explicitModel;
474
+ }
475
+ const providers = (0, registry_cjs_namespaceObject.listProviderSpecs)("model");
476
+ const configuredProvider = providers.find((provider)=>"missing" !== (0, credentials_cjs_namespaceObject.resolveProviderToken)(provider.name).source);
477
+ const suggestedProvider = providerName || configuredProvider?.name;
478
+ const suggestedModel = suggestedProvider ? DEFAULT_MODELS[suggestedProvider] : void 0;
479
+ if (nonInteractive) {
480
+ if (suggestedModel) return suggestedModel;
481
+ return;
482
+ }
483
+ const inputValue = await (0, prompts_namespaceObject.text)({
484
+ message: "Model string (provider:model)",
485
+ placeholder: suggestedModel ? void 0 : "anthropic:claude-sonnet-4-5",
486
+ defaultValue: suggestedModel
487
+ });
488
+ if ((0, prompts_namespaceObject.isCancel)(inputValue)) abortSetup();
489
+ const trimmed = String(inputValue ?? "").trim();
490
+ if (!trimmed && suggestedModel) return suggestedModel;
491
+ if (!trimmed) return void writeLine(outputManager, "Skipping model selection.");
492
+ validateModel(trimmed);
493
+ return trimmed;
494
+ }
495
+ function validateModel(model) {
496
+ const result = modelFactory_cjs_namespaceObject.ModelFactory.validateModelString(model);
497
+ if (!result.valid) throw new Error(result.error || "Invalid model string.");
498
+ }
499
+ async function handleProviderSetup(input) {
500
+ const { providerName, optionMap, nonInteractive, outputManager } = input;
501
+ if (!providerName) return void writeLine(outputManager, "No provider selected.");
502
+ const status = (0, credentials_cjs_namespaceObject.resolveProviderToken)(providerName);
503
+ if ("missing" !== status.source) return void writeLine(outputManager, `Provider "${providerName}" already configured (${status.source}).`);
504
+ const tokenOption = getTokenOption(optionMap);
505
+ if (tokenOption) {
506
+ (0, credentials_cjs_namespaceObject.saveProviderToken)(providerName, tokenOption);
507
+ writeLine(outputManager, `Saved ${providerName} credentials to ${(0, credentials_cjs_namespaceObject.getCredentialsPath)()}`);
508
+ return;
509
+ }
510
+ if (nonInteractive) return void writeLine(outputManager, `Missing credentials for "${providerName}". Run "wingman provider login ${providerName}" to add them.`);
511
+ const tokenInput = await (0, prompts_namespaceObject.text)({
512
+ message: `Enter ${providerName} API key`,
513
+ placeholder: "sk-..."
514
+ });
515
+ if ((0, prompts_namespaceObject.isCancel)(tokenInput)) abortSetup();
516
+ const token = String(tokenInput ?? "").trim();
517
+ if (!token) throw new Error("API key is required.");
518
+ (0, credentials_cjs_namespaceObject.saveProviderToken)(providerName, token);
519
+ writeLine(outputManager, `Saved ${providerName} credentials to ${(0, credentials_cjs_namespaceObject.getCredentialsPath)()}`);
520
+ }
521
+ function getTokenOption(options) {
522
+ const raw = getStringOption(options, [
523
+ "token"
524
+ ]) ?? getStringOption(options, [
525
+ "api-key"
526
+ ]) ?? getStringOption(options, [
527
+ "apiKey"
528
+ ]);
529
+ if ("string" == typeof raw && raw.trim()) return raw.trim();
530
+ }
531
+ function getStringOption(options, keys) {
532
+ for (const key of keys){
533
+ const raw = options[key];
534
+ if ("string" == typeof raw && raw.trim()) return raw.trim();
535
+ }
536
+ }
537
+ function parseAgentList(raw, bundledAgents) {
538
+ const normalized = raw.split(/[,\s]+/).map((value)=>value.trim()).filter(Boolean);
539
+ if (0 === normalized.length) return [];
540
+ const unknown = normalized.filter((value)=>!bundledAgents.includes(value));
541
+ if (unknown.length > 0) throw new Error(`Unknown bundled agents: ${unknown.join(", ")}.`);
542
+ return Array.from(new Set(normalized));
543
+ }
544
+ function ensureIncludesDefault(agents, defaultAgent, bundledAgents) {
545
+ if (!bundledAgents.includes(defaultAgent)) return agents;
546
+ if (agents.includes(defaultAgent)) return agents;
547
+ return [
548
+ ...agents,
549
+ defaultAgent
550
+ ];
551
+ }
552
+ async function promptForDefaultAgent(agents, currentDefault) {
553
+ const choices = agents.length > 0 ? agents : [
554
+ currentDefault
555
+ ];
556
+ const defaultValue = choices.includes(currentDefault) ? currentDefault : choices[0];
557
+ const selection = await (0, prompts_namespaceObject.select)({
558
+ message: "Pick a default agent",
559
+ options: [
560
+ ...choices.map((agent)=>({
561
+ value: agent,
562
+ label: agent
563
+ })),
564
+ {
565
+ value: "__custom__",
566
+ label: "Custom agent name"
567
+ }
568
+ ],
569
+ initialValue: defaultValue
570
+ });
571
+ if ((0, prompts_namespaceObject.isCancel)(selection)) abortSetup();
572
+ if ("__custom__" === selection) {
573
+ const input = await (0, prompts_namespaceObject.text)({
574
+ message: "Default agent name",
575
+ placeholder: defaultValue
576
+ });
577
+ if ((0, prompts_namespaceObject.isCancel)(input)) abortSetup();
578
+ const trimmed = String(input ?? "").trim();
579
+ if (!trimmed) return defaultValue;
580
+ return sanitizeAgentId(trimmed);
581
+ }
582
+ return sanitizeAgentId(String(selection));
583
+ }
584
+ async function promptForAgentSelection(agents, defaultAgent) {
585
+ const selection = await (0, prompts_namespaceObject.multiselect)({
586
+ message: "Choose bundled agents to copy",
587
+ options: agents.map((agent)=>({
588
+ value: agent,
589
+ label: agent
590
+ })),
591
+ required: false,
592
+ initialValues: agents.includes(defaultAgent) ? [
593
+ defaultAgent
594
+ ] : []
595
+ });
596
+ if ((0, prompts_namespaceObject.isCancel)(selection)) abortSetup();
597
+ const values = Array.isArray(selection) ? selection.map((value)=>String(value)) : [];
598
+ return Array.from(new Set(values));
599
+ }
600
+ function getBooleanOption(options, keys, defaultValue) {
601
+ for (const key of keys){
602
+ const raw = options[key];
603
+ if ("boolean" == typeof raw) return raw;
604
+ if ("string" == typeof raw) {
605
+ if ("true" === raw.toLowerCase()) return true;
606
+ if ("false" === raw.toLowerCase()) return false;
607
+ }
608
+ }
609
+ return defaultValue;
610
+ }
611
+ function shouldUseClack(outputManager, nonInteractive) {
612
+ return "interactive" === outputManager.getMode() && !nonInteractive;
613
+ }
614
+ function abortSetup() {
615
+ (0, prompts_namespaceObject.cancel)("Setup cancelled.");
616
+ process.exit(0);
617
+ }
618
+ async function runStep(useClack, label, handler) {
619
+ if (!useClack) return handler();
620
+ const active = (0, prompts_namespaceObject.spinner)();
621
+ active.start(label);
622
+ try {
623
+ const result = await handler();
624
+ active.stop(external_chalk_default().green("done"));
625
+ return result;
626
+ } catch (error) {
627
+ active.stop(external_chalk_default().red("failed"));
628
+ throw error;
629
+ }
630
+ }
631
+ async function promptConfirm(message, defaultValue) {
632
+ const response = await (0, prompts_namespaceObject.confirm)({
633
+ message,
634
+ initialValue: defaultValue
635
+ });
636
+ if ((0, prompts_namespaceObject.isCancel)(response)) abortSetup();
637
+ return Boolean(response);
638
+ }
639
+ function showInitHelp(outputManager, outputMode) {
640
+ if ("interactive" === outputMode) console.log(`
641
+ Wingman Init - Quickstart onboarding
642
+
643
+ Usage:
644
+ wingman init [options]
645
+ wingman init <agent-name>
646
+
647
+ Options:
648
+ --agent <name> Agent name (default: wingman)
649
+ --agents <list> Copy only these bundled agents (comma-separated)
650
+ --model <provider:model>
651
+ Set model for the starter agent
652
+ --provider <name> Provider to configure (anthropic|openai|openrouter|copilot|xai)
653
+ --token <token> Save provider token (non-interactive)
654
+ --api-key <key> Alias for --token
655
+ --fs-root <path> Add fs root (default: ".")
656
+ --skip-config Skip wingman.config.json setup
657
+ --skip-agent Skip starter agent creation
658
+ --skip-provider Skip provider credential setup
659
+ --merge Merge recommended settings into existing config
660
+ --force Overwrite existing config or agent files
661
+ --yes Accept defaults without prompts
662
+
663
+ Examples:
664
+ wingman init
665
+ wingman init coder --model openai:gpt-4o
666
+ wingman init --provider anthropic
667
+ wingman init --provider openai --api-key="sk-..."
668
+ `);
669
+ else outputManager.emitLog("info", "Init help requested");
670
+ }
671
+ function writeLine(outputManager, message) {
672
+ if ("interactive" === outputManager.getMode()) console.log(message);
673
+ else outputManager.emitLog("info", message);
674
+ }
675
+ exports.executeInitCommand = __webpack_exports__.executeInitCommand;
676
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
677
+ "executeInitCommand"
678
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
679
+ Object.defineProperty(exports, '__esModule', {
680
+ value: true
681
+ });
@@ -0,0 +1,10 @@
1
+ import type { InitCommandArgs } from "../types/init.js";
2
+ export interface InitCommandOptions {
3
+ workspace?: string;
4
+ configDir?: string;
5
+ }
6
+ /**
7
+ * Execute the init command
8
+ * This is the handler for: wingman init [options]
9
+ */
10
+ export declare function executeInitCommand(args: InitCommandArgs, options?: InitCommandOptions): Promise<void>;