@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.
- package/.wingman/agents/README.md +161 -0
- package/.wingman/agents/coding/agent.md +147 -0
- package/.wingman/agents/coding/implementor.md +56 -0
- package/.wingman/agents/main/agent.md +19 -0
- package/.wingman/agents/researcher/agent.md +62 -0
- package/.wingman/agents/stock-trader/agent.md +223 -0
- package/.wingman/agents/stock-trader/chain-curator.md +24 -0
- package/.wingman/agents/stock-trader/goal-translator.md +42 -0
- package/.wingman/agents/stock-trader/guardrails-veto.md +11 -0
- package/.wingman/agents/stock-trader/path-planner.md +23 -0
- package/.wingman/agents/stock-trader/regime-analyst.md +15 -0
- package/.wingman/agents/stock-trader/risk.md +20 -0
- package/.wingman/agents/stock-trader/selection.md +22 -0
- package/.wingman/agents/stock-trader/strategy-composer.md +38 -0
- package/.wingman/agents/wingman/agent.json +12 -0
- package/bin/wingman +7 -0
- package/dist/agent/config/agentConfig.cjs +95 -0
- package/dist/agent/config/agentConfig.d.ts +187 -0
- package/dist/agent/config/agentConfig.js +52 -0
- package/dist/agent/config/agentLoader.cjs +242 -0
- package/dist/agent/config/agentLoader.d.ts +42 -0
- package/dist/agent/config/agentLoader.js +208 -0
- package/dist/agent/config/mcpClientManager.cjs +168 -0
- package/dist/agent/config/mcpClientManager.d.ts +41 -0
- package/dist/agent/config/mcpClientManager.js +134 -0
- package/dist/agent/config/modelFactory.cjs +175 -0
- package/dist/agent/config/modelFactory.d.ts +33 -0
- package/dist/agent/config/modelFactory.js +141 -0
- package/dist/agent/config/toolRegistry.cjs +111 -0
- package/dist/agent/config/toolRegistry.d.ts +25 -0
- package/dist/agent/config/toolRegistry.js +71 -0
- package/dist/agent/middleware/additional-messages.cjs +60 -0
- package/dist/agent/middleware/additional-messages.d.ts +7 -0
- package/dist/agent/middleware/additional-messages.js +26 -0
- package/dist/agent/middleware/hooks/executor.cjs +137 -0
- package/dist/agent/middleware/hooks/executor.d.ts +52 -0
- package/dist/agent/middleware/hooks/executor.js +103 -0
- package/dist/agent/middleware/hooks/input-builder.cjs +55 -0
- package/dist/agent/middleware/hooks/input-builder.d.ts +15 -0
- package/dist/agent/middleware/hooks/input-builder.js +21 -0
- package/dist/agent/middleware/hooks/matcher.cjs +59 -0
- package/dist/agent/middleware/hooks/matcher.d.ts +27 -0
- package/dist/agent/middleware/hooks/matcher.js +22 -0
- package/dist/agent/middleware/hooks/merger.cjs +54 -0
- package/dist/agent/middleware/hooks/merger.d.ts +18 -0
- package/dist/agent/middleware/hooks/merger.js +20 -0
- package/dist/agent/middleware/hooks/types.cjs +62 -0
- package/dist/agent/middleware/hooks/types.d.ts +82 -0
- package/dist/agent/middleware/hooks/types.js +19 -0
- package/dist/agent/middleware/hooks.cjs +79 -0
- package/dist/agent/middleware/hooks.d.ts +19 -0
- package/dist/agent/middleware/hooks.js +45 -0
- package/dist/agent/middleware/media-compat.cjs +80 -0
- package/dist/agent/middleware/media-compat.d.ts +7 -0
- package/dist/agent/middleware/media-compat.js +46 -0
- package/dist/agent/tests/agentConfig.test.cjs +132 -0
- package/dist/agent/tests/agentConfig.test.d.ts +1 -0
- package/dist/agent/tests/agentConfig.test.js +126 -0
- package/dist/agent/tests/agentLoader.test.cjs +235 -0
- package/dist/agent/tests/agentLoader.test.d.ts +1 -0
- package/dist/agent/tests/agentLoader.test.js +229 -0
- package/dist/agent/tests/modelFactory.test.cjs +114 -0
- package/dist/agent/tests/modelFactory.test.d.ts +1 -0
- package/dist/agent/tests/modelFactory.test.js +108 -0
- package/dist/agent/tests/test-agent-loader.cjs +33 -0
- package/dist/agent/tests/test-agent-loader.d.ts +1 -0
- package/dist/agent/tests/test-agent-loader.js +27 -0
- package/dist/agent/tests/test-subagent-loading.cjs +99 -0
- package/dist/agent/tests/test-subagent-loading.d.ts +1 -0
- package/dist/agent/tests/test-subagent-loading.js +93 -0
- package/dist/agent/tests/toolRegistry.test.cjs +109 -0
- package/dist/agent/tests/toolRegistry.test.d.ts +1 -0
- package/dist/agent/tests/toolRegistry.test.js +103 -0
- package/dist/agent/tools/code_search.cjs +108 -0
- package/dist/agent/tools/code_search.d.ts +24 -0
- package/dist/agent/tools/code_search.js +74 -0
- package/dist/agent/tools/command_execute.cjs +136 -0
- package/dist/agent/tools/command_execute.d.ts +12 -0
- package/dist/agent/tools/command_execute.js +99 -0
- package/dist/agent/tools/git_status.cjs +126 -0
- package/dist/agent/tools/git_status.d.ts +15 -0
- package/dist/agent/tools/git_status.js +92 -0
- package/dist/agent/tools/internet_search.cjs +93 -0
- package/dist/agent/tools/internet_search.d.ts +25 -0
- package/dist/agent/tools/internet_search.js +56 -0
- package/dist/agent/tools/think.cjs +53 -0
- package/dist/agent/tools/think.d.ts +26 -0
- package/dist/agent/tools/think.js +16 -0
- package/dist/agent/tools/web_crawler.cjs +180 -0
- package/dist/agent/tools/web_crawler.d.ts +31 -0
- package/dist/agent/tools/web_crawler.js +143 -0
- package/dist/agent/utils.cjs +54 -0
- package/dist/agent/utils.d.ts +1 -0
- package/dist/agent/utils.js +10 -0
- package/dist/cli/commands/agent.cjs +169 -0
- package/dist/cli/commands/agent.d.ts +15 -0
- package/dist/cli/commands/agent.js +125 -0
- package/dist/cli/commands/gateway.cjs +601 -0
- package/dist/cli/commands/gateway.d.ts +12 -0
- package/dist/cli/commands/gateway.js +567 -0
- package/dist/cli/commands/init.cjs +681 -0
- package/dist/cli/commands/init.d.ts +10 -0
- package/dist/cli/commands/init.js +634 -0
- package/dist/cli/commands/provider.cjs +208 -0
- package/dist/cli/commands/provider.d.ts +5 -0
- package/dist/cli/commands/provider.js +174 -0
- package/dist/cli/commands/skill.cjs +145 -0
- package/dist/cli/commands/skill.d.ts +10 -0
- package/dist/cli/commands/skill.js +111 -0
- package/dist/cli/config/loader.cjs +143 -0
- package/dist/cli/config/loader.d.ts +14 -0
- package/dist/cli/config/loader.js +109 -0
- package/dist/cli/config/schema.cjs +262 -0
- package/dist/cli/config/schema.d.ts +268 -0
- package/dist/cli/config/schema.js +213 -0
- package/dist/cli/core/agentInvoker.cjs +284 -0
- package/dist/cli/core/agentInvoker.d.ts +77 -0
- package/dist/cli/core/agentInvoker.js +247 -0
- package/dist/cli/core/commandHandler.cjs +257 -0
- package/dist/cli/core/commandHandler.d.ts +62 -0
- package/dist/cli/core/commandHandler.js +223 -0
- package/dist/cli/core/database/bunSqliteAdapter.cjs +87 -0
- package/dist/cli/core/database/bunSqliteAdapter.d.ts +34 -0
- package/dist/cli/core/database/bunSqliteAdapter.js +53 -0
- package/dist/cli/core/loggerBridge.cjs +42 -0
- package/dist/cli/core/loggerBridge.d.ts +8 -0
- package/dist/cli/core/loggerBridge.js +8 -0
- package/dist/cli/core/outputManager.cjs +106 -0
- package/dist/cli/core/outputManager.d.ts +43 -0
- package/dist/cli/core/outputManager.js +72 -0
- package/dist/cli/core/sessionManager.cjs +535 -0
- package/dist/cli/core/sessionManager.d.ts +111 -0
- package/dist/cli/core/sessionManager.js +486 -0
- package/dist/cli/core/streamParser.cjs +328 -0
- package/dist/cli/core/streamParser.d.ts +42 -0
- package/dist/cli/core/streamParser.js +288 -0
- package/dist/cli/index.cjs +211 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +205 -0
- package/dist/cli/services/skillRepository.cjs +178 -0
- package/dist/cli/services/skillRepository.d.ts +35 -0
- package/dist/cli/services/skillRepository.js +144 -0
- package/dist/cli/services/skillService.cjs +336 -0
- package/dist/cli/services/skillService.d.ts +48 -0
- package/dist/cli/services/skillService.js +302 -0
- package/dist/cli/types/gateway.cjs +18 -0
- package/dist/cli/types/gateway.d.ts +18 -0
- package/dist/cli/types/gateway.js +0 -0
- package/dist/cli/types/init.cjs +18 -0
- package/dist/cli/types/init.d.ts +13 -0
- package/dist/cli/types/init.js +0 -0
- package/dist/cli/types/provider.cjs +18 -0
- package/dist/cli/types/provider.d.ts +9 -0
- package/dist/cli/types/provider.js +0 -0
- package/dist/cli/types/skill.cjs +18 -0
- package/dist/cli/types/skill.d.ts +71 -0
- package/dist/cli/types/skill.js +0 -0
- package/dist/cli/types.cjs +18 -0
- package/dist/cli/types.d.ts +175 -0
- package/dist/cli/types.js +0 -0
- package/dist/cli/ui/AgentOutput.cjs +82 -0
- package/dist/cli/ui/AgentOutput.d.ts +8 -0
- package/dist/cli/ui/AgentOutput.js +38 -0
- package/dist/cli/ui/App.cjs +285 -0
- package/dist/cli/ui/App.d.ts +6 -0
- package/dist/cli/ui/App.js +241 -0
- package/dist/cli/ui/ErrorDisplay.cjs +65 -0
- package/dist/cli/ui/ErrorDisplay.d.ts +8 -0
- package/dist/cli/ui/ErrorDisplay.js +21 -0
- package/dist/cli/ui/LogDisplay.cjs +74 -0
- package/dist/cli/ui/LogDisplay.d.ts +13 -0
- package/dist/cli/ui/LogDisplay.js +30 -0
- package/dist/cli/ui/SessionListDisplay.cjs +135 -0
- package/dist/cli/ui/SessionListDisplay.d.ts +9 -0
- package/dist/cli/ui/SessionListDisplay.js +91 -0
- package/dist/cli/ui/blockHelpers.cjs +80 -0
- package/dist/cli/ui/blockHelpers.d.ts +21 -0
- package/dist/cli/ui/blockHelpers.js +40 -0
- package/dist/cli/ui/components/ToolCallDisplay.cjs +207 -0
- package/dist/cli/ui/components/ToolCallDisplay.d.ts +7 -0
- package/dist/cli/ui/components/ToolCallDisplay.js +162 -0
- package/dist/cli/ui/components/ToolResultDisplay.cjs +86 -0
- package/dist/cli/ui/components/ToolResultDisplay.d.ts +8 -0
- package/dist/cli/ui/components/ToolResultDisplay.js +42 -0
- package/dist/cli/ui/toolDisplayHelpers.cjs +112 -0
- package/dist/cli/ui/toolDisplayHelpers.d.ts +3 -0
- package/dist/cli/ui/toolDisplayHelpers.js +72 -0
- package/dist/gateway/adapters/discord.cjs +298 -0
- package/dist/gateway/adapters/discord.d.ts +42 -0
- package/dist/gateway/adapters/discord.js +246 -0
- package/dist/gateway/auth.cjs +94 -0
- package/dist/gateway/auth.d.ts +36 -0
- package/dist/gateway/auth.js +60 -0
- package/dist/gateway/broadcast.cjs +131 -0
- package/dist/gateway/broadcast.d.ts +76 -0
- package/dist/gateway/broadcast.js +97 -0
- package/dist/gateway/client.cjs +282 -0
- package/dist/gateway/client.d.ts +141 -0
- package/dist/gateway/client.js +248 -0
- package/dist/gateway/daemon.cjs +195 -0
- package/dist/gateway/daemon.d.ts +67 -0
- package/dist/gateway/daemon.js +161 -0
- package/dist/gateway/discovery/index.cjs +72 -0
- package/dist/gateway/discovery/index.d.ts +3 -0
- package/dist/gateway/discovery/index.js +3 -0
- package/dist/gateway/discovery/mdns.cjs +221 -0
- package/dist/gateway/discovery/mdns.d.ts +37 -0
- package/dist/gateway/discovery/mdns.js +177 -0
- package/dist/gateway/discovery/tailscale.cjs +140 -0
- package/dist/gateway/discovery/tailscale.d.ts +31 -0
- package/dist/gateway/discovery/tailscale.js +106 -0
- package/dist/gateway/discovery/types.cjs +18 -0
- package/dist/gateway/discovery/types.d.ts +41 -0
- package/dist/gateway/discovery/types.js +0 -0
- package/dist/gateway/env.cjs +45 -0
- package/dist/gateway/env.d.ts +2 -0
- package/dist/gateway/env.js +8 -0
- package/dist/gateway/hooks/loader.cjs +137 -0
- package/dist/gateway/hooks/loader.d.ts +10 -0
- package/dist/gateway/hooks/loader.js +103 -0
- package/dist/gateway/hooks/registry.cjs +128 -0
- package/dist/gateway/hooks/registry.d.ts +13 -0
- package/dist/gateway/hooks/registry.js +94 -0
- package/dist/gateway/hooks/types.cjs +58 -0
- package/dist/gateway/hooks/types.d.ts +50 -0
- package/dist/gateway/hooks/types.js +18 -0
- package/dist/gateway/http/agents.cjs +280 -0
- package/dist/gateway/http/agents.d.ts +2 -0
- package/dist/gateway/http/agents.js +246 -0
- package/dist/gateway/http/fs.cjs +81 -0
- package/dist/gateway/http/fs.d.ts +2 -0
- package/dist/gateway/http/fs.js +47 -0
- package/dist/gateway/http/providers.cjs +120 -0
- package/dist/gateway/http/providers.d.ts +2 -0
- package/dist/gateway/http/providers.js +86 -0
- package/dist/gateway/http/routines.cjs +196 -0
- package/dist/gateway/http/routines.d.ts +20 -0
- package/dist/gateway/http/routines.js +159 -0
- package/dist/gateway/http/sessions.cjs +241 -0
- package/dist/gateway/http/sessions.d.ts +2 -0
- package/dist/gateway/http/sessions.js +207 -0
- package/dist/gateway/http/types.cjs +18 -0
- package/dist/gateway/http/types.d.ts +25 -0
- package/dist/gateway/http/types.js +0 -0
- package/dist/gateway/http/voice.cjs +167 -0
- package/dist/gateway/http/voice.d.ts +2 -0
- package/dist/gateway/http/voice.js +133 -0
- package/dist/gateway/http/webhooks.cjs +353 -0
- package/dist/gateway/http/webhooks.d.ts +22 -0
- package/dist/gateway/http/webhooks.js +313 -0
- package/dist/gateway/index.cjs +119 -0
- package/dist/gateway/index.d.ts +8 -0
- package/dist/gateway/index.js +9 -0
- package/dist/gateway/node.cjs +218 -0
- package/dist/gateway/node.d.ts +112 -0
- package/dist/gateway/node.js +184 -0
- package/dist/gateway/router.cjs +85 -0
- package/dist/gateway/router.d.ts +9 -0
- package/dist/gateway/router.js +51 -0
- package/dist/gateway/rpcClient.cjs +152 -0
- package/dist/gateway/rpcClient.d.ts +24 -0
- package/dist/gateway/rpcClient.js +118 -0
- package/dist/gateway/server.cjs +1175 -0
- package/dist/gateway/server.d.ts +185 -0
- package/dist/gateway/server.js +1138 -0
- package/dist/gateway/transport/http.cjs +153 -0
- package/dist/gateway/transport/http.d.ts +25 -0
- package/dist/gateway/transport/http.js +119 -0
- package/dist/gateway/transport/index.cjs +40 -0
- package/dist/gateway/transport/index.d.ts +3 -0
- package/dist/gateway/transport/index.js +3 -0
- package/dist/gateway/transport/types.cjs +18 -0
- package/dist/gateway/transport/types.d.ts +59 -0
- package/dist/gateway/transport/types.js +0 -0
- package/dist/gateway/transport/websocket.cjs +132 -0
- package/dist/gateway/transport/websocket.d.ts +21 -0
- package/dist/gateway/transport/websocket.js +98 -0
- package/dist/gateway/types.cjs +18 -0
- package/dist/gateway/types.d.ts +215 -0
- package/dist/gateway/types.js +0 -0
- package/dist/gateway/validation.cjs +225 -0
- package/dist/gateway/validation.d.ts +157 -0
- package/dist/gateway/validation.js +158 -0
- package/dist/index.cjs +95 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +6 -0
- package/dist/logger.cjs +270 -0
- package/dist/logger.d.ts +54 -0
- package/dist/logger.js +215 -0
- package/dist/providers/copilot.cjs +148 -0
- package/dist/providers/copilot.d.ts +3 -0
- package/dist/providers/copilot.js +114 -0
- package/dist/providers/credentials.cjs +154 -0
- package/dist/providers/credentials.d.ts +26 -0
- package/dist/providers/credentials.js +99 -0
- package/dist/providers/oauth.cjs +279 -0
- package/dist/providers/oauth.d.ts +13 -0
- package/dist/providers/oauth.js +245 -0
- package/dist/providers/registry.cjs +138 -0
- package/dist/providers/registry.d.ts +32 -0
- package/dist/providers/registry.js +98 -0
- package/dist/tests/additionalMessageMiddleware.test.cjs +45 -0
- package/dist/tests/additionalMessageMiddleware.test.d.ts +1 -0
- package/dist/tests/additionalMessageMiddleware.test.js +39 -0
- package/dist/tests/agent-config-voice.test.cjs +25 -0
- package/dist/tests/agent-config-voice.test.d.ts +1 -0
- package/dist/tests/agent-config-voice.test.js +19 -0
- package/dist/tests/agentInvokerAttachments.test.cjs +67 -0
- package/dist/tests/agentInvokerAttachments.test.d.ts +1 -0
- package/dist/tests/agentInvokerAttachments.test.js +61 -0
- package/dist/tests/attachments-utils.test.cjs +46 -0
- package/dist/tests/attachments-utils.test.d.ts +1 -0
- package/dist/tests/attachments-utils.test.js +40 -0
- package/dist/tests/bunSqliteAdapter.test.cjs +265 -0
- package/dist/tests/bunSqliteAdapter.test.d.ts +1 -0
- package/dist/tests/bunSqliteAdapter.test.js +259 -0
- package/dist/tests/candleRange.test.cjs +48 -0
- package/dist/tests/candleRange.test.d.ts +1 -0
- package/dist/tests/candleRange.test.js +42 -0
- package/dist/tests/cli-config-loader.test.cjs +364 -0
- package/dist/tests/cli-config-loader.test.d.ts +1 -0
- package/dist/tests/cli-config-loader.test.js +358 -0
- package/dist/tests/cli-init.test.cjs +82 -0
- package/dist/tests/cli-init.test.d.ts +1 -0
- package/dist/tests/cli-init.test.js +76 -0
- package/dist/tests/discord-adapter.test.cjs +55 -0
- package/dist/tests/discord-adapter.test.d.ts +1 -0
- package/dist/tests/discord-adapter.test.js +49 -0
- package/dist/tests/gateway.test.cjs +319 -0
- package/dist/tests/gateway.test.d.ts +1 -0
- package/dist/tests/gateway.test.js +313 -0
- package/dist/tests/hooks-matcher.test.cjs +309 -0
- package/dist/tests/hooks-matcher.test.d.ts +1 -0
- package/dist/tests/hooks-matcher.test.js +303 -0
- package/dist/tests/hooks-merger.test.cjs +528 -0
- package/dist/tests/hooks-merger.test.d.ts +1 -0
- package/dist/tests/hooks-merger.test.js +522 -0
- package/dist/tests/integration/agent-invocation.integration.test.cjs +264 -0
- package/dist/tests/integration/agent-invocation.integration.test.d.ts +1 -0
- package/dist/tests/integration/agent-invocation.integration.test.js +258 -0
- package/dist/tests/integration/finnhub-candles.integration.test.cjs +98 -0
- package/dist/tests/integration/finnhub-candles.integration.test.d.ts +1 -0
- package/dist/tests/integration/finnhub-candles.integration.test.js +92 -0
- package/dist/tests/logger.test.cjs +353 -0
- package/dist/tests/logger.test.d.ts +1 -0
- package/dist/tests/logger.test.js +347 -0
- package/dist/tests/mediaCompatibilityMiddleware.test.cjs +106 -0
- package/dist/tests/mediaCompatibilityMiddleware.test.d.ts +1 -0
- package/dist/tests/mediaCompatibilityMiddleware.test.js +100 -0
- package/dist/tests/routines-api.test.cjs +107 -0
- package/dist/tests/routines-api.test.d.ts +1 -0
- package/dist/tests/routines-api.test.js +101 -0
- package/dist/tests/sessionMessageAttachments.test.cjs +108 -0
- package/dist/tests/sessionMessageAttachments.test.d.ts +1 -0
- package/dist/tests/sessionMessageAttachments.test.js +102 -0
- package/dist/tests/sessionMessageRole.test.cjs +44 -0
- package/dist/tests/sessionMessageRole.test.d.ts +1 -0
- package/dist/tests/sessionMessageRole.test.js +38 -0
- package/dist/tests/sessionStateMessages.test.cjs +72 -0
- package/dist/tests/sessionStateMessages.test.d.ts +1 -0
- package/dist/tests/sessionStateMessages.test.js +66 -0
- package/dist/tests/sessions-api.test.cjs +68 -0
- package/dist/tests/sessions-api.test.d.ts +1 -0
- package/dist/tests/sessions-api.test.js +62 -0
- package/dist/tests/technicalIndicators.test.cjs +82 -0
- package/dist/tests/technicalIndicators.test.d.ts +1 -0
- package/dist/tests/technicalIndicators.test.js +76 -0
- package/dist/tests/toolDisplayHelpers.test.cjs +43 -0
- package/dist/tests/toolDisplayHelpers.test.d.ts +1 -0
- package/dist/tests/toolDisplayHelpers.test.js +37 -0
- package/dist/tests/voice-config.test.cjs +35 -0
- package/dist/tests/voice-config.test.d.ts +1 -0
- package/dist/tests/voice-config.test.js +29 -0
- package/dist/tests/yahooCandles.test.cjs +111 -0
- package/dist/tests/yahooCandles.test.d.ts +1 -0
- package/dist/tests/yahooCandles.test.js +105 -0
- package/dist/tools/finance/candleRange.cjs +71 -0
- package/dist/tools/finance/candleRange.d.ts +21 -0
- package/dist/tools/finance/candleRange.js +28 -0
- package/dist/tools/finance/optionsAnalytics.cjs +222 -0
- package/dist/tools/finance/optionsAnalytics.d.ts +44 -0
- package/dist/tools/finance/optionsAnalytics.js +188 -0
- package/dist/tools/finance/optionsAnalytics.test.cjs +128 -0
- package/dist/tools/finance/optionsAnalytics.test.d.ts +1 -0
- package/dist/tools/finance/optionsAnalytics.test.js +122 -0
- package/dist/tools/finance/technicalIndicators.cjs +111 -0
- package/dist/tools/finance/technicalIndicators.d.ts +15 -0
- package/dist/tools/finance/technicalIndicators.js +68 -0
- package/dist/tools/finance/yahooCandles.cjs +125 -0
- package/dist/tools/finance/yahooCandles.d.ts +41 -0
- package/dist/tools/finance/yahooCandles.js +85 -0
- package/dist/tools/mcp-finance.cjs +649 -0
- package/dist/tools/mcp-finance.d.ts +1 -0
- package/dist/tools/mcp-finance.js +631 -0
- package/dist/types/agents.cjs +18 -0
- package/dist/types/agents.d.ts +11 -0
- package/dist/types/agents.js +0 -0
- package/dist/types/hooks.cjs +18 -0
- package/dist/types/hooks.d.ts +82 -0
- package/dist/types/hooks.js +0 -0
- package/dist/types/mcp.cjs +86 -0
- package/dist/types/mcp.d.ts +107 -0
- package/dist/types/mcp.js +40 -0
- package/dist/types/voice.cjs +103 -0
- package/dist/types/voice.d.ts +117 -0
- package/dist/types/voice.js +51 -0
- package/dist/utils/attachments.cjs +46 -0
- package/dist/utils/attachments.d.ts +7 -0
- package/dist/utils/attachments.js +12 -0
- package/dist/voice/config.cjs +52 -0
- package/dist/voice/config.d.ts +8 -0
- package/dist/voice/config.js +18 -0
- package/dist/webui/assets/index-BA0HaStz.css +1 -0
- package/dist/webui/assets/index-NHgTZsWN.js +112 -0
- package/dist/webui/assets/wingman_icon-DOy91UEF.webp +0 -0
- package/dist/webui/assets/wingman_logo-Cogyt3qm.webp +0 -0
- package/dist/webui/index.html +19 -0
- package/package.json +130 -0
|
@@ -0,0 +1,631 @@
|
|
|
1
|
+
import * as __rspack_external__finance_candleRange_js_37dcd2cb from "./finance/candleRange.js";
|
|
2
|
+
import * as __rspack_external__finance_optionsAnalytics_js_b4458756 from "./finance/optionsAnalytics.js";
|
|
3
|
+
import * as __rspack_external__finance_technicalIndicators_js_d909860a from "./finance/technicalIndicators.js";
|
|
4
|
+
import * as __rspack_external__finance_yahooCandles_js_99c2b945 from "./finance/yahooCandles.js";
|
|
5
|
+
import * as __rspack_external__modelcontextprotocol_sdk_server_mcp_js_2c42c5d0 from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
6
|
+
import * as __rspack_external__modelcontextprotocol_sdk_server_stdio_js_4f861174 from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
7
|
+
import * as __rspack_external_zod from "zod";
|
|
8
|
+
var __webpack_modules__ = {
|
|
9
|
+
"./src/tools/mcp-finance.ts" (module, __webpack_exports__, __webpack_require__) {
|
|
10
|
+
__webpack_require__.a(module, async function(__rspack_load_async_deps, __rspack_async_done) {
|
|
11
|
+
try {
|
|
12
|
+
__webpack_require__.r(__webpack_exports__);
|
|
13
|
+
var _modelcontextprotocol_sdk_server_mcp_js__rspack_import_0 = __webpack_require__("@modelcontextprotocol/sdk/server/mcp.js");
|
|
14
|
+
var _modelcontextprotocol_sdk_server_stdio_js__rspack_import_1 = __webpack_require__("@modelcontextprotocol/sdk/server/stdio.js");
|
|
15
|
+
var zod__rspack_import_2 = __webpack_require__("zod");
|
|
16
|
+
var _finance_technicalIndicators_js__rspack_import_3 = __webpack_require__("./finance/technicalIndicators.js");
|
|
17
|
+
var _finance_optionsAnalytics_js__rspack_import_4 = __webpack_require__("./finance/optionsAnalytics.js");
|
|
18
|
+
var _finance_candleRange_js__rspack_import_5 = __webpack_require__("./finance/candleRange.js");
|
|
19
|
+
var _finance_yahooCandles_js__rspack_import_6 = __webpack_require__("./finance/yahooCandles.js");
|
|
20
|
+
function _define_property(obj, key, value) {
|
|
21
|
+
if (key in obj) Object.defineProperty(obj, key, {
|
|
22
|
+
value: value,
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: true
|
|
26
|
+
});
|
|
27
|
+
else obj[key] = value;
|
|
28
|
+
return obj;
|
|
29
|
+
}
|
|
30
|
+
const DEFAULT_RATE_LIMIT_PER_MIN = 60;
|
|
31
|
+
const DEFAULT_WINDOW_MS = 60000;
|
|
32
|
+
const DEFAULT_MAX_RETRIES = 4;
|
|
33
|
+
const DEFAULT_BACKOFF_BASE_MS = 500;
|
|
34
|
+
const DEFAULT_BACKOFF_MAX_MS = 8000;
|
|
35
|
+
const FINNHUB_BASE_URL = process.env.FINNHUB_BASE_URL?.trim() || "https://finnhub.io/api/v1";
|
|
36
|
+
const YAHOO_FINANCE_BASE_URL = process.env.YAHOO_FINANCE_BASE_URL?.trim() || "https://query1.finance.yahoo.com";
|
|
37
|
+
const FINNHUB_API_KEY = process.env.FINNHUB_API_KEY?.trim();
|
|
38
|
+
const candleProvider = process.env.FINNHUB_CANDLES_PROVIDER?.trim().toLowerCase() || "yahoo";
|
|
39
|
+
const yahooIncludePrePost = process.env.YAHOO_INCLUDE_PREPOST?.trim() === "1";
|
|
40
|
+
if (!FINNHUB_API_KEY) {
|
|
41
|
+
console.error("FINNHUB_API_KEY is required to run the MCP finance server.");
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
const tier = process.env.FINNHUB_TIER?.trim().toLowerCase();
|
|
45
|
+
const tierOverridesRaw = process.env.FINNHUB_TIER_LIMITS;
|
|
46
|
+
let tierOverrides = {};
|
|
47
|
+
if (tierOverridesRaw) try {
|
|
48
|
+
const parsed = JSON.parse(tierOverridesRaw);
|
|
49
|
+
if (parsed && "object" == typeof parsed) tierOverrides = parsed;
|
|
50
|
+
} catch {
|
|
51
|
+
console.error("Invalid FINNHUB_TIER_LIMITS JSON. Expected format: {\"free\":60,\"pro\":300}");
|
|
52
|
+
}
|
|
53
|
+
const tierLimit = (()=>{
|
|
54
|
+
if (!tier) return;
|
|
55
|
+
const defaults = {
|
|
56
|
+
free: 60
|
|
57
|
+
};
|
|
58
|
+
return tierOverrides[tier] ?? defaults[tier];
|
|
59
|
+
})();
|
|
60
|
+
const rateLimitPerMin = Number.parseInt(process.env.FINNHUB_RATE_LIMIT_PER_MIN || "", 10) || tierLimit || DEFAULT_RATE_LIMIT_PER_MIN;
|
|
61
|
+
const windowMs = Number.parseInt(process.env.FINNHUB_RATE_LIMIT_WINDOW_MS || "", 10) || DEFAULT_WINDOW_MS;
|
|
62
|
+
const maxRetries = Number.parseInt(process.env.FINNHUB_MAX_RETRIES || "", 10) || DEFAULT_MAX_RETRIES;
|
|
63
|
+
const backoffBaseMs = Number.parseInt(process.env.FINNHUB_BACKOFF_BASE_MS || "", 10) || DEFAULT_BACKOFF_BASE_MS;
|
|
64
|
+
const backoffMaxMs = Number.parseInt(process.env.FINNHUB_BACKOFF_MAX_MS || "", 10) || DEFAULT_BACKOFF_MAX_MS;
|
|
65
|
+
const parsePositiveInt = (value)=>{
|
|
66
|
+
const parsed = Number.parseInt(value ?? "", 10);
|
|
67
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : void 0;
|
|
68
|
+
};
|
|
69
|
+
const maxIntradayDays = parsePositiveInt(process.env.FINNHUB_CANDLE_MAX_DAYS_INTRADAY) ?? _finance_candleRange_js__rspack_import_5.DEFAULT_CANDLE_MAX_DAYS_INTRADAY;
|
|
70
|
+
const maxDailyDays = parsePositiveInt(process.env.FINNHUB_CANDLE_MAX_DAYS_DAILY) ?? _finance_candleRange_js__rspack_import_5.DEFAULT_CANDLE_MAX_DAYS_DAILY;
|
|
71
|
+
const candleCapSummary = `Intraday capped to ${maxIntradayDays}d; daily+ capped to ${maxDailyDays}d.`;
|
|
72
|
+
const candleSourceSummary = "finnhub" === candleProvider ? "Source: Finnhub." : "auto" === candleProvider ? "Source: Finnhub with Yahoo fallback." : "Source: Yahoo Finance (best effort).";
|
|
73
|
+
const candleSessionSummary = yahooIncludePrePost ? "Includes pre/post market data." : "Regular session only.";
|
|
74
|
+
class RateLimiter {
|
|
75
|
+
async wait() {
|
|
76
|
+
let release;
|
|
77
|
+
const previous = this.queue;
|
|
78
|
+
this.queue = new Promise((resolve)=>{
|
|
79
|
+
release = resolve;
|
|
80
|
+
});
|
|
81
|
+
await previous;
|
|
82
|
+
try {
|
|
83
|
+
await this.acquire();
|
|
84
|
+
} finally{
|
|
85
|
+
release();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async acquire() {
|
|
89
|
+
this.resetIfNeeded();
|
|
90
|
+
if (this.tokens > 0) {
|
|
91
|
+
this.tokens -= 1;
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const waitMs = this.windowStart + this.windowDurationMs - Date.now();
|
|
95
|
+
if (waitMs > 0) await sleep(waitMs);
|
|
96
|
+
this.resetWindow();
|
|
97
|
+
this.tokens -= 1;
|
|
98
|
+
}
|
|
99
|
+
resetIfNeeded() {
|
|
100
|
+
if (Date.now() - this.windowStart >= this.windowDurationMs) this.resetWindow();
|
|
101
|
+
}
|
|
102
|
+
resetWindow() {
|
|
103
|
+
this.windowStart = Date.now();
|
|
104
|
+
this.tokens = this.limit;
|
|
105
|
+
}
|
|
106
|
+
constructor(limit, windowDurationMs){
|
|
107
|
+
_define_property(this, "limit", void 0);
|
|
108
|
+
_define_property(this, "windowDurationMs", void 0);
|
|
109
|
+
_define_property(this, "tokens", void 0);
|
|
110
|
+
_define_property(this, "windowStart", void 0);
|
|
111
|
+
_define_property(this, "queue", void 0);
|
|
112
|
+
this.limit = limit;
|
|
113
|
+
this.windowDurationMs = windowDurationMs;
|
|
114
|
+
this.queue = Promise.resolve();
|
|
115
|
+
this.tokens = limit;
|
|
116
|
+
this.windowStart = Date.now();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const rateLimiter = new RateLimiter(rateLimitPerMin, windowMs);
|
|
120
|
+
const sleep = (ms)=>new Promise((resolve)=>setTimeout(resolve, ms));
|
|
121
|
+
const buildUrl = (path, params)=>{
|
|
122
|
+
const url = new URL(`${FINNHUB_BASE_URL}${path}`);
|
|
123
|
+
for (const [key, value] of Object.entries(params))if (null != value && "" !== value) url.searchParams.set(key, value);
|
|
124
|
+
url.searchParams.set("token", FINNHUB_API_KEY);
|
|
125
|
+
return url.toString();
|
|
126
|
+
};
|
|
127
|
+
const parseRetryAfter = (value)=>{
|
|
128
|
+
if (!value) return null;
|
|
129
|
+
const seconds = Number.parseFloat(value);
|
|
130
|
+
if (!Number.isNaN(seconds)) return Math.max(0, 1000 * seconds);
|
|
131
|
+
const parsed = Date.parse(value);
|
|
132
|
+
if (!Number.isNaN(parsed)) return Math.max(0, parsed - Date.now());
|
|
133
|
+
return null;
|
|
134
|
+
};
|
|
135
|
+
const fetchWithBackoff = async (url)=>{
|
|
136
|
+
let attempt = 0;
|
|
137
|
+
let delay = backoffBaseMs;
|
|
138
|
+
for(;;){
|
|
139
|
+
const response = await fetch(url, {
|
|
140
|
+
headers: {
|
|
141
|
+
"User-Agent": "wingman-mcp-finance"
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
if (429 !== response.status) return response;
|
|
145
|
+
attempt += 1;
|
|
146
|
+
if (attempt > maxRetries) return response;
|
|
147
|
+
const retryAfter = parseRetryAfter(response.headers.get("retry-after"));
|
|
148
|
+
const jitter = Math.round(250 * Math.random());
|
|
149
|
+
const waitMs = Math.min(backoffMaxMs, retryAfter ?? delay + jitter);
|
|
150
|
+
await sleep(waitMs);
|
|
151
|
+
delay = Math.min(backoffMaxMs, 2 * delay);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
const fetchFinnhub = async (path, params)=>{
|
|
155
|
+
await rateLimiter.wait();
|
|
156
|
+
const url = buildUrl(path, params);
|
|
157
|
+
const response = await fetchWithBackoff(url);
|
|
158
|
+
if (!response.ok) {
|
|
159
|
+
const errorBody = await response.text();
|
|
160
|
+
throw new Error(`Finnhub error ${response.status}: ${errorBody}`);
|
|
161
|
+
}
|
|
162
|
+
return await response.json();
|
|
163
|
+
};
|
|
164
|
+
const fetchYahooCandles = async ({ symbol, resolution, from, to })=>{
|
|
165
|
+
const interval = (0, _finance_yahooCandles_js__rspack_import_6.mapYahooInterval)(resolution);
|
|
166
|
+
const url = (0, _finance_yahooCandles_js__rspack_import_6.buildYahooChartUrl)({
|
|
167
|
+
baseUrl: YAHOO_FINANCE_BASE_URL,
|
|
168
|
+
symbol,
|
|
169
|
+
from,
|
|
170
|
+
to,
|
|
171
|
+
interval,
|
|
172
|
+
includePrePost: yahooIncludePrePost
|
|
173
|
+
});
|
|
174
|
+
const response = await fetchWithBackoff(url);
|
|
175
|
+
if (!response.ok) {
|
|
176
|
+
const errorBody = await response.text();
|
|
177
|
+
return {
|
|
178
|
+
s: "error",
|
|
179
|
+
source: "yahoo",
|
|
180
|
+
error: `Yahoo error ${response.status}: ${errorBody}`
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
const payload = await response.json();
|
|
184
|
+
return (0, _finance_yahooCandles_js__rspack_import_6.extractYahooCandles)(payload);
|
|
185
|
+
};
|
|
186
|
+
const isFinnhubForbidden = (error)=>error instanceof Error && /\b403\b/.test(error.message);
|
|
187
|
+
const fetchCandlesWithFallback = async ({ symbol, resolution, from, to })=>{
|
|
188
|
+
if ("yahoo" === candleProvider) {
|
|
189
|
+
const data = await fetchYahooCandles({
|
|
190
|
+
symbol,
|
|
191
|
+
resolution,
|
|
192
|
+
from,
|
|
193
|
+
to
|
|
194
|
+
});
|
|
195
|
+
return {
|
|
196
|
+
data,
|
|
197
|
+
source: "yahoo"
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
if ("finnhub" === candleProvider) {
|
|
201
|
+
const data = await fetchFinnhub("/stock/candle", {
|
|
202
|
+
symbol,
|
|
203
|
+
resolution: resolution || "D",
|
|
204
|
+
from: String(from),
|
|
205
|
+
to: String(to)
|
|
206
|
+
});
|
|
207
|
+
return {
|
|
208
|
+
data,
|
|
209
|
+
source: "finnhub"
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
try {
|
|
213
|
+
const data = await fetchFinnhub("/stock/candle", {
|
|
214
|
+
symbol,
|
|
215
|
+
resolution: resolution || "D",
|
|
216
|
+
from: String(from),
|
|
217
|
+
to: String(to)
|
|
218
|
+
});
|
|
219
|
+
return {
|
|
220
|
+
data,
|
|
221
|
+
source: "finnhub"
|
|
222
|
+
};
|
|
223
|
+
} catch (error) {
|
|
224
|
+
if (!isFinnhubForbidden(error)) throw error;
|
|
225
|
+
const data = await fetchYahooCandles({
|
|
226
|
+
symbol,
|
|
227
|
+
resolution,
|
|
228
|
+
from,
|
|
229
|
+
to
|
|
230
|
+
});
|
|
231
|
+
return {
|
|
232
|
+
data,
|
|
233
|
+
source: "yahoo"
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
const toResult = (data)=>({
|
|
238
|
+
content: [
|
|
239
|
+
{
|
|
240
|
+
type: "text",
|
|
241
|
+
text: JSON.stringify(data, null, 2)
|
|
242
|
+
}
|
|
243
|
+
],
|
|
244
|
+
structuredContent: {
|
|
245
|
+
data
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
const server = new _modelcontextprotocol_sdk_server_mcp_js__rspack_import_0.McpServer({
|
|
249
|
+
name: "wingman-finance",
|
|
250
|
+
version: "0.1.0"
|
|
251
|
+
});
|
|
252
|
+
server.registerTool("finnhub.symbolSearch", {
|
|
253
|
+
title: "Finnhub Symbol Search",
|
|
254
|
+
description: "Search for symbols or companies by query.",
|
|
255
|
+
inputSchema: zod__rspack_import_2.z.object({
|
|
256
|
+
query: zod__rspack_import_2.z.string().min(1)
|
|
257
|
+
})
|
|
258
|
+
}, async ({ query })=>{
|
|
259
|
+
const data = await fetchFinnhub("/search", {
|
|
260
|
+
q: query
|
|
261
|
+
});
|
|
262
|
+
return toResult(data);
|
|
263
|
+
});
|
|
264
|
+
server.registerTool("finnhub.quote", {
|
|
265
|
+
title: "Finnhub Quote",
|
|
266
|
+
description: "Get the latest quote for a symbol.",
|
|
267
|
+
inputSchema: zod__rspack_import_2.z.object({
|
|
268
|
+
symbol: zod__rspack_import_2.z.string().min(1)
|
|
269
|
+
})
|
|
270
|
+
}, async ({ symbol })=>{
|
|
271
|
+
const data = await fetchFinnhub("/quote", {
|
|
272
|
+
symbol
|
|
273
|
+
});
|
|
274
|
+
return toResult(data);
|
|
275
|
+
});
|
|
276
|
+
server.registerTool("finnhub.companyProfile", {
|
|
277
|
+
title: "Finnhub Company Profile",
|
|
278
|
+
description: "Get company profile data for a symbol.",
|
|
279
|
+
inputSchema: zod__rspack_import_2.z.object({
|
|
280
|
+
symbol: zod__rspack_import_2.z.string().min(1)
|
|
281
|
+
})
|
|
282
|
+
}, async ({ symbol })=>{
|
|
283
|
+
const data = await fetchFinnhub("/stock/profile2", {
|
|
284
|
+
symbol
|
|
285
|
+
});
|
|
286
|
+
return toResult(data);
|
|
287
|
+
});
|
|
288
|
+
server.registerTool("finnhub.financials", {
|
|
289
|
+
title: "Finnhub Financial Metrics",
|
|
290
|
+
description: "Get financial metrics (including P/E) for a symbol.",
|
|
291
|
+
inputSchema: zod__rspack_import_2.z.object({
|
|
292
|
+
symbol: zod__rspack_import_2.z.string().min(1),
|
|
293
|
+
metric: zod__rspack_import_2.z.string().optional().default("all")
|
|
294
|
+
})
|
|
295
|
+
}, async ({ symbol, metric })=>{
|
|
296
|
+
const data = await fetchFinnhub("/stock/metric", {
|
|
297
|
+
symbol,
|
|
298
|
+
metric: metric || "all"
|
|
299
|
+
});
|
|
300
|
+
return toResult(data);
|
|
301
|
+
});
|
|
302
|
+
server.registerTool("finnhub.earnings", {
|
|
303
|
+
title: "Finnhub Earnings",
|
|
304
|
+
description: "Get earnings history for a symbol.",
|
|
305
|
+
inputSchema: zod__rspack_import_2.z.object({
|
|
306
|
+
symbol: zod__rspack_import_2.z.string().min(1),
|
|
307
|
+
limit: zod__rspack_import_2.z.number().int().min(1).max(20).optional()
|
|
308
|
+
})
|
|
309
|
+
}, async ({ symbol, limit })=>{
|
|
310
|
+
const data = await fetchFinnhub("/stock/earnings", {
|
|
311
|
+
symbol,
|
|
312
|
+
...limit ? {
|
|
313
|
+
limit: String(limit)
|
|
314
|
+
} : {}
|
|
315
|
+
});
|
|
316
|
+
return toResult(data);
|
|
317
|
+
});
|
|
318
|
+
server.registerTool("finnhub.news", {
|
|
319
|
+
title: "Finnhub Company News",
|
|
320
|
+
description: "Get recent company news for a symbol.",
|
|
321
|
+
inputSchema: zod__rspack_import_2.z.object({
|
|
322
|
+
symbol: zod__rspack_import_2.z.string().min(1),
|
|
323
|
+
from: zod__rspack_import_2.z.string().optional(),
|
|
324
|
+
to: zod__rspack_import_2.z.string().optional()
|
|
325
|
+
})
|
|
326
|
+
}, async ({ symbol, from, to })=>{
|
|
327
|
+
const toDate = to || new Date().toISOString().slice(0, 10);
|
|
328
|
+
let fromDate = from;
|
|
329
|
+
if (!fromDate) {
|
|
330
|
+
const start = new Date();
|
|
331
|
+
start.setDate(start.getDate() - 7);
|
|
332
|
+
fromDate = start.toISOString().slice(0, 10);
|
|
333
|
+
}
|
|
334
|
+
const data = await fetchFinnhub("/company-news", {
|
|
335
|
+
symbol,
|
|
336
|
+
from: fromDate,
|
|
337
|
+
to: toDate
|
|
338
|
+
});
|
|
339
|
+
return toResult(data);
|
|
340
|
+
});
|
|
341
|
+
server.registerTool("finnhub.marketNews", {
|
|
342
|
+
title: "Finnhub Market News",
|
|
343
|
+
description: "Get broad market news (general category) for theme detection.",
|
|
344
|
+
inputSchema: zod__rspack_import_2.z.object({
|
|
345
|
+
category: zod__rspack_import_2.z.string().min(1).optional().default("general")
|
|
346
|
+
})
|
|
347
|
+
}, async ({ category })=>{
|
|
348
|
+
const data = await fetchFinnhub("/news", {
|
|
349
|
+
category: category || "general"
|
|
350
|
+
});
|
|
351
|
+
return toResult(data);
|
|
352
|
+
});
|
|
353
|
+
server.registerTool("finnhub.peers", {
|
|
354
|
+
title: "Finnhub Stock Peers",
|
|
355
|
+
description: "Get peer symbols for a company.",
|
|
356
|
+
inputSchema: zod__rspack_import_2.z.object({
|
|
357
|
+
symbol: zod__rspack_import_2.z.string().min(1)
|
|
358
|
+
})
|
|
359
|
+
}, async ({ symbol })=>{
|
|
360
|
+
const data = await fetchFinnhub("/stock/peers", {
|
|
361
|
+
symbol
|
|
362
|
+
});
|
|
363
|
+
return toResult(data);
|
|
364
|
+
});
|
|
365
|
+
server.registerTool("finnhub.candles", {
|
|
366
|
+
title: "Finnhub Candles",
|
|
367
|
+
description: `Get OHLCV candles for a symbol. ${candleCapSummary} ${candleSourceSummary} ${candleSessionSummary}`,
|
|
368
|
+
inputSchema: zod__rspack_import_2.z.object({
|
|
369
|
+
symbol: zod__rspack_import_2.z.string().min(1),
|
|
370
|
+
resolution: zod__rspack_import_2.z.string().optional().default("D"),
|
|
371
|
+
from: zod__rspack_import_2.z.number().int().optional(),
|
|
372
|
+
to: zod__rspack_import_2.z.number().int().optional(),
|
|
373
|
+
lookbackDays: zod__rspack_import_2.z.number().int().positive().optional()
|
|
374
|
+
})
|
|
375
|
+
}, async ({ symbol, resolution, from, to, lookbackDays })=>{
|
|
376
|
+
const range = (0, _finance_candleRange_js__rspack_import_5.resolveCandleRange)({
|
|
377
|
+
from,
|
|
378
|
+
to,
|
|
379
|
+
lookbackDays,
|
|
380
|
+
resolution,
|
|
381
|
+
maxIntradayDays,
|
|
382
|
+
maxDailyDays
|
|
383
|
+
});
|
|
384
|
+
const { data, source } = await fetchCandlesWithFallback({
|
|
385
|
+
symbol,
|
|
386
|
+
resolution,
|
|
387
|
+
from: range.from,
|
|
388
|
+
to: range.to
|
|
389
|
+
});
|
|
390
|
+
const result = "yahoo" !== source || data.source ? data : {
|
|
391
|
+
...data,
|
|
392
|
+
source
|
|
393
|
+
};
|
|
394
|
+
return toResult(result);
|
|
395
|
+
});
|
|
396
|
+
server.registerTool("finnhub.technicalSnapshot", {
|
|
397
|
+
title: "Finnhub Technical Snapshot",
|
|
398
|
+
description: `Fetch candles and compute RSI/EMA/ATR locally. ${candleCapSummary} ${candleSourceSummary} ${candleSessionSummary}`,
|
|
399
|
+
inputSchema: zod__rspack_import_2.z.object({
|
|
400
|
+
symbol: zod__rspack_import_2.z.string().min(1),
|
|
401
|
+
resolution: zod__rspack_import_2.z.string().optional().default("D"),
|
|
402
|
+
from: zod__rspack_import_2.z.number().int().optional(),
|
|
403
|
+
to: zod__rspack_import_2.z.number().int().optional(),
|
|
404
|
+
lookbackDays: zod__rspack_import_2.z.number().int().positive().optional()
|
|
405
|
+
})
|
|
406
|
+
}, async ({ symbol, resolution, from, to, lookbackDays })=>{
|
|
407
|
+
const range = (0, _finance_candleRange_js__rspack_import_5.resolveCandleRange)({
|
|
408
|
+
from,
|
|
409
|
+
to,
|
|
410
|
+
lookbackDays,
|
|
411
|
+
resolution,
|
|
412
|
+
maxIntradayDays,
|
|
413
|
+
maxDailyDays
|
|
414
|
+
});
|
|
415
|
+
const { data, source } = await fetchCandlesWithFallback({
|
|
416
|
+
symbol,
|
|
417
|
+
resolution,
|
|
418
|
+
from: range.from,
|
|
419
|
+
to: range.to
|
|
420
|
+
});
|
|
421
|
+
if (!data || "ok" !== data.s || !Array.isArray(data.c)) return toResult({
|
|
422
|
+
symbol,
|
|
423
|
+
source,
|
|
424
|
+
status: data?.s ?? "no_data",
|
|
425
|
+
error: data.error,
|
|
426
|
+
from: range.from,
|
|
427
|
+
to: range.to
|
|
428
|
+
});
|
|
429
|
+
const snapshot = (0, _finance_technicalIndicators_js__rspack_import_3.buildTechnicalSnapshot)({
|
|
430
|
+
closes: data.c,
|
|
431
|
+
highs: data.h ?? [],
|
|
432
|
+
lows: data.l ?? []
|
|
433
|
+
});
|
|
434
|
+
return toResult({
|
|
435
|
+
symbol,
|
|
436
|
+
resolution: resolution || "D",
|
|
437
|
+
from: range.from,
|
|
438
|
+
to: range.to,
|
|
439
|
+
source,
|
|
440
|
+
status: data.s,
|
|
441
|
+
points: data.c.length,
|
|
442
|
+
lastTimestamp: data.t?.at(-1) ?? null,
|
|
443
|
+
...snapshot
|
|
444
|
+
});
|
|
445
|
+
});
|
|
446
|
+
server.registerTool("finnhub.optionChain", {
|
|
447
|
+
title: "Finnhub Option Chain",
|
|
448
|
+
description: "Get option chain data for a symbol (date optional).",
|
|
449
|
+
inputSchema: zod__rspack_import_2.z.object({
|
|
450
|
+
symbol: zod__rspack_import_2.z.string().min(1),
|
|
451
|
+
date: zod__rspack_import_2.z.string().optional()
|
|
452
|
+
})
|
|
453
|
+
}, async ({ symbol, date })=>{
|
|
454
|
+
const data = await fetchFinnhub("/stock/option-chain", {
|
|
455
|
+
symbol,
|
|
456
|
+
...date ? {
|
|
457
|
+
date
|
|
458
|
+
} : {}
|
|
459
|
+
});
|
|
460
|
+
return toResult(data);
|
|
461
|
+
});
|
|
462
|
+
server.registerTool("options.analyze", {
|
|
463
|
+
title: "Options Structure Analyzer",
|
|
464
|
+
description: "Compute payoff metrics and optional Greeks for an options structure using supplied leg prices.",
|
|
465
|
+
inputSchema: zod__rspack_import_2.z.object({
|
|
466
|
+
underlyingPrice: zod__rspack_import_2.z.number().positive(),
|
|
467
|
+
daysToExpiry: zod__rspack_import_2.z.number().positive().optional(),
|
|
468
|
+
riskFreeRate: zod__rspack_import_2.z.number().optional().default(0),
|
|
469
|
+
dividendYield: zod__rspack_import_2.z.number().optional().default(0),
|
|
470
|
+
legs: zod__rspack_import_2.z.array(zod__rspack_import_2.z.object({
|
|
471
|
+
type: zod__rspack_import_2.z["enum"]([
|
|
472
|
+
"call",
|
|
473
|
+
"put"
|
|
474
|
+
]),
|
|
475
|
+
side: zod__rspack_import_2.z["enum"]([
|
|
476
|
+
"buy",
|
|
477
|
+
"sell"
|
|
478
|
+
]),
|
|
479
|
+
strike: zod__rspack_import_2.z.number().positive(),
|
|
480
|
+
premium: zod__rspack_import_2.z.number().nonnegative(),
|
|
481
|
+
qty: zod__rspack_import_2.z.number().int().positive().optional(),
|
|
482
|
+
contractMultiplier: zod__rspack_import_2.z.number().positive().optional(),
|
|
483
|
+
impliedVol: zod__rspack_import_2.z.number().positive().optional()
|
|
484
|
+
})).min(1)
|
|
485
|
+
})
|
|
486
|
+
}, async (input)=>{
|
|
487
|
+
const data = (0, _finance_optionsAnalytics_js__rspack_import_4.analyzeOptionStructure)(input);
|
|
488
|
+
return toResult(data);
|
|
489
|
+
});
|
|
490
|
+
const transport = new _modelcontextprotocol_sdk_server_stdio_js__rspack_import_1.StdioServerTransport();
|
|
491
|
+
await server.connect(transport);
|
|
492
|
+
console.error(`wingman-mcp-finance ready | Finnhub rate limit: ${rateLimitPerMin}/min | base: ${FINNHUB_BASE_URL} | candle caps: ${candleCapSummary} | candle source: ${candleProvider} | sessions: ${candleSessionSummary}`);
|
|
493
|
+
__rspack_async_done();
|
|
494
|
+
} catch (e) {
|
|
495
|
+
__rspack_async_done(e);
|
|
496
|
+
}
|
|
497
|
+
}, 1);
|
|
498
|
+
},
|
|
499
|
+
"./finance/candleRange.js" (module) {
|
|
500
|
+
module.exports = __rspack_external__finance_candleRange_js_37dcd2cb;
|
|
501
|
+
},
|
|
502
|
+
"./finance/optionsAnalytics.js" (module) {
|
|
503
|
+
module.exports = __rspack_external__finance_optionsAnalytics_js_b4458756;
|
|
504
|
+
},
|
|
505
|
+
"./finance/technicalIndicators.js" (module) {
|
|
506
|
+
module.exports = __rspack_external__finance_technicalIndicators_js_d909860a;
|
|
507
|
+
},
|
|
508
|
+
"./finance/yahooCandles.js" (module) {
|
|
509
|
+
module.exports = __rspack_external__finance_yahooCandles_js_99c2b945;
|
|
510
|
+
},
|
|
511
|
+
"@modelcontextprotocol/sdk/server/mcp.js" (module) {
|
|
512
|
+
module.exports = __rspack_external__modelcontextprotocol_sdk_server_mcp_js_2c42c5d0;
|
|
513
|
+
},
|
|
514
|
+
"@modelcontextprotocol/sdk/server/stdio.js" (module) {
|
|
515
|
+
module.exports = __rspack_external__modelcontextprotocol_sdk_server_stdio_js_4f861174;
|
|
516
|
+
},
|
|
517
|
+
zod (module) {
|
|
518
|
+
module.exports = __rspack_external_zod;
|
|
519
|
+
}
|
|
520
|
+
};
|
|
521
|
+
var __webpack_module_cache__ = {};
|
|
522
|
+
function __webpack_require__(moduleId) {
|
|
523
|
+
var cachedModule = __webpack_module_cache__[moduleId];
|
|
524
|
+
if (void 0 !== cachedModule) return cachedModule.exports;
|
|
525
|
+
var module = __webpack_module_cache__[moduleId] = {
|
|
526
|
+
exports: {}
|
|
527
|
+
};
|
|
528
|
+
__webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
529
|
+
return module.exports;
|
|
530
|
+
}
|
|
531
|
+
(()=>{
|
|
532
|
+
var hasSymbol = "function" == typeof Symbol;
|
|
533
|
+
var rspackQueues = hasSymbol ? Symbol("rspack queues") : "__rspack_queues";
|
|
534
|
+
var rspackExports = __webpack_require__.aE = hasSymbol ? Symbol("rspack exports") : "__webpack_exports__";
|
|
535
|
+
var rspackError = hasSymbol ? Symbol("rspack error") : "__rspack_error";
|
|
536
|
+
var rspackDone = hasSymbol ? Symbol("rspack done") : "__rspack_done";
|
|
537
|
+
var rspackDefer = __webpack_require__.zS = hasSymbol ? Symbol("rspack defer") : "__rspack_defer";
|
|
538
|
+
var resolveQueue = (queue)=>{
|
|
539
|
+
if (queue && queue.d < 1) {
|
|
540
|
+
queue.d = 1;
|
|
541
|
+
queue.forEach((fn)=>fn.r--);
|
|
542
|
+
queue.forEach((fn)=>fn.r-- ? fn.r++ : fn());
|
|
543
|
+
}
|
|
544
|
+
};
|
|
545
|
+
var wrapDeps = (deps)=>deps.map((dep)=>{
|
|
546
|
+
if (null !== dep && "object" == typeof dep) {
|
|
547
|
+
if (!dep[rspackQueues] && dep[rspackDefer]) {
|
|
548
|
+
var asyncDeps = dep[rspackDefer];
|
|
549
|
+
var hasUnresolvedAsyncSubgraph = asyncDeps.some((id)=>{
|
|
550
|
+
var cache = __webpack_module_cache__[id];
|
|
551
|
+
return !cache || false === cache[rspackDone];
|
|
552
|
+
});
|
|
553
|
+
if (!hasUnresolvedAsyncSubgraph) return dep;
|
|
554
|
+
var d = dep;
|
|
555
|
+
dep = {
|
|
556
|
+
then (callback) {
|
|
557
|
+
Promise.all(asyncDeps.map(__webpack_require__)).then(()=>callback(d));
|
|
558
|
+
}
|
|
559
|
+
};
|
|
560
|
+
}
|
|
561
|
+
if (dep[rspackQueues]) return dep;
|
|
562
|
+
if (dep.then) {
|
|
563
|
+
var queue = [];
|
|
564
|
+
queue.d = 0;
|
|
565
|
+
dep.then((r)=>{
|
|
566
|
+
obj[rspackExports] = r;
|
|
567
|
+
resolveQueue(queue);
|
|
568
|
+
}, (e)=>{
|
|
569
|
+
obj[rspackError] = e;
|
|
570
|
+
resolveQueue(queue);
|
|
571
|
+
});
|
|
572
|
+
var obj = {};
|
|
573
|
+
obj[rspackDefer] = false;
|
|
574
|
+
obj[rspackQueues] = (fn)=>fn(queue);
|
|
575
|
+
return obj;
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
var ret = {};
|
|
579
|
+
ret[rspackQueues] = ()=>{};
|
|
580
|
+
ret[rspackExports] = dep;
|
|
581
|
+
return ret;
|
|
582
|
+
});
|
|
583
|
+
__webpack_require__.a = (module, body, hasAwait)=>{
|
|
584
|
+
var queue;
|
|
585
|
+
hasAwait && ((queue = []).d = -1);
|
|
586
|
+
var depQueues = new Set();
|
|
587
|
+
var exports = module.exports;
|
|
588
|
+
var currentDeps;
|
|
589
|
+
var outerResolve;
|
|
590
|
+
var reject;
|
|
591
|
+
var promise = new Promise((resolve, rej)=>{
|
|
592
|
+
reject = rej;
|
|
593
|
+
outerResolve = resolve;
|
|
594
|
+
});
|
|
595
|
+
promise[rspackExports] = exports;
|
|
596
|
+
promise[rspackQueues] = (fn)=>{
|
|
597
|
+
queue && fn(queue), depQueues.forEach(fn), promise["catch"](()=>{});
|
|
598
|
+
};
|
|
599
|
+
module.exports = promise;
|
|
600
|
+
var handle = (deps)=>{
|
|
601
|
+
currentDeps = wrapDeps(deps);
|
|
602
|
+
var fn;
|
|
603
|
+
var getResult = ()=>currentDeps.map((d)=>{
|
|
604
|
+
if (d[rspackDefer]) return d;
|
|
605
|
+
if (d[rspackError]) throw d[rspackError];
|
|
606
|
+
return d[rspackExports];
|
|
607
|
+
});
|
|
608
|
+
var promise = new Promise((resolve)=>{
|
|
609
|
+
fn = ()=>resolve(getResult);
|
|
610
|
+
fn.r = 0;
|
|
611
|
+
var fnQueue = (q)=>q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn)));
|
|
612
|
+
currentDeps.map((dep)=>dep[rspackDefer] || dep[rspackQueues](fnQueue));
|
|
613
|
+
});
|
|
614
|
+
return fn.r ? promise : getResult();
|
|
615
|
+
};
|
|
616
|
+
var done = (err)=>(err ? reject(promise[rspackError] = err) : outerResolve(exports), resolveQueue(queue), promise[rspackDone] = true);
|
|
617
|
+
body(handle, done);
|
|
618
|
+
queue && queue.d < 0 && (queue.d = 0);
|
|
619
|
+
};
|
|
620
|
+
})();
|
|
621
|
+
(()=>{
|
|
622
|
+
__webpack_require__.r = (exports)=>{
|
|
623
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports, Symbol.toStringTag, {
|
|
624
|
+
value: 'Module'
|
|
625
|
+
});
|
|
626
|
+
Object.defineProperty(exports, '__esModule', {
|
|
627
|
+
value: true
|
|
628
|
+
});
|
|
629
|
+
};
|
|
630
|
+
})();
|
|
631
|
+
__webpack_require__("./src/tools/mcp-finance.ts");
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.r = (exports1)=>{
|
|
5
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
6
|
+
value: 'Module'
|
|
7
|
+
});
|
|
8
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
9
|
+
value: true
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
})();
|
|
13
|
+
var __webpack_exports__ = {};
|
|
14
|
+
__webpack_require__.r(__webpack_exports__);
|
|
15
|
+
for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
16
|
+
Object.defineProperty(exports, '__esModule', {
|
|
17
|
+
value: true
|
|
18
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { createDeepAgent } from "deepagents";
|
|
2
|
+
import type { HooksConfig } from "./hooks.js";
|
|
3
|
+
import type { MCPServersConfig } from "./mcp.js";
|
|
4
|
+
import type { AgentVoiceConfig } from "./voice.js";
|
|
5
|
+
export type WingmanAgent = Pick<NonNullable<Parameters<typeof createDeepAgent>[0]>, "name" | "systemPrompt" | "tools" | "skills" | "model" | "subagents"> & {
|
|
6
|
+
description?: string;
|
|
7
|
+
toolHooks?: HooksConfig;
|
|
8
|
+
mcpConfig?: MCPServersConfig;
|
|
9
|
+
mcpUseGlobal?: boolean;
|
|
10
|
+
voice?: AgentVoiceConfig;
|
|
11
|
+
};
|
|
File without changes
|