@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,41 @@
|
|
|
1
|
+
import type { StructuredTool } from "@langchain/core/tools";
|
|
2
|
+
import type { MCPServersConfig } from "@/types/mcp.js";
|
|
3
|
+
import type { Logger } from "@/logger.js";
|
|
4
|
+
/**
|
|
5
|
+
* Manages MCP server connections and tool retrieval
|
|
6
|
+
* Handles server lifecycle: initialization, tool loading, and cleanup
|
|
7
|
+
*/
|
|
8
|
+
export declare class MCPClientManager {
|
|
9
|
+
private client;
|
|
10
|
+
private logger;
|
|
11
|
+
private serverConfigs;
|
|
12
|
+
constructor(configs: MCPServersConfig[], logger: Logger);
|
|
13
|
+
/**
|
|
14
|
+
* Merge multiple MCP configurations (global + agent-specific)
|
|
15
|
+
* Agent-specific servers override global ones with same name
|
|
16
|
+
*/
|
|
17
|
+
private mergeConfigs;
|
|
18
|
+
/**
|
|
19
|
+
* Convert Wingman MCP config to MultiServerMCPClient format
|
|
20
|
+
*/
|
|
21
|
+
private buildClientConfig;
|
|
22
|
+
/**
|
|
23
|
+
* Initialize MCP client and connect to servers
|
|
24
|
+
*/
|
|
25
|
+
initialize(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Retrieve all tools from connected MCP servers
|
|
28
|
+
* Returns LangChain StructuredTools ready for agent use
|
|
29
|
+
*/
|
|
30
|
+
getTools(): Promise<StructuredTool[]>;
|
|
31
|
+
private sanitizeToolNames;
|
|
32
|
+
/**
|
|
33
|
+
* Cleanup MCP client resources
|
|
34
|
+
* Call when agent completes or on error
|
|
35
|
+
*/
|
|
36
|
+
cleanup(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Check if any MCP servers are configured
|
|
39
|
+
*/
|
|
40
|
+
hasServers(): boolean;
|
|
41
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { MultiServerMCPClient } from "@langchain/mcp-adapters";
|
|
2
|
+
import { tool as tools_tool } from "@langchain/core/tools";
|
|
3
|
+
function _define_property(obj, key, value) {
|
|
4
|
+
if (key in obj) Object.defineProperty(obj, key, {
|
|
5
|
+
value: value,
|
|
6
|
+
enumerable: true,
|
|
7
|
+
configurable: true,
|
|
8
|
+
writable: true
|
|
9
|
+
});
|
|
10
|
+
else obj[key] = value;
|
|
11
|
+
return obj;
|
|
12
|
+
}
|
|
13
|
+
class MCPClientManager {
|
|
14
|
+
mergeConfigs(configs) {
|
|
15
|
+
const serverMap = new Map();
|
|
16
|
+
for (const config of configs)if (config.servers) for (const server of config.servers)serverMap.set(server.name, server);
|
|
17
|
+
return Array.from(serverMap.values());
|
|
18
|
+
}
|
|
19
|
+
buildClientConfig() {
|
|
20
|
+
const clientConfig = {};
|
|
21
|
+
for (const server of this.serverConfigs)if ("stdio" === server.transport) {
|
|
22
|
+
const stdioServer = server;
|
|
23
|
+
const resolvedEnv = {};
|
|
24
|
+
for (const [key, value] of Object.entries(stdioServer.env || {}))resolvedEnv[key] = resolveEnvValue(value);
|
|
25
|
+
clientConfig[server.name] = {
|
|
26
|
+
transport: "stdio",
|
|
27
|
+
command: stdioServer.command,
|
|
28
|
+
args: stdioServer.args || [],
|
|
29
|
+
env: resolvedEnv
|
|
30
|
+
};
|
|
31
|
+
} else if ("sse" === server.transport) {
|
|
32
|
+
const sseServer = server;
|
|
33
|
+
clientConfig[server.name] = {
|
|
34
|
+
transport: "sse",
|
|
35
|
+
url: sseServer.url,
|
|
36
|
+
headers: sseServer.headers || {}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return clientConfig;
|
|
40
|
+
}
|
|
41
|
+
async initialize() {
|
|
42
|
+
if (0 === this.serverConfigs.length) return void this.logger.debug("No MCP servers configured");
|
|
43
|
+
try {
|
|
44
|
+
const clientConfig = this.buildClientConfig();
|
|
45
|
+
this.logger.info(`Initializing MCP client with ${this.serverConfigs.length} server(s)`);
|
|
46
|
+
this.client = new MultiServerMCPClient(clientConfig);
|
|
47
|
+
this.logger.info("MCP client initialized successfully");
|
|
48
|
+
} catch (error) {
|
|
49
|
+
this.logger.error(`Failed to initialize MCP client: ${error instanceof Error ? error.message : String(error)}`);
|
|
50
|
+
throw new Error(`MCP client initialization failed: ${error}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async getTools() {
|
|
54
|
+
if (!this.client) {
|
|
55
|
+
this.logger.debug("No MCP client initialized, returning empty tools array");
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
this.logger.debug("Retrieving tools from MCP servers");
|
|
60
|
+
const tools = await this.client.getTools();
|
|
61
|
+
const sanitized = this.sanitizeToolNames(tools);
|
|
62
|
+
this.logger.info(`Retrieved ${sanitized.length} tool(s) from MCP servers`);
|
|
63
|
+
return sanitized;
|
|
64
|
+
} catch (error) {
|
|
65
|
+
this.logger.error(`Failed to retrieve MCP tools: ${error instanceof Error ? error.message : String(error)}`);
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
sanitizeToolNames(tools) {
|
|
70
|
+
const used = new Map();
|
|
71
|
+
const sanitize = (name)=>{
|
|
72
|
+
const base = name.replace(/[^a-zA-Z0-9_-]/g, "_").slice(0, 128);
|
|
73
|
+
return base.length > 0 ? base : "tool";
|
|
74
|
+
};
|
|
75
|
+
const uniqueName = (name)=>{
|
|
76
|
+
let candidate = sanitize(name);
|
|
77
|
+
let counter = used.get(candidate) || 0;
|
|
78
|
+
while(used.has(candidate)){
|
|
79
|
+
counter += 1;
|
|
80
|
+
const suffix = `_${counter}`;
|
|
81
|
+
candidate = `${sanitize(name).slice(0, 128 - suffix.length)}${suffix}`;
|
|
82
|
+
}
|
|
83
|
+
used.set(candidate, counter);
|
|
84
|
+
return candidate;
|
|
85
|
+
};
|
|
86
|
+
return tools.map((tool)=>{
|
|
87
|
+
const original = tool.name;
|
|
88
|
+
const sanitized = uniqueName(original);
|
|
89
|
+
if (sanitized === original) return tool;
|
|
90
|
+
const originalLabel = `Original tool name: ${original}`;
|
|
91
|
+
const description = tool.description ? `${tool.description}\n\n${originalLabel}` : originalLabel;
|
|
92
|
+
const schema = tool.schema ?? tool.inputSchema;
|
|
93
|
+
if (!schema) try {
|
|
94
|
+
tool.name = sanitized;
|
|
95
|
+
tool.description = description;
|
|
96
|
+
return tool;
|
|
97
|
+
} catch {
|
|
98
|
+
return tool;
|
|
99
|
+
}
|
|
100
|
+
return tools_tool(async (input)=>tool.invoke(input), {
|
|
101
|
+
name: sanitized,
|
|
102
|
+
description,
|
|
103
|
+
schema
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
async cleanup() {
|
|
108
|
+
if (!this.client) return;
|
|
109
|
+
try {
|
|
110
|
+
this.logger.debug("Cleaning up MCP client");
|
|
111
|
+
this.client = null;
|
|
112
|
+
this.logger.debug("MCP client cleanup complete");
|
|
113
|
+
} catch (error) {
|
|
114
|
+
this.logger.warn(`Error during MCP cleanup: ${error instanceof Error ? error.message : String(error)}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
hasServers() {
|
|
118
|
+
return this.serverConfigs.length > 0;
|
|
119
|
+
}
|
|
120
|
+
constructor(configs, logger){
|
|
121
|
+
_define_property(this, "client", null);
|
|
122
|
+
_define_property(this, "logger", void 0);
|
|
123
|
+
_define_property(this, "serverConfigs", void 0);
|
|
124
|
+
this.logger = logger;
|
|
125
|
+
this.serverConfigs = this.mergeConfigs(configs);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function resolveEnvValue(value) {
|
|
129
|
+
const match = value.match(/^\$\{([A-Z0-9_]+)\}$/);
|
|
130
|
+
if (!match) return value;
|
|
131
|
+
const envValue = process.env[match[1]];
|
|
132
|
+
return envValue ?? "";
|
|
133
|
+
}
|
|
134
|
+
export { MCPClientManager };
|
|
@@ -0,0 +1,175 @@
|
|
|
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
|
+
ModelFactory: ()=>ModelFactory
|
|
28
|
+
});
|
|
29
|
+
const anthropic_namespaceObject = require("@langchain/anthropic");
|
|
30
|
+
const openai_namespaceObject = require("@langchain/openai");
|
|
31
|
+
const xai_namespaceObject = require("@langchain/xai");
|
|
32
|
+
const external_logger_cjs_namespaceObject = require("../../logger.cjs");
|
|
33
|
+
const credentials_cjs_namespaceObject = require("../../providers/credentials.cjs");
|
|
34
|
+
const copilot_cjs_namespaceObject = require("../../providers/copilot.cjs");
|
|
35
|
+
const registry_cjs_namespaceObject = require("../../providers/registry.cjs");
|
|
36
|
+
const logger = (0, external_logger_cjs_namespaceObject.createLogger)();
|
|
37
|
+
class ModelFactory {
|
|
38
|
+
static createModel(modelString) {
|
|
39
|
+
const parts = modelString.split(":");
|
|
40
|
+
if (2 !== parts.length) throw new Error(`Invalid model format: "${modelString}". Expected format: "provider:model-name"`);
|
|
41
|
+
const [provider, model] = parts;
|
|
42
|
+
if (!provider || !model) throw new Error(`Invalid model format: "${modelString}". Both provider and model name are required.`);
|
|
43
|
+
const normalizedProvider = (0, registry_cjs_namespaceObject.normalizeProviderName)(provider);
|
|
44
|
+
const providerSpec = normalizedProvider ? (0, registry_cjs_namespaceObject.getProviderSpec)(normalizedProvider) : void 0;
|
|
45
|
+
if (!providerSpec || "model" !== providerSpec.category) {
|
|
46
|
+
const supported = (0, registry_cjs_namespaceObject.listProviderSpecs)("model").map((item)=>item.name).join(", ");
|
|
47
|
+
throw new Error(`Unknown model provider: "${provider}". Supported providers: ${supported}`);
|
|
48
|
+
}
|
|
49
|
+
logger.debug(`Creating model: ${normalizedProvider}:${model}`);
|
|
50
|
+
switch(providerSpec.name){
|
|
51
|
+
case "anthropic":
|
|
52
|
+
return ModelFactory.createAnthropicModel(model);
|
|
53
|
+
case "openai":
|
|
54
|
+
return ModelFactory.createOpenAIModel(model);
|
|
55
|
+
case "openrouter":
|
|
56
|
+
return ModelFactory.createOpenRouterModel(model);
|
|
57
|
+
case "copilot":
|
|
58
|
+
return ModelFactory.createCopilotModel(model);
|
|
59
|
+
case "xai":
|
|
60
|
+
return ModelFactory.createXAIModel(model);
|
|
61
|
+
case "lmstudio":
|
|
62
|
+
return ModelFactory.createLMStudioModel(model);
|
|
63
|
+
case "ollama":
|
|
64
|
+
return ModelFactory.createOllamaModel(model);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
static validateModelString(modelString) {
|
|
68
|
+
const parts = modelString.split(":");
|
|
69
|
+
if (2 !== parts.length) return {
|
|
70
|
+
valid: false,
|
|
71
|
+
error: `Invalid format: "${modelString}". Expected format: "provider:model-name"`
|
|
72
|
+
};
|
|
73
|
+
const [provider, model] = parts;
|
|
74
|
+
if (!provider || !model) return {
|
|
75
|
+
valid: false,
|
|
76
|
+
error: "Both provider and model name are required"
|
|
77
|
+
};
|
|
78
|
+
const normalizedProvider = (0, registry_cjs_namespaceObject.normalizeProviderName)(provider);
|
|
79
|
+
const providerSpec = normalizedProvider ? (0, registry_cjs_namespaceObject.getProviderSpec)(normalizedProvider) : void 0;
|
|
80
|
+
if (!providerSpec || "model" !== providerSpec.category) {
|
|
81
|
+
const supported = (0, registry_cjs_namespaceObject.listProviderSpecs)("model").map((item)=>item.name).join(", ");
|
|
82
|
+
return {
|
|
83
|
+
valid: false,
|
|
84
|
+
error: `Unknown provider: "${provider}". Supported: ${supported}`
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
valid: true
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
static createAnthropicModel(model) {
|
|
92
|
+
const token = (0, credentials_cjs_namespaceObject.resolveProviderToken)("anthropic").token;
|
|
93
|
+
const params = {
|
|
94
|
+
model,
|
|
95
|
+
temperature: 1
|
|
96
|
+
};
|
|
97
|
+
if (token) params.apiKey = token;
|
|
98
|
+
return new anthropic_namespaceObject.ChatAnthropic(params);
|
|
99
|
+
}
|
|
100
|
+
static createOpenAIModel(model) {
|
|
101
|
+
const token = (0, credentials_cjs_namespaceObject.resolveProviderToken)("openai").token;
|
|
102
|
+
const params = {
|
|
103
|
+
model,
|
|
104
|
+
temperature: 1
|
|
105
|
+
};
|
|
106
|
+
if (token) params.apiKey = token;
|
|
107
|
+
return new openai_namespaceObject.ChatOpenAI(params);
|
|
108
|
+
}
|
|
109
|
+
static createOpenRouterModel(model) {
|
|
110
|
+
const token = (0, credentials_cjs_namespaceObject.resolveProviderToken)("openrouter").token ?? "";
|
|
111
|
+
const provider = (0, registry_cjs_namespaceObject.getProviderSpec)("openrouter");
|
|
112
|
+
return new openai_namespaceObject.ChatOpenAI({
|
|
113
|
+
model,
|
|
114
|
+
temperature: 1,
|
|
115
|
+
apiKey: token,
|
|
116
|
+
configuration: {
|
|
117
|
+
baseURL: provider?.baseURL
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
static createCopilotModel(model) {
|
|
122
|
+
const provider = (0, registry_cjs_namespaceObject.getProviderSpec)("copilot");
|
|
123
|
+
return new openai_namespaceObject.ChatOpenAI({
|
|
124
|
+
model,
|
|
125
|
+
temperature: 1,
|
|
126
|
+
apiKey: "copilot",
|
|
127
|
+
configuration: {
|
|
128
|
+
baseURL: provider?.baseURL,
|
|
129
|
+
fetch: (0, copilot_cjs_namespaceObject.createCopilotFetch)()
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
static createXAIModel(model) {
|
|
134
|
+
const token = (0, credentials_cjs_namespaceObject.resolveProviderToken)("xai").token;
|
|
135
|
+
const params = {
|
|
136
|
+
model,
|
|
137
|
+
temperature: 1
|
|
138
|
+
};
|
|
139
|
+
if (token) params.apiKey = token;
|
|
140
|
+
return new xai_namespaceObject.ChatXAI(params);
|
|
141
|
+
}
|
|
142
|
+
static createLMStudioModel(model) {
|
|
143
|
+
const tokenResult = (0, credentials_cjs_namespaceObject.resolveProviderToken)("lmstudio");
|
|
144
|
+
const provider = (0, registry_cjs_namespaceObject.getProviderSpec)("lmstudio");
|
|
145
|
+
const apiKey = tokenResult.token ?? "lm-studio";
|
|
146
|
+
return new openai_namespaceObject.ChatOpenAI({
|
|
147
|
+
model,
|
|
148
|
+
temperature: 1,
|
|
149
|
+
apiKey: apiKey,
|
|
150
|
+
configuration: {
|
|
151
|
+
baseURL: provider?.baseURL
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
static createOllamaModel(model) {
|
|
156
|
+
const tokenResult = (0, credentials_cjs_namespaceObject.resolveProviderToken)("ollama");
|
|
157
|
+
const provider = (0, registry_cjs_namespaceObject.getProviderSpec)("ollama");
|
|
158
|
+
const apiKey = tokenResult.token ?? "ollama";
|
|
159
|
+
return new openai_namespaceObject.ChatOpenAI({
|
|
160
|
+
model,
|
|
161
|
+
temperature: 1,
|
|
162
|
+
apiKey: apiKey,
|
|
163
|
+
configuration: {
|
|
164
|
+
baseURL: provider?.baseURL
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
exports.ModelFactory = __webpack_exports__.ModelFactory;
|
|
170
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
171
|
+
"ModelFactory"
|
|
172
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
173
|
+
Object.defineProperty(exports, '__esModule', {
|
|
174
|
+
value: true
|
|
175
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { BaseLanguageModel, BaseLanguageModelCallOptions } from "@langchain/core/language_models/base";
|
|
2
|
+
/**
|
|
3
|
+
* Create a LangChain model from a model string
|
|
4
|
+
*
|
|
5
|
+
* Format: "provider:model-name"
|
|
6
|
+
* Examples:
|
|
7
|
+
* - "anthropic:claude-opus-4-5"
|
|
8
|
+
* - "anthropic:claude-sonnet-4-5"
|
|
9
|
+
* - "openai:gpt-4o"
|
|
10
|
+
* - "openai:gpt-4-turbo"
|
|
11
|
+
* - "openrouter:openai/gpt-4o"
|
|
12
|
+
* - "copilot:gpt-4o"
|
|
13
|
+
*/
|
|
14
|
+
export declare class ModelFactory {
|
|
15
|
+
/**
|
|
16
|
+
* Parse and create a model from a string specification
|
|
17
|
+
*/
|
|
18
|
+
static createModel(modelString: string): string | BaseLanguageModel<any, BaseLanguageModelCallOptions> | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Validate model string format without creating the model
|
|
21
|
+
*/
|
|
22
|
+
static validateModelString(modelString: string): {
|
|
23
|
+
valid: boolean;
|
|
24
|
+
error?: string;
|
|
25
|
+
};
|
|
26
|
+
private static createAnthropicModel;
|
|
27
|
+
private static createOpenAIModel;
|
|
28
|
+
private static createOpenRouterModel;
|
|
29
|
+
private static createCopilotModel;
|
|
30
|
+
private static createXAIModel;
|
|
31
|
+
private static createLMStudioModel;
|
|
32
|
+
private static createOllamaModel;
|
|
33
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { ChatAnthropic } from "@langchain/anthropic";
|
|
2
|
+
import { ChatOpenAI } from "@langchain/openai";
|
|
3
|
+
import { ChatXAI } from "@langchain/xai";
|
|
4
|
+
import { createLogger } from "../../logger.js";
|
|
5
|
+
import { resolveProviderToken } from "../../providers/credentials.js";
|
|
6
|
+
import { createCopilotFetch } from "../../providers/copilot.js";
|
|
7
|
+
import { getProviderSpec, listProviderSpecs, normalizeProviderName } from "../../providers/registry.js";
|
|
8
|
+
const logger = createLogger();
|
|
9
|
+
class ModelFactory {
|
|
10
|
+
static createModel(modelString) {
|
|
11
|
+
const parts = modelString.split(":");
|
|
12
|
+
if (2 !== parts.length) throw new Error(`Invalid model format: "${modelString}". Expected format: "provider:model-name"`);
|
|
13
|
+
const [provider, model] = parts;
|
|
14
|
+
if (!provider || !model) throw new Error(`Invalid model format: "${modelString}". Both provider and model name are required.`);
|
|
15
|
+
const normalizedProvider = normalizeProviderName(provider);
|
|
16
|
+
const providerSpec = normalizedProvider ? getProviderSpec(normalizedProvider) : void 0;
|
|
17
|
+
if (!providerSpec || "model" !== providerSpec.category) {
|
|
18
|
+
const supported = listProviderSpecs("model").map((item)=>item.name).join(", ");
|
|
19
|
+
throw new Error(`Unknown model provider: "${provider}". Supported providers: ${supported}`);
|
|
20
|
+
}
|
|
21
|
+
logger.debug(`Creating model: ${normalizedProvider}:${model}`);
|
|
22
|
+
switch(providerSpec.name){
|
|
23
|
+
case "anthropic":
|
|
24
|
+
return ModelFactory.createAnthropicModel(model);
|
|
25
|
+
case "openai":
|
|
26
|
+
return ModelFactory.createOpenAIModel(model);
|
|
27
|
+
case "openrouter":
|
|
28
|
+
return ModelFactory.createOpenRouterModel(model);
|
|
29
|
+
case "copilot":
|
|
30
|
+
return ModelFactory.createCopilotModel(model);
|
|
31
|
+
case "xai":
|
|
32
|
+
return ModelFactory.createXAIModel(model);
|
|
33
|
+
case "lmstudio":
|
|
34
|
+
return ModelFactory.createLMStudioModel(model);
|
|
35
|
+
case "ollama":
|
|
36
|
+
return ModelFactory.createOllamaModel(model);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
static validateModelString(modelString) {
|
|
40
|
+
const parts = modelString.split(":");
|
|
41
|
+
if (2 !== parts.length) return {
|
|
42
|
+
valid: false,
|
|
43
|
+
error: `Invalid format: "${modelString}". Expected format: "provider:model-name"`
|
|
44
|
+
};
|
|
45
|
+
const [provider, model] = parts;
|
|
46
|
+
if (!provider || !model) return {
|
|
47
|
+
valid: false,
|
|
48
|
+
error: "Both provider and model name are required"
|
|
49
|
+
};
|
|
50
|
+
const normalizedProvider = normalizeProviderName(provider);
|
|
51
|
+
const providerSpec = normalizedProvider ? getProviderSpec(normalizedProvider) : void 0;
|
|
52
|
+
if (!providerSpec || "model" !== providerSpec.category) {
|
|
53
|
+
const supported = listProviderSpecs("model").map((item)=>item.name).join(", ");
|
|
54
|
+
return {
|
|
55
|
+
valid: false,
|
|
56
|
+
error: `Unknown provider: "${provider}". Supported: ${supported}`
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
valid: true
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
static createAnthropicModel(model) {
|
|
64
|
+
const token = resolveProviderToken("anthropic").token;
|
|
65
|
+
const params = {
|
|
66
|
+
model,
|
|
67
|
+
temperature: 1
|
|
68
|
+
};
|
|
69
|
+
if (token) params.apiKey = token;
|
|
70
|
+
return new ChatAnthropic(params);
|
|
71
|
+
}
|
|
72
|
+
static createOpenAIModel(model) {
|
|
73
|
+
const token = resolveProviderToken("openai").token;
|
|
74
|
+
const params = {
|
|
75
|
+
model,
|
|
76
|
+
temperature: 1
|
|
77
|
+
};
|
|
78
|
+
if (token) params.apiKey = token;
|
|
79
|
+
return new ChatOpenAI(params);
|
|
80
|
+
}
|
|
81
|
+
static createOpenRouterModel(model) {
|
|
82
|
+
const token = resolveProviderToken("openrouter").token ?? "";
|
|
83
|
+
const provider = getProviderSpec("openrouter");
|
|
84
|
+
return new ChatOpenAI({
|
|
85
|
+
model,
|
|
86
|
+
temperature: 1,
|
|
87
|
+
apiKey: token,
|
|
88
|
+
configuration: {
|
|
89
|
+
baseURL: provider?.baseURL
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
static createCopilotModel(model) {
|
|
94
|
+
const provider = getProviderSpec("copilot");
|
|
95
|
+
return new ChatOpenAI({
|
|
96
|
+
model,
|
|
97
|
+
temperature: 1,
|
|
98
|
+
apiKey: "copilot",
|
|
99
|
+
configuration: {
|
|
100
|
+
baseURL: provider?.baseURL,
|
|
101
|
+
fetch: createCopilotFetch()
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
static createXAIModel(model) {
|
|
106
|
+
const token = resolveProviderToken("xai").token;
|
|
107
|
+
const params = {
|
|
108
|
+
model,
|
|
109
|
+
temperature: 1
|
|
110
|
+
};
|
|
111
|
+
if (token) params.apiKey = token;
|
|
112
|
+
return new ChatXAI(params);
|
|
113
|
+
}
|
|
114
|
+
static createLMStudioModel(model) {
|
|
115
|
+
const tokenResult = resolveProviderToken("lmstudio");
|
|
116
|
+
const provider = getProviderSpec("lmstudio");
|
|
117
|
+
const apiKey = tokenResult.token ?? "lm-studio";
|
|
118
|
+
return new ChatOpenAI({
|
|
119
|
+
model,
|
|
120
|
+
temperature: 1,
|
|
121
|
+
apiKey: apiKey,
|
|
122
|
+
configuration: {
|
|
123
|
+
baseURL: provider?.baseURL
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
static createOllamaModel(model) {
|
|
128
|
+
const tokenResult = resolveProviderToken("ollama");
|
|
129
|
+
const provider = getProviderSpec("ollama");
|
|
130
|
+
const apiKey = tokenResult.token ?? "ollama";
|
|
131
|
+
return new ChatOpenAI({
|
|
132
|
+
model,
|
|
133
|
+
temperature: 1,
|
|
134
|
+
apiKey: apiKey,
|
|
135
|
+
configuration: {
|
|
136
|
+
baseURL: provider?.baseURL
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
export { ModelFactory };
|
|
@@ -0,0 +1,111 @@
|
|
|
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
|
+
createTools: ()=>createTools,
|
|
28
|
+
createTool: ()=>createTool,
|
|
29
|
+
getAvailableTools: ()=>getAvailableTools
|
|
30
|
+
});
|
|
31
|
+
const internet_search_cjs_namespaceObject = require("../tools/internet_search.cjs");
|
|
32
|
+
const web_crawler_cjs_namespaceObject = require("../tools/web_crawler.cjs");
|
|
33
|
+
const command_execute_cjs_namespaceObject = require("../tools/command_execute.cjs");
|
|
34
|
+
const think_cjs_namespaceObject = require("../tools/think.cjs");
|
|
35
|
+
const code_search_cjs_namespaceObject = require("../tools/code_search.cjs");
|
|
36
|
+
const git_status_cjs_namespaceObject = require("../tools/git_status.cjs");
|
|
37
|
+
const external_logger_cjs_namespaceObject = require("../../logger.cjs");
|
|
38
|
+
const external_mcpClientManager_cjs_namespaceObject = require("./mcpClientManager.cjs");
|
|
39
|
+
const logger = (0, external_logger_cjs_namespaceObject.createLogger)();
|
|
40
|
+
function createTool(name, options = {}) {
|
|
41
|
+
const { workspace = process.cwd(), blockedCommands, allowScriptExecution = true, timeout = 300000, searchConfig = {
|
|
42
|
+
provider: "duckduckgo",
|
|
43
|
+
maxResults: 5
|
|
44
|
+
} } = options;
|
|
45
|
+
logger.debug(`Creating tool: ${name}`, {
|
|
46
|
+
workspace,
|
|
47
|
+
blockedCommands,
|
|
48
|
+
allowScriptExecution,
|
|
49
|
+
timeout,
|
|
50
|
+
searchConfig
|
|
51
|
+
});
|
|
52
|
+
switch(name){
|
|
53
|
+
case "internet_search":
|
|
54
|
+
return (0, internet_search_cjs_namespaceObject.createInternetSearchTool)(searchConfig);
|
|
55
|
+
case "web_crawler":
|
|
56
|
+
return web_crawler_cjs_namespaceObject.webCrawler;
|
|
57
|
+
case "command_execute":
|
|
58
|
+
return (0, command_execute_cjs_namespaceObject.createCommandExecuteTool)(workspace, process.env, blockedCommands, allowScriptExecution, timeout);
|
|
59
|
+
case "think":
|
|
60
|
+
return (0, think_cjs_namespaceObject.createThinkingTool)();
|
|
61
|
+
case "code_search":
|
|
62
|
+
return (0, code_search_cjs_namespaceObject.createCodeSearchTool)(workspace);
|
|
63
|
+
case "git_status":
|
|
64
|
+
return (0, git_status_cjs_namespaceObject.createGitStatusTool)(workspace);
|
|
65
|
+
default:
|
|
66
|
+
logger.warn(`Unknown tool name: ${name}`);
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async function createTools(toolNames, options = {}) {
|
|
71
|
+
const tools = [];
|
|
72
|
+
for (const name of toolNames){
|
|
73
|
+
const tool = createTool(name, options);
|
|
74
|
+
if (tool) tools.push(tool);
|
|
75
|
+
else logger.warn(`Skipping unknown tool: ${name}`);
|
|
76
|
+
}
|
|
77
|
+
if (options.mcpConfigs && options.mcpConfigs.length > 0) try {
|
|
78
|
+
const mcpManager = new external_mcpClientManager_cjs_namespaceObject.MCPClientManager(options.mcpConfigs, logger);
|
|
79
|
+
await mcpManager.initialize();
|
|
80
|
+
const mcpTools = await mcpManager.getTools();
|
|
81
|
+
if (mcpTools.length > 0) {
|
|
82
|
+
tools.push(...mcpTools);
|
|
83
|
+
logger.info(`Added ${mcpTools.length} MCP tool(s)`);
|
|
84
|
+
}
|
|
85
|
+
} catch (error) {
|
|
86
|
+
logger.error(`Failed to load MCP tools: ${error instanceof Error ? error.message : String(error)}`);
|
|
87
|
+
}
|
|
88
|
+
logger.info(`Created ${tools.length} total tools: ${toolNames.join(", ")}${options.mcpConfigs?.length ? " + MCP tools" : ""}`);
|
|
89
|
+
return tools;
|
|
90
|
+
}
|
|
91
|
+
function getAvailableTools() {
|
|
92
|
+
return [
|
|
93
|
+
"internet_search",
|
|
94
|
+
"web_crawler",
|
|
95
|
+
"command_execute",
|
|
96
|
+
"think",
|
|
97
|
+
"code_search",
|
|
98
|
+
"git_status"
|
|
99
|
+
];
|
|
100
|
+
}
|
|
101
|
+
exports.createTool = __webpack_exports__.createTool;
|
|
102
|
+
exports.createTools = __webpack_exports__.createTools;
|
|
103
|
+
exports.getAvailableTools = __webpack_exports__.getAvailableTools;
|
|
104
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
105
|
+
"createTool",
|
|
106
|
+
"createTools",
|
|
107
|
+
"getAvailableTools"
|
|
108
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
109
|
+
Object.defineProperty(exports, '__esModule', {
|
|
110
|
+
value: true
|
|
111
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { StructuredTool } from "@langchain/core/tools";
|
|
2
|
+
import type { AvailableToolName } from "./agentConfig.js";
|
|
3
|
+
import type { SearchConfig } from "../../cli/config/schema.js";
|
|
4
|
+
import type { MCPServersConfig } from "@/types/mcp.js";
|
|
5
|
+
export interface ToolOptions {
|
|
6
|
+
workspace?: string;
|
|
7
|
+
blockedCommands?: string[];
|
|
8
|
+
allowScriptExecution?: boolean;
|
|
9
|
+
timeout?: number;
|
|
10
|
+
searchConfig?: SearchConfig;
|
|
11
|
+
mcpConfigs?: MCPServersConfig[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Create a tool by name with optional configuration
|
|
15
|
+
*/
|
|
16
|
+
export declare function createTool(name: AvailableToolName, options?: ToolOptions): StructuredTool | null;
|
|
17
|
+
/**
|
|
18
|
+
* Create multiple tools from an array of tool names
|
|
19
|
+
* NOW ALSO includes MCP tools if configured
|
|
20
|
+
*/
|
|
21
|
+
export declare function createTools(toolNames: AvailableToolName[], options?: ToolOptions): Promise<StructuredTool[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Get list of all available tool names
|
|
24
|
+
*/
|
|
25
|
+
export declare function getAvailableTools(): AvailableToolName[];
|