@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,72 @@
1
+ "use strict";
2
+ var __webpack_modules__ = {
3
+ "./mdns.js" (module) {
4
+ module.exports = require("./mdns.cjs");
5
+ },
6
+ "./tailscale.js" (module) {
7
+ module.exports = require("./tailscale.cjs");
8
+ },
9
+ "./types.js" (module) {
10
+ module.exports = require("./types.cjs");
11
+ }
12
+ };
13
+ var __webpack_module_cache__ = {};
14
+ function __webpack_require__(moduleId) {
15
+ var cachedModule = __webpack_module_cache__[moduleId];
16
+ if (void 0 !== cachedModule) return cachedModule.exports;
17
+ var module = __webpack_module_cache__[moduleId] = {
18
+ exports: {}
19
+ };
20
+ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
21
+ return module.exports;
22
+ }
23
+ (()=>{
24
+ __webpack_require__.n = (module)=>{
25
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
26
+ __webpack_require__.d(getter, {
27
+ a: getter
28
+ });
29
+ return getter;
30
+ };
31
+ })();
32
+ (()=>{
33
+ __webpack_require__.d = (exports1, definition)=>{
34
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
35
+ enumerable: true,
36
+ get: definition[key]
37
+ });
38
+ };
39
+ })();
40
+ (()=>{
41
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
42
+ })();
43
+ (()=>{
44
+ __webpack_require__.r = (exports1)=>{
45
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
46
+ value: 'Module'
47
+ });
48
+ Object.defineProperty(exports1, '__esModule', {
49
+ value: true
50
+ });
51
+ };
52
+ })();
53
+ var __webpack_exports__ = {};
54
+ (()=>{
55
+ __webpack_require__.r(__webpack_exports__);
56
+ var _types_js__rspack_import_0 = __webpack_require__("./types.js");
57
+ var __rspack_reexport = {};
58
+ for(const __rspack_import_key in _types_js__rspack_import_0)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_types_js__rspack_import_0[__rspack_import_key];
59
+ __webpack_require__.d(__webpack_exports__, __rspack_reexport);
60
+ var _mdns_js__rspack_import_1 = __webpack_require__("./mdns.js");
61
+ var __rspack_reexport = {};
62
+ for(const __rspack_import_key in _mdns_js__rspack_import_1)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_mdns_js__rspack_import_1[__rspack_import_key];
63
+ __webpack_require__.d(__webpack_exports__, __rspack_reexport);
64
+ var _tailscale_js__rspack_import_2 = __webpack_require__("./tailscale.js");
65
+ var __rspack_reexport = {};
66
+ for(const __rspack_import_key in _tailscale_js__rspack_import_2)if ("default" !== __rspack_import_key) __rspack_reexport[__rspack_import_key] = ()=>_tailscale_js__rspack_import_2[__rspack_import_key];
67
+ __webpack_require__.d(__webpack_exports__, __rspack_reexport);
68
+ })();
69
+ for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
70
+ Object.defineProperty(exports, '__esModule', {
71
+ value: true
72
+ });
@@ -0,0 +1,3 @@
1
+ export * from "./types.js";
2
+ export * from "./mdns.js";
3
+ export * from "./tailscale.js";
@@ -0,0 +1,3 @@
1
+ export * from "./types.js";
2
+ export * from "./mdns.js";
3
+ export * from "./tailscale.js";
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ var __webpack_modules__ = {
3
+ os (module) {
4
+ module.exports = require("os");
5
+ }
6
+ };
7
+ var __webpack_module_cache__ = {};
8
+ function __webpack_require__(moduleId) {
9
+ var cachedModule = __webpack_module_cache__[moduleId];
10
+ if (void 0 !== cachedModule) return cachedModule.exports;
11
+ var module = __webpack_module_cache__[moduleId] = {
12
+ exports: {}
13
+ };
14
+ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
15
+ return module.exports;
16
+ }
17
+ (()=>{
18
+ __webpack_require__.n = (module)=>{
19
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
20
+ __webpack_require__.d(getter, {
21
+ a: getter
22
+ });
23
+ return getter;
24
+ };
25
+ })();
26
+ (()=>{
27
+ __webpack_require__.d = (exports1, definition)=>{
28
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
29
+ enumerable: true,
30
+ get: definition[key]
31
+ });
32
+ };
33
+ })();
34
+ (()=>{
35
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
36
+ })();
37
+ (()=>{
38
+ __webpack_require__.r = (exports1)=>{
39
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
40
+ value: 'Module'
41
+ });
42
+ Object.defineProperty(exports1, '__esModule', {
43
+ value: true
44
+ });
45
+ };
46
+ })();
47
+ var __webpack_exports__ = {};
48
+ (()=>{
49
+ __webpack_require__.r(__webpack_exports__);
50
+ __webpack_require__.d(__webpack_exports__, {
51
+ MDNSDiscoveryService: ()=>MDNSDiscoveryService
52
+ });
53
+ const external_multicast_dns_namespaceObject = require("multicast-dns");
54
+ var external_multicast_dns_default = /*#__PURE__*/ __webpack_require__.n(external_multicast_dns_namespaceObject);
55
+ var external_os_ = __webpack_require__("os");
56
+ function _define_property(obj, key, value) {
57
+ if (key in obj) Object.defineProperty(obj, key, {
58
+ value: value,
59
+ enumerable: true,
60
+ configurable: true,
61
+ writable: true
62
+ });
63
+ else obj[key] = value;
64
+ return obj;
65
+ }
66
+ const SERVICE_TYPE = "_wingman-gateway._tcp.local";
67
+ class MDNSDiscoveryService {
68
+ async announce(config) {
69
+ if (this.isAnnouncing) throw new Error("Already announcing");
70
+ this.config = config;
71
+ this.mdnsInstance = external_multicast_dns_default()();
72
+ this.mdnsInstance.on("query", (query)=>{
73
+ const isOurService = query.questions.some((q)=>q.name === SERVICE_TYPE || q.name === `${config.name}.${SERVICE_TYPE}`);
74
+ if (isOurService && this.mdnsInstance) {
75
+ const hostname = this.getLocalHostname();
76
+ const addresses = this.getLocalAddresses();
77
+ const txt = [
78
+ `version=${config.version}`,
79
+ `auth=${config.requireAuth ? "required" : "optional"}`,
80
+ `transport=${config.transport}`,
81
+ `capabilities=${config.capabilities.join(",")}`
82
+ ];
83
+ this.mdnsInstance.respond({
84
+ answers: [
85
+ {
86
+ name: SERVICE_TYPE,
87
+ type: "PTR",
88
+ ttl: 120,
89
+ data: `${config.name}.${SERVICE_TYPE}`
90
+ },
91
+ {
92
+ name: `${config.name}.${SERVICE_TYPE}`,
93
+ type: "SRV",
94
+ ttl: 120,
95
+ data: {
96
+ priority: 0,
97
+ weight: 0,
98
+ port: config.port,
99
+ target: hostname
100
+ }
101
+ },
102
+ {
103
+ name: `${config.name}.${SERVICE_TYPE}`,
104
+ type: "TXT",
105
+ ttl: 120,
106
+ data: Buffer.from(txt.join("\n"))
107
+ },
108
+ ...addresses.map((addr)=>({
109
+ name: hostname,
110
+ type: "A",
111
+ ttl: 120,
112
+ data: addr
113
+ }))
114
+ ]
115
+ });
116
+ }
117
+ });
118
+ this.isAnnouncing = true;
119
+ }
120
+ async stopAnnouncing() {
121
+ if (this.mdnsInstance) {
122
+ this.mdnsInstance.destroy();
123
+ this.mdnsInstance = null;
124
+ }
125
+ this.isAnnouncing = false;
126
+ this.config = null;
127
+ }
128
+ async discover(timeout = 5000) {
129
+ return new Promise((resolve)=>{
130
+ const discovered = new Map();
131
+ const mdnsClient = external_multicast_dns_default()();
132
+ const timer = setTimeout(()=>{
133
+ mdnsClient.destroy();
134
+ resolve(Array.from(discovered.values()));
135
+ }, timeout);
136
+ mdnsClient.on("response", (response)=>{
137
+ try {
138
+ const gateway = this.parseResponse(response);
139
+ if (gateway) discovered.set(gateway.name, gateway);
140
+ } catch (error) {}
141
+ });
142
+ mdnsClient.query({
143
+ questions: [
144
+ {
145
+ name: SERVICE_TYPE,
146
+ type: "PTR"
147
+ }
148
+ ]
149
+ });
150
+ const cleanup = ()=>{
151
+ clearTimeout(timer);
152
+ mdnsClient.destroy();
153
+ };
154
+ setTimeout(cleanup, timeout);
155
+ });
156
+ }
157
+ parseResponse(response) {
158
+ const ptrRecords = response.answers.filter((a)=>"PTR" === a.type);
159
+ const srvRecords = response.answers.filter((a)=>"SRV" === a.type);
160
+ const txtRecords = response.answers.filter((a)=>"TXT" === a.type);
161
+ const aRecords = response.answers.filter((a)=>"A" === a.type);
162
+ if (0 === ptrRecords.length) return null;
163
+ const instanceName = ptrRecords[0].data.replace(`.${SERVICE_TYPE}`, "");
164
+ const srv = srvRecords.find((r)=>r.name === `${instanceName}.${SERVICE_TYPE}`);
165
+ const txt = txtRecords.find((r)=>r.name === `${instanceName}.${SERVICE_TYPE}`);
166
+ if (!srv || !txt) return null;
167
+ const txtData = this.parseTxtRecord(txt.data);
168
+ const aRecord = aRecords.find((r)=>r.name === srv.data.target);
169
+ const host = aRecord?.data || "localhost";
170
+ const port = srv.data.port;
171
+ const transport = txtData.transport || "ws";
172
+ const url = `${transport}://${host}:${port}/ws`;
173
+ return {
174
+ name: instanceName,
175
+ url,
176
+ host,
177
+ port,
178
+ requireAuth: "required" === txtData.auth,
179
+ capabilities: txtData.capabilities ? txtData.capabilities.split(",") : [],
180
+ version: txtData.version || "1.0.0",
181
+ transport: transport
182
+ };
183
+ }
184
+ parseTxtRecord(data) {
185
+ const result = {};
186
+ const text = data.toString();
187
+ const lines = text.split("\n");
188
+ for (const line of lines){
189
+ const [key, value] = line.split("=");
190
+ if (key && value) result[key.trim()] = value.trim();
191
+ }
192
+ return result;
193
+ }
194
+ getLocalHostname() {
195
+ return `${__webpack_require__("os").hostname()}.local`;
196
+ }
197
+ getLocalAddresses() {
198
+ const addresses = [];
199
+ const interfaces = (0, external_os_.networkInterfaces)();
200
+ for (const name of Object.keys(interfaces)){
201
+ const nets = interfaces[name];
202
+ if (nets) {
203
+ for (const net of nets)if ("IPv4" === net.family && !net.internal) addresses.push(net.address);
204
+ }
205
+ }
206
+ return addresses;
207
+ }
208
+ constructor(){
209
+ _define_property(this, "mdnsInstance", null);
210
+ _define_property(this, "isAnnouncing", false);
211
+ _define_property(this, "config", null);
212
+ }
213
+ }
214
+ })();
215
+ exports.MDNSDiscoveryService = __webpack_exports__.MDNSDiscoveryService;
216
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
217
+ "MDNSDiscoveryService"
218
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
219
+ Object.defineProperty(exports, '__esModule', {
220
+ value: true
221
+ });
@@ -0,0 +1,37 @@
1
+ import type { DiscoveryService, DiscoveryConfig, DiscoveredGateway } from "./types.js";
2
+ /**
3
+ * mDNS/Bonjour discovery service for local network
4
+ */
5
+ export declare class MDNSDiscoveryService implements DiscoveryService {
6
+ private mdnsInstance;
7
+ private isAnnouncing;
8
+ private config;
9
+ /**
10
+ * Start announcing this gateway on the local network
11
+ */
12
+ announce(config: DiscoveryConfig): Promise<void>;
13
+ /**
14
+ * Stop announcing this gateway
15
+ */
16
+ stopAnnouncing(): Promise<void>;
17
+ /**
18
+ * Discover available gateways on the local network
19
+ */
20
+ discover(timeout?: number): Promise<DiscoveredGateway[]>;
21
+ /**
22
+ * Parse mDNS response into DiscoveredGateway
23
+ */
24
+ private parseResponse;
25
+ /**
26
+ * Parse TXT record data
27
+ */
28
+ private parseTxtRecord;
29
+ /**
30
+ * Get local hostname
31
+ */
32
+ private getLocalHostname;
33
+ /**
34
+ * Get local IP addresses
35
+ */
36
+ private getLocalAddresses;
37
+ }
@@ -0,0 +1,177 @@
1
+ import * as __rspack_external_os from "os";
2
+ import multicast_dns from "multicast-dns";
3
+ var __webpack_modules__ = {
4
+ os (module) {
5
+ module.exports = __rspack_external_os;
6
+ }
7
+ };
8
+ var __webpack_module_cache__ = {};
9
+ function __webpack_require__(moduleId) {
10
+ var cachedModule = __webpack_module_cache__[moduleId];
11
+ if (void 0 !== cachedModule) return cachedModule.exports;
12
+ var module = __webpack_module_cache__[moduleId] = {
13
+ exports: {}
14
+ };
15
+ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
16
+ return module.exports;
17
+ }
18
+ var external_os_ = __webpack_require__("os");
19
+ function _define_property(obj, key, value) {
20
+ if (key in obj) Object.defineProperty(obj, key, {
21
+ value: value,
22
+ enumerable: true,
23
+ configurable: true,
24
+ writable: true
25
+ });
26
+ else obj[key] = value;
27
+ return obj;
28
+ }
29
+ const SERVICE_TYPE = "_wingman-gateway._tcp.local";
30
+ class MDNSDiscoveryService {
31
+ async announce(config) {
32
+ if (this.isAnnouncing) throw new Error("Already announcing");
33
+ this.config = config;
34
+ this.mdnsInstance = multicast_dns();
35
+ this.mdnsInstance.on("query", (query)=>{
36
+ const isOurService = query.questions.some((q)=>q.name === SERVICE_TYPE || q.name === `${config.name}.${SERVICE_TYPE}`);
37
+ if (isOurService && this.mdnsInstance) {
38
+ const hostname = this.getLocalHostname();
39
+ const addresses = this.getLocalAddresses();
40
+ const txt = [
41
+ `version=${config.version}`,
42
+ `auth=${config.requireAuth ? "required" : "optional"}`,
43
+ `transport=${config.transport}`,
44
+ `capabilities=${config.capabilities.join(",")}`
45
+ ];
46
+ this.mdnsInstance.respond({
47
+ answers: [
48
+ {
49
+ name: SERVICE_TYPE,
50
+ type: "PTR",
51
+ ttl: 120,
52
+ data: `${config.name}.${SERVICE_TYPE}`
53
+ },
54
+ {
55
+ name: `${config.name}.${SERVICE_TYPE}`,
56
+ type: "SRV",
57
+ ttl: 120,
58
+ data: {
59
+ priority: 0,
60
+ weight: 0,
61
+ port: config.port,
62
+ target: hostname
63
+ }
64
+ },
65
+ {
66
+ name: `${config.name}.${SERVICE_TYPE}`,
67
+ type: "TXT",
68
+ ttl: 120,
69
+ data: Buffer.from(txt.join("\n"))
70
+ },
71
+ ...addresses.map((addr)=>({
72
+ name: hostname,
73
+ type: "A",
74
+ ttl: 120,
75
+ data: addr
76
+ }))
77
+ ]
78
+ });
79
+ }
80
+ });
81
+ this.isAnnouncing = true;
82
+ }
83
+ async stopAnnouncing() {
84
+ if (this.mdnsInstance) {
85
+ this.mdnsInstance.destroy();
86
+ this.mdnsInstance = null;
87
+ }
88
+ this.isAnnouncing = false;
89
+ this.config = null;
90
+ }
91
+ async discover(timeout = 5000) {
92
+ return new Promise((resolve)=>{
93
+ const discovered = new Map();
94
+ const mdnsClient = multicast_dns();
95
+ const timer = setTimeout(()=>{
96
+ mdnsClient.destroy();
97
+ resolve(Array.from(discovered.values()));
98
+ }, timeout);
99
+ mdnsClient.on("response", (response)=>{
100
+ try {
101
+ const gateway = this.parseResponse(response);
102
+ if (gateway) discovered.set(gateway.name, gateway);
103
+ } catch (error) {}
104
+ });
105
+ mdnsClient.query({
106
+ questions: [
107
+ {
108
+ name: SERVICE_TYPE,
109
+ type: "PTR"
110
+ }
111
+ ]
112
+ });
113
+ const cleanup = ()=>{
114
+ clearTimeout(timer);
115
+ mdnsClient.destroy();
116
+ };
117
+ setTimeout(cleanup, timeout);
118
+ });
119
+ }
120
+ parseResponse(response) {
121
+ const ptrRecords = response.answers.filter((a)=>"PTR" === a.type);
122
+ const srvRecords = response.answers.filter((a)=>"SRV" === a.type);
123
+ const txtRecords = response.answers.filter((a)=>"TXT" === a.type);
124
+ const aRecords = response.answers.filter((a)=>"A" === a.type);
125
+ if (0 === ptrRecords.length) return null;
126
+ const instanceName = ptrRecords[0].data.replace(`.${SERVICE_TYPE}`, "");
127
+ const srv = srvRecords.find((r)=>r.name === `${instanceName}.${SERVICE_TYPE}`);
128
+ const txt = txtRecords.find((r)=>r.name === `${instanceName}.${SERVICE_TYPE}`);
129
+ if (!srv || !txt) return null;
130
+ const txtData = this.parseTxtRecord(txt.data);
131
+ const aRecord = aRecords.find((r)=>r.name === srv.data.target);
132
+ const host = aRecord?.data || "localhost";
133
+ const port = srv.data.port;
134
+ const transport = txtData.transport || "ws";
135
+ const url = `${transport}://${host}:${port}/ws`;
136
+ return {
137
+ name: instanceName,
138
+ url,
139
+ host,
140
+ port,
141
+ requireAuth: "required" === txtData.auth,
142
+ capabilities: txtData.capabilities ? txtData.capabilities.split(",") : [],
143
+ version: txtData.version || "1.0.0",
144
+ transport: transport
145
+ };
146
+ }
147
+ parseTxtRecord(data) {
148
+ const result = {};
149
+ const text = data.toString();
150
+ const lines = text.split("\n");
151
+ for (const line of lines){
152
+ const [key, value] = line.split("=");
153
+ if (key && value) result[key.trim()] = value.trim();
154
+ }
155
+ return result;
156
+ }
157
+ getLocalHostname() {
158
+ return `${__webpack_require__("os").hostname()}.local`;
159
+ }
160
+ getLocalAddresses() {
161
+ const addresses = [];
162
+ const interfaces = (0, external_os_.networkInterfaces)();
163
+ for (const name of Object.keys(interfaces)){
164
+ const nets = interfaces[name];
165
+ if (nets) {
166
+ for (const net of nets)if ("IPv4" === net.family && !net.internal) addresses.push(net.address);
167
+ }
168
+ }
169
+ return addresses;
170
+ }
171
+ constructor(){
172
+ _define_property(this, "mdnsInstance", null);
173
+ _define_property(this, "isAnnouncing", false);
174
+ _define_property(this, "config", null);
175
+ }
176
+ }
177
+ export { MDNSDiscoveryService };
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ TailscaleDiscoveryService: ()=>TailscaleDiscoveryService
28
+ });
29
+ const external_child_process_namespaceObject = require("child_process");
30
+ const external_util_namespaceObject = require("util");
31
+ const external_logger_cjs_namespaceObject = require("../../logger.cjs");
32
+ function _define_property(obj, key, value) {
33
+ if (key in obj) Object.defineProperty(obj, key, {
34
+ value: value,
35
+ enumerable: true,
36
+ configurable: true,
37
+ writable: true
38
+ });
39
+ else obj[key] = value;
40
+ return obj;
41
+ }
42
+ const execAsync = (0, external_util_namespaceObject.promisify)(external_child_process_namespaceObject.exec);
43
+ const logger = (0, external_logger_cjs_namespaceObject.createLogger)();
44
+ class TailscaleDiscoveryService {
45
+ async announce(config) {
46
+ this.isAnnouncing = true;
47
+ this.config = config;
48
+ }
49
+ async stopAnnouncing() {
50
+ this.isAnnouncing = false;
51
+ this.config = null;
52
+ }
53
+ async discover(timeout = 5000) {
54
+ try {
55
+ const devices = await this.getTailscaleDevices();
56
+ const gateways = [];
57
+ for (const device of devices){
58
+ if (!device.online) continue;
59
+ const isGateway = device.tags?.some((tag)=>tag.toLowerCase().includes("wingman-gateway")) || device.hostname.toLowerCase().includes("gateway");
60
+ if (!isGateway) continue;
61
+ const gatewayInfo = await this.probeGateway(device.ip, 3000);
62
+ if (gatewayInfo) gateways.push(gatewayInfo);
63
+ }
64
+ return gateways;
65
+ } catch (error) {
66
+ logger.error("Tailscale discovery failed", error);
67
+ return [];
68
+ }
69
+ }
70
+ async getTailscaleDevices() {
71
+ try {
72
+ const { stdout } = await execAsync("tailscale status --json");
73
+ const status = JSON.parse(stdout);
74
+ const devices = [];
75
+ if (status.Peer) for (const [id, peerData] of Object.entries(status.Peer)){
76
+ const peer = peerData;
77
+ devices.push({
78
+ id,
79
+ hostname: peer.HostName || peer.DNSName?.split(".")[0] || id,
80
+ ip: peer.TailscaleIPs?.[0] || peer.Addrs?.[0]?.split(":")[0] || "",
81
+ online: peer.Online ?? false,
82
+ tags: peer.Tags || []
83
+ });
84
+ }
85
+ return devices;
86
+ } catch (error) {
87
+ logger.error("Failed to get Tailscale devices", error);
88
+ return [];
89
+ }
90
+ }
91
+ async probeGateway(ip, port) {
92
+ try {
93
+ const response = await fetch(`http://${ip}:${port}/health`, {
94
+ signal: AbortSignal.timeout(2000)
95
+ });
96
+ if (!response.ok) return null;
97
+ const health = await response.json();
98
+ if ("wingman-gateway" !== health.service) return null;
99
+ let capabilities = [
100
+ "broadcast",
101
+ "direct",
102
+ "groups"
103
+ ];
104
+ let version = "1.0.0";
105
+ try {
106
+ const statsResponse = await fetch(`http://${ip}:${port}/stats`, {
107
+ signal: AbortSignal.timeout(2000)
108
+ });
109
+ if (statsResponse.ok) {
110
+ const stats = await statsResponse.json();
111
+ if (stats.capabilities) capabilities = stats.capabilities;
112
+ if (stats.version) version = stats.version;
113
+ }
114
+ } catch {}
115
+ return {
116
+ name: health.name || `Gateway-${ip}`,
117
+ url: `ws://${ip}:${port}/ws`,
118
+ host: ip,
119
+ port,
120
+ requireAuth: health.requireAuth ?? false,
121
+ capabilities,
122
+ version,
123
+ transport: "ws"
124
+ };
125
+ } catch (error) {
126
+ return null;
127
+ }
128
+ }
129
+ constructor(){
130
+ _define_property(this, "isAnnouncing", false);
131
+ _define_property(this, "config", null);
132
+ }
133
+ }
134
+ exports.TailscaleDiscoveryService = __webpack_exports__.TailscaleDiscoveryService;
135
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
136
+ "TailscaleDiscoveryService"
137
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
138
+ Object.defineProperty(exports, '__esModule', {
139
+ value: true
140
+ });
@@ -0,0 +1,31 @@
1
+ import type { DiscoveryService, DiscoveryConfig, DiscoveredGateway } from "./types.js";
2
+ /**
3
+ * Tailscale discovery service
4
+ * Uses Tailscale CLI to discover gateways on the Tailnet
5
+ */
6
+ export declare class TailscaleDiscoveryService implements DiscoveryService {
7
+ private isAnnouncing;
8
+ private config;
9
+ /**
10
+ * Announce this gateway on Tailscale
11
+ * Note: Tailscale announcement is done via tags set in Tailscale admin console
12
+ * This method is a no-op but maintains interface compatibility
13
+ */
14
+ announce(config: DiscoveryConfig): Promise<void>;
15
+ /**
16
+ * Stop announcing this gateway
17
+ */
18
+ stopAnnouncing(): Promise<void>;
19
+ /**
20
+ * Discover gateways on the Tailscale network
21
+ */
22
+ discover(timeout?: number): Promise<DiscoveredGateway[]>;
23
+ /**
24
+ * Get list of Tailscale devices on the network
25
+ */
26
+ private getTailscaleDevices;
27
+ /**
28
+ * Probe a device to check if it's running a Wingman gateway
29
+ */
30
+ private probeGateway;
31
+ }