@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,601 @@
|
|
|
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
|
+
executeGatewayCommand: ()=>executeGatewayCommand
|
|
28
|
+
});
|
|
29
|
+
const index_cjs_namespaceObject = require("../../gateway/index.cjs");
|
|
30
|
+
const external_fs_namespaceObject = require("fs");
|
|
31
|
+
const external_logger_cjs_namespaceObject = require("../../logger.cjs");
|
|
32
|
+
const loader_cjs_namespaceObject = require("../config/loader.cjs");
|
|
33
|
+
const env_cjs_namespaceObject = require("../../gateway/env.cjs");
|
|
34
|
+
const logger = (0, external_logger_cjs_namespaceObject.createLogger)();
|
|
35
|
+
const logFile = (0, external_logger_cjs_namespaceObject.getLogFilePath)();
|
|
36
|
+
function reportGatewayError(context, error) {
|
|
37
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
38
|
+
logger.error(context, errorMsg);
|
|
39
|
+
console.error(`✗ ${context}: ${errorMsg}`);
|
|
40
|
+
console.error(`Logs: ${logFile}`);
|
|
41
|
+
}
|
|
42
|
+
async function executeGatewayCommand(args) {
|
|
43
|
+
const { subcommand, options } = args;
|
|
44
|
+
switch(subcommand){
|
|
45
|
+
case "start":
|
|
46
|
+
await handleStart(options);
|
|
47
|
+
break;
|
|
48
|
+
case "stop":
|
|
49
|
+
await handleStop();
|
|
50
|
+
break;
|
|
51
|
+
case "restart":
|
|
52
|
+
await handleRestart();
|
|
53
|
+
break;
|
|
54
|
+
case "status":
|
|
55
|
+
await handleStatus();
|
|
56
|
+
break;
|
|
57
|
+
case "run":
|
|
58
|
+
await handleRun(options);
|
|
59
|
+
break;
|
|
60
|
+
case "join":
|
|
61
|
+
await handleJoin(args.args, options);
|
|
62
|
+
break;
|
|
63
|
+
case "discover":
|
|
64
|
+
await handleDiscover(options);
|
|
65
|
+
break;
|
|
66
|
+
case "token":
|
|
67
|
+
await handleToken(options);
|
|
68
|
+
break;
|
|
69
|
+
case "health":
|
|
70
|
+
await handleHealth(options);
|
|
71
|
+
break;
|
|
72
|
+
case "tunnel":
|
|
73
|
+
await handleTunnel(args.args, options);
|
|
74
|
+
break;
|
|
75
|
+
default:
|
|
76
|
+
showGatewayHelp();
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async function handleStart(options) {
|
|
81
|
+
const configLoader = new loader_cjs_namespaceObject.WingmanConfigLoader();
|
|
82
|
+
const wingmanConfig = configLoader.loadConfig();
|
|
83
|
+
const gatewayDefaults = wingmanConfig.gateway;
|
|
84
|
+
const envToken = (0, env_cjs_namespaceObject.getGatewayTokenFromEnv)();
|
|
85
|
+
const authFlag = Boolean(options.auth);
|
|
86
|
+
const authMode = options["auth-mode"] || options.authMode || (authFlag ? "token" : void 0);
|
|
87
|
+
const resolvedToken = "token" === authMode ? options.token || envToken : void 0;
|
|
88
|
+
const auth = authMode ? {
|
|
89
|
+
mode: authMode,
|
|
90
|
+
token: resolvedToken,
|
|
91
|
+
password: options.password
|
|
92
|
+
} : gatewayDefaults.auth;
|
|
93
|
+
const config = {
|
|
94
|
+
port: options.port || gatewayDefaults.port || 18789,
|
|
95
|
+
host: options.host || gatewayDefaults.host || "127.0.0.1",
|
|
96
|
+
requireAuth: auth?.mode !== "none",
|
|
97
|
+
authToken: auth?.token,
|
|
98
|
+
auth,
|
|
99
|
+
maxNodes: options.maxNodes || 1000,
|
|
100
|
+
pingInterval: options.pingInterval || 30000,
|
|
101
|
+
pingTimeout: options.pingTimeout || 60000,
|
|
102
|
+
logLevel: options.logLevel || "info"
|
|
103
|
+
};
|
|
104
|
+
if (options.discovery) config.discovery = {
|
|
105
|
+
enabled: true,
|
|
106
|
+
method: options.discovery,
|
|
107
|
+
name: options.name || `Gateway-${Date.now()}`
|
|
108
|
+
};
|
|
109
|
+
const daemon = new index_cjs_namespaceObject.GatewayDaemon();
|
|
110
|
+
try {
|
|
111
|
+
await daemon.start(config);
|
|
112
|
+
console.log("✓ Gateway started successfully");
|
|
113
|
+
console.log(` URL: ws://${config.host}:${config.port}/ws`);
|
|
114
|
+
console.log(` Health: http://${config.host}:${config.port}/health`);
|
|
115
|
+
const controlUi = wingmanConfig.gateway?.controlUi;
|
|
116
|
+
if (controlUi?.enabled) {
|
|
117
|
+
const uiPort = controlUi.port || 18790;
|
|
118
|
+
console.log(` Control UI: http://${config.host}:${uiPort}/`);
|
|
119
|
+
}
|
|
120
|
+
console.log(` Logs: ${daemon.getLogFile()}`);
|
|
121
|
+
if (config.auth?.mode === "token" && !config.auth.token) {
|
|
122
|
+
console.log("\n⚠ Token auth is enabled but no token was provided.");
|
|
123
|
+
console.log(' Run "wingman gateway token --generate" to create a token.');
|
|
124
|
+
}
|
|
125
|
+
} catch (error) {
|
|
126
|
+
reportGatewayError("Failed to start gateway", error);
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async function handleStop() {
|
|
131
|
+
const daemon = new index_cjs_namespaceObject.GatewayDaemon();
|
|
132
|
+
try {
|
|
133
|
+
await daemon.stop();
|
|
134
|
+
console.log("✓ Gateway stopped successfully");
|
|
135
|
+
} catch (error) {
|
|
136
|
+
reportGatewayError("Failed to stop gateway", error);
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async function handleRestart() {
|
|
141
|
+
const daemon = new index_cjs_namespaceObject.GatewayDaemon();
|
|
142
|
+
try {
|
|
143
|
+
await daemon.restart();
|
|
144
|
+
console.log("✓ Gateway restarted successfully");
|
|
145
|
+
} catch (error) {
|
|
146
|
+
reportGatewayError("Failed to restart gateway", error);
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async function handleStatus() {
|
|
151
|
+
const daemon = new index_cjs_namespaceObject.GatewayDaemon();
|
|
152
|
+
const status = daemon.getStatus();
|
|
153
|
+
if (!status.running) return void console.log("Gateway Status: Not Running");
|
|
154
|
+
console.log("Gateway Status: Running");
|
|
155
|
+
console.log(` PID: ${status.pid}`);
|
|
156
|
+
if (status.uptime) {
|
|
157
|
+
const uptimeSeconds = Math.floor(status.uptime / 1000);
|
|
158
|
+
const hours = Math.floor(uptimeSeconds / 3600);
|
|
159
|
+
const minutes = Math.floor(uptimeSeconds % 3600 / 60);
|
|
160
|
+
const seconds = uptimeSeconds % 60;
|
|
161
|
+
console.log(` Uptime: ${hours}h ${minutes}m ${seconds}s`);
|
|
162
|
+
}
|
|
163
|
+
if (status.config) {
|
|
164
|
+
console.log(` Host: ${status.config.host}`);
|
|
165
|
+
console.log(` Port: ${status.config.port}`);
|
|
166
|
+
const authMode = status.config.auth?.mode || "none";
|
|
167
|
+
console.log(` Auth Mode: ${authMode}`);
|
|
168
|
+
console.log(` Max Nodes: ${status.config.maxNodes}`);
|
|
169
|
+
}
|
|
170
|
+
console.log(` Log File: ${daemon.getLogFile()}`);
|
|
171
|
+
}
|
|
172
|
+
async function handleRun(options) {
|
|
173
|
+
let config;
|
|
174
|
+
if (options.daemon && process.env.WINGMAN_GATEWAY_CONFIG) {
|
|
175
|
+
const configStr = (0, external_fs_namespaceObject.readFileSync)(process.env.WINGMAN_GATEWAY_CONFIG, "utf-8");
|
|
176
|
+
config = JSON.parse(configStr);
|
|
177
|
+
} else {
|
|
178
|
+
const configLoader = new loader_cjs_namespaceObject.WingmanConfigLoader();
|
|
179
|
+
const wingmanConfig = configLoader.loadConfig();
|
|
180
|
+
const gatewayDefaults = wingmanConfig.gateway;
|
|
181
|
+
const envToken = (0, env_cjs_namespaceObject.getGatewayTokenFromEnv)();
|
|
182
|
+
const authFlag = Boolean(options.auth);
|
|
183
|
+
const authMode = options["auth-mode"] || options.authMode || (authFlag ? "token" : void 0);
|
|
184
|
+
const resolvedToken = "token" === authMode ? options.token || envToken : void 0;
|
|
185
|
+
const auth = authMode ? {
|
|
186
|
+
mode: authMode,
|
|
187
|
+
token: resolvedToken,
|
|
188
|
+
password: options.password
|
|
189
|
+
} : gatewayDefaults.auth;
|
|
190
|
+
config = {
|
|
191
|
+
port: options.port || gatewayDefaults.port || 18789,
|
|
192
|
+
host: options.host || gatewayDefaults.host || "127.0.0.1",
|
|
193
|
+
requireAuth: auth?.mode !== "none",
|
|
194
|
+
authToken: auth?.token,
|
|
195
|
+
auth,
|
|
196
|
+
maxNodes: options.maxNodes || 1000,
|
|
197
|
+
pingInterval: options.pingInterval || 30000,
|
|
198
|
+
pingTimeout: options.pingTimeout || 60000,
|
|
199
|
+
logLevel: options.logLevel || "info"
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
const server = new index_cjs_namespaceObject.GatewayServer(config);
|
|
203
|
+
process.on("SIGTERM", async ()=>{
|
|
204
|
+
console.log("Received SIGTERM, shutting down gracefully...");
|
|
205
|
+
await server.stop();
|
|
206
|
+
process.exit(0);
|
|
207
|
+
});
|
|
208
|
+
process.on("SIGINT", async ()=>{
|
|
209
|
+
console.log("Received SIGINT, shutting down gracefully...");
|
|
210
|
+
await server.stop();
|
|
211
|
+
process.exit(0);
|
|
212
|
+
});
|
|
213
|
+
try {
|
|
214
|
+
await server.start();
|
|
215
|
+
console.log("✓ Gateway running");
|
|
216
|
+
console.log(` URL: ws://${config.host}:${config.port}/ws`);
|
|
217
|
+
console.log(` Health: http://${config.host}:${config.port}/health`);
|
|
218
|
+
console.log(` Logs: ${(0, external_logger_cjs_namespaceObject.getLogFilePath)()}`);
|
|
219
|
+
if (config.auth?.mode === "token" && config.auth.token) console.log(` Auth Token: ${config.auth.token}`);
|
|
220
|
+
await new Promise(()=>{});
|
|
221
|
+
} catch (error) {
|
|
222
|
+
reportGatewayError("Failed to start gateway", error);
|
|
223
|
+
process.exit(1);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
async function handleJoin(args, options) {
|
|
227
|
+
const url = args[0] || "ws://localhost:18789/ws";
|
|
228
|
+
const name = options.name || `node-${Date.now()}`;
|
|
229
|
+
const token = options.token || (0, env_cjs_namespaceObject.getGatewayTokenFromEnv)();
|
|
230
|
+
const group = options.group;
|
|
231
|
+
const transport = options.transport || "auto";
|
|
232
|
+
console.log(`Connecting to gateway: ${url}`);
|
|
233
|
+
console.log(`Node name: ${name}`);
|
|
234
|
+
if ("auto" !== transport) console.log(`Transport: ${transport}`);
|
|
235
|
+
const client = new index_cjs_namespaceObject.GatewayClient(url, name, {
|
|
236
|
+
token,
|
|
237
|
+
transport,
|
|
238
|
+
events: {
|
|
239
|
+
connected: ()=>{
|
|
240
|
+
console.log("✓ Connected to gateway");
|
|
241
|
+
},
|
|
242
|
+
registered: (nodeId, nodeName)=>{
|
|
243
|
+
console.log(`✓ Registered as ${nodeName} (${nodeId})`);
|
|
244
|
+
if (group) client.joinGroup(group);
|
|
245
|
+
},
|
|
246
|
+
joinedGroup: (groupId, groupName)=>{
|
|
247
|
+
console.log(`✓ Joined group: ${groupName} (${groupId})`);
|
|
248
|
+
console.log("\nReady to receive messages. Press Ctrl+C to exit.");
|
|
249
|
+
},
|
|
250
|
+
broadcast: (message, fromNodeId, groupId)=>{
|
|
251
|
+
console.log(`\n[Broadcast from ${fromNodeId}]:`);
|
|
252
|
+
console.log(JSON.stringify(message, null, 2));
|
|
253
|
+
},
|
|
254
|
+
direct: (message, fromNodeId)=>{
|
|
255
|
+
console.log(`\n[Direct from ${fromNodeId}]:`);
|
|
256
|
+
console.log(JSON.stringify(message, null, 2));
|
|
257
|
+
},
|
|
258
|
+
error: (error)=>{
|
|
259
|
+
logger.error("Gateway error event", error.message);
|
|
260
|
+
console.error(`\n✗ Error: ${error.message}`);
|
|
261
|
+
console.error(`Logs: ${logFile}`);
|
|
262
|
+
},
|
|
263
|
+
disconnected: ()=>{
|
|
264
|
+
console.log("\n✗ Disconnected from gateway");
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
try {
|
|
269
|
+
await client.connect();
|
|
270
|
+
process.on("SIGINT", ()=>{
|
|
271
|
+
console.log("\nDisconnecting...");
|
|
272
|
+
client.disconnect();
|
|
273
|
+
process.exit(0);
|
|
274
|
+
});
|
|
275
|
+
await new Promise(()=>{});
|
|
276
|
+
} catch (error) {
|
|
277
|
+
reportGatewayError("Failed to connect", error);
|
|
278
|
+
process.exit(1);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
async function handleDiscover(options) {
|
|
282
|
+
const timeout = options.timeout || 5000;
|
|
283
|
+
const verbose = options.verbose;
|
|
284
|
+
const tailscale = options.tailscale;
|
|
285
|
+
if (tailscale) {
|
|
286
|
+
console.log("Discovering gateways on Tailscale network...");
|
|
287
|
+
const { TailscaleDiscoveryService } = await import("../../gateway/discovery/tailscale.cjs");
|
|
288
|
+
const ts = new TailscaleDiscoveryService();
|
|
289
|
+
try {
|
|
290
|
+
const gateways = await ts.discover(timeout);
|
|
291
|
+
if (0 === gateways.length) {
|
|
292
|
+
console.log("\nNo gateways found on Tailscale network");
|
|
293
|
+
console.log("\nTo start a Tailscale-discoverable gateway:");
|
|
294
|
+
console.log(' wingman gateway start --discovery tailscale --name "My Gateway"');
|
|
295
|
+
console.log('\nNote: Ensure your gateway has the "wingman-gateway" tag in Tailscale');
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
console.log(`\n✓ Found ${gateways.length} gateway(s):\n`);
|
|
299
|
+
for (const gw of gateways){
|
|
300
|
+
console.log(` ${gw.name}`);
|
|
301
|
+
console.log(` URL: ${gw.url}`);
|
|
302
|
+
console.log(` Auth: ${gw.requireAuth ? "Required" : "Optional"}`);
|
|
303
|
+
if (verbose) {
|
|
304
|
+
console.log(` Host: ${gw.host}`);
|
|
305
|
+
console.log(` Port: ${gw.port}`);
|
|
306
|
+
console.log(` Transport: ${gw.transport}`);
|
|
307
|
+
console.log(` Capabilities: ${gw.capabilities.join(", ")}`);
|
|
308
|
+
console.log(` Version: ${gw.version}`);
|
|
309
|
+
}
|
|
310
|
+
console.log();
|
|
311
|
+
}
|
|
312
|
+
console.log("To connect to a gateway:");
|
|
313
|
+
console.log(' wingman gateway join <url> --name "my-node"');
|
|
314
|
+
} catch (error) {
|
|
315
|
+
reportGatewayError("Discovery failed", error);
|
|
316
|
+
process.exit(1);
|
|
317
|
+
}
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
console.log(`Discovering gateways on local network (${timeout}ms timeout)...`);
|
|
321
|
+
const { MDNSDiscoveryService } = await import("../../gateway/discovery/mdns.cjs");
|
|
322
|
+
const mdns = new MDNSDiscoveryService();
|
|
323
|
+
try {
|
|
324
|
+
const gateways = await mdns.discover(timeout);
|
|
325
|
+
if (0 === gateways.length) {
|
|
326
|
+
console.log("\nNo gateways found on local network");
|
|
327
|
+
console.log("\nTo start a discoverable gateway:");
|
|
328
|
+
console.log(' wingman gateway start --discovery mdns --name "My Gateway"');
|
|
329
|
+
return;
|
|
330
|
+
}
|
|
331
|
+
console.log(`\n✓ Found ${gateways.length} gateway(s):\n`);
|
|
332
|
+
for (const gw of gateways){
|
|
333
|
+
console.log(` ${gw.name}`);
|
|
334
|
+
console.log(` URL: ${gw.url}`);
|
|
335
|
+
console.log(` Auth: ${gw.requireAuth ? "Required" : "Optional"}`);
|
|
336
|
+
if (verbose) {
|
|
337
|
+
console.log(` Host: ${gw.host}`);
|
|
338
|
+
console.log(` Port: ${gw.port}`);
|
|
339
|
+
console.log(` Transport: ${gw.transport}`);
|
|
340
|
+
console.log(` Capabilities: ${gw.capabilities.join(", ")}`);
|
|
341
|
+
console.log(` Version: ${gw.version}`);
|
|
342
|
+
}
|
|
343
|
+
console.log();
|
|
344
|
+
}
|
|
345
|
+
console.log("To connect to a gateway:");
|
|
346
|
+
console.log(' wingman gateway join <url> --name "my-node"');
|
|
347
|
+
} catch (error) {
|
|
348
|
+
reportGatewayError("Discovery failed", error);
|
|
349
|
+
process.exit(1);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
async function handleToken(options) {
|
|
353
|
+
if (options.generate) {
|
|
354
|
+
const { GatewayAuth } = await import("../../gateway/auth.cjs");
|
|
355
|
+
const auth = new GatewayAuth();
|
|
356
|
+
const token = auth.generateToken();
|
|
357
|
+
console.log("Generated token:");
|
|
358
|
+
console.log(token);
|
|
359
|
+
console.log('\nUse this token with: wingman gateway start --auth --token="<token>"');
|
|
360
|
+
} else console.log("Usage: wingman gateway token --generate");
|
|
361
|
+
}
|
|
362
|
+
async function handleHealth(options) {
|
|
363
|
+
const host = options.host || "localhost";
|
|
364
|
+
const port = options.port || 18789;
|
|
365
|
+
const url = `http://${host}:${port}/health`;
|
|
366
|
+
try {
|
|
367
|
+
const response = await fetch(url);
|
|
368
|
+
if (!response.ok) throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
369
|
+
const health = await response.json();
|
|
370
|
+
console.log("Gateway Health:");
|
|
371
|
+
console.log(JSON.stringify(health, null, 2));
|
|
372
|
+
} catch (error) {
|
|
373
|
+
reportGatewayError("Failed to check health", error);
|
|
374
|
+
process.exit(1);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
async function handleTunnel(args, options) {
|
|
378
|
+
const sshHost = args[0];
|
|
379
|
+
if (!sshHost) {
|
|
380
|
+
logger.error("SSH host required");
|
|
381
|
+
console.error("✗ SSH host required");
|
|
382
|
+
console.error(`Logs: ${logFile}`);
|
|
383
|
+
console.log("\nUsage:");
|
|
384
|
+
console.log(" wingman gateway tunnel user@host [options]");
|
|
385
|
+
console.log("\nOptions:");
|
|
386
|
+
console.log(" --port <number> Gateway port on remote host (default: 3000)");
|
|
387
|
+
console.log(" --local-port <number> Local port for tunnel (default: random)");
|
|
388
|
+
console.log(" --name <string> Node name after connecting");
|
|
389
|
+
console.log(" --group <string> Auto-join broadcast group");
|
|
390
|
+
process.exit(1);
|
|
391
|
+
}
|
|
392
|
+
const remotePort = options.port || 18789;
|
|
393
|
+
const localPort = options.localPort || 0;
|
|
394
|
+
const name = options.name || `tunnel-node-${Date.now()}`;
|
|
395
|
+
const group = options.group;
|
|
396
|
+
const actualLocalPort = localPort || await findAvailablePort();
|
|
397
|
+
console.log("Creating SSH tunnel to gateway...");
|
|
398
|
+
console.log(` SSH Host: ${sshHost}`);
|
|
399
|
+
console.log(` Remote Port: ${remotePort}`);
|
|
400
|
+
console.log(` Local Port: ${actualLocalPort}`);
|
|
401
|
+
console.log();
|
|
402
|
+
const { spawn } = await import("child_process");
|
|
403
|
+
const sshArgs = [
|
|
404
|
+
"-L",
|
|
405
|
+
`${actualLocalPort}:localhost:${remotePort}`,
|
|
406
|
+
"-N",
|
|
407
|
+
"-o",
|
|
408
|
+
"ExitOnForwardFailure=yes",
|
|
409
|
+
sshHost
|
|
410
|
+
];
|
|
411
|
+
const sshProcess = spawn("ssh", sshArgs, {
|
|
412
|
+
stdio: "inherit"
|
|
413
|
+
});
|
|
414
|
+
await new Promise((resolve)=>setTimeout(resolve, 2000));
|
|
415
|
+
if (null !== sshProcess.exitCode) {
|
|
416
|
+
logger.error("Failed to create SSH tunnel");
|
|
417
|
+
console.error("✗ Failed to create SSH tunnel");
|
|
418
|
+
console.error(`Logs: ${logFile}`);
|
|
419
|
+
process.exit(1);
|
|
420
|
+
}
|
|
421
|
+
console.log("✓ SSH tunnel established");
|
|
422
|
+
console.log();
|
|
423
|
+
console.log("Connecting to gateway through tunnel...");
|
|
424
|
+
const { GatewayClient } = await import("../../gateway/client.cjs");
|
|
425
|
+
const client = new GatewayClient(`ws://localhost:${actualLocalPort}/ws`, name, {
|
|
426
|
+
events: {
|
|
427
|
+
connected: ()=>{
|
|
428
|
+
console.log("✓ Connected to gateway");
|
|
429
|
+
},
|
|
430
|
+
registered: (nodeId, nodeName)=>{
|
|
431
|
+
console.log(`✓ Registered as ${nodeName} (${nodeId})`);
|
|
432
|
+
if (group) client.joinGroup(group);
|
|
433
|
+
},
|
|
434
|
+
joinedGroup: (groupId, groupName)=>{
|
|
435
|
+
console.log(`✓ Joined group: ${groupName} (${groupId})`);
|
|
436
|
+
console.log("\nReady to receive messages. Press Ctrl+C to exit.");
|
|
437
|
+
},
|
|
438
|
+
broadcast: (message, fromNodeId, groupId)=>{
|
|
439
|
+
console.log(`\n[Broadcast from ${fromNodeId}]:`);
|
|
440
|
+
console.log(JSON.stringify(message, null, 2));
|
|
441
|
+
},
|
|
442
|
+
direct: (message, fromNodeId)=>{
|
|
443
|
+
console.log(`\n[Direct from ${fromNodeId}]:`);
|
|
444
|
+
console.log(JSON.stringify(message, null, 2));
|
|
445
|
+
},
|
|
446
|
+
error: (error)=>{
|
|
447
|
+
logger.error("Gateway error event", error.message);
|
|
448
|
+
console.error(`\n✗ Error: ${error.message}`);
|
|
449
|
+
console.error(`Logs: ${logFile}`);
|
|
450
|
+
},
|
|
451
|
+
disconnected: ()=>{
|
|
452
|
+
console.log("\n✗ Disconnected from gateway");
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
});
|
|
456
|
+
try {
|
|
457
|
+
await client.connect();
|
|
458
|
+
process.on("SIGINT", ()=>{
|
|
459
|
+
console.log("\nClosing tunnel and disconnecting...");
|
|
460
|
+
client.disconnect();
|
|
461
|
+
sshProcess.kill();
|
|
462
|
+
process.exit(0);
|
|
463
|
+
});
|
|
464
|
+
sshProcess.on("exit", (code)=>{
|
|
465
|
+
console.log(`\n✗ SSH tunnel closed (exit code: ${code})`);
|
|
466
|
+
client.disconnect();
|
|
467
|
+
process.exit(code || 0);
|
|
468
|
+
});
|
|
469
|
+
await new Promise(()=>{});
|
|
470
|
+
} catch (error) {
|
|
471
|
+
reportGatewayError("Failed to connect", error);
|
|
472
|
+
sshProcess.kill();
|
|
473
|
+
process.exit(1);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
async function findAvailablePort() {
|
|
477
|
+
const net = await import("net");
|
|
478
|
+
return new Promise((resolve, reject)=>{
|
|
479
|
+
const server = net.createServer();
|
|
480
|
+
server.listen(0, ()=>{
|
|
481
|
+
const address = server.address();
|
|
482
|
+
const port = address.port;
|
|
483
|
+
server.close(()=>{
|
|
484
|
+
resolve(port);
|
|
485
|
+
});
|
|
486
|
+
});
|
|
487
|
+
server.on("error", reject);
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
function showGatewayHelp() {
|
|
491
|
+
console.log(`
|
|
492
|
+
Wingman Gateway - AI Agent Swarming Gateway
|
|
493
|
+
|
|
494
|
+
Usage:
|
|
495
|
+
wingman gateway <subcommand> [options]
|
|
496
|
+
|
|
497
|
+
Subcommands:
|
|
498
|
+
start Start the gateway as a daemon
|
|
499
|
+
stop Stop the gateway daemon
|
|
500
|
+
restart Restart the gateway daemon
|
|
501
|
+
status Show gateway status
|
|
502
|
+
run Run the gateway in foreground
|
|
503
|
+
join <url> Join a gateway as a node
|
|
504
|
+
discover Discover gateways on local network
|
|
505
|
+
tunnel <ssh-host> Create SSH tunnel and connect to gateway
|
|
506
|
+
token Generate authentication token
|
|
507
|
+
health Check gateway health
|
|
508
|
+
|
|
509
|
+
Start Options:
|
|
510
|
+
--port <number> Port to listen on (default: 18789)
|
|
511
|
+
--host <string> Host to bind to (default: 127.0.0.1)
|
|
512
|
+
--auth Enable token authentication (legacy shortcut)
|
|
513
|
+
--auth-mode <mode> token | password | none
|
|
514
|
+
--token <string> Authentication token (token mode)
|
|
515
|
+
--password <string> Authentication password (password mode)
|
|
516
|
+
--max-nodes <number> Maximum number of nodes (default: 1000)
|
|
517
|
+
--log-level <level> Log level (debug|info|warn|error|silent)
|
|
518
|
+
--discovery <method> Discovery method: mdns, tailscale
|
|
519
|
+
--name <string> Gateway name for discovery
|
|
520
|
+
|
|
521
|
+
Join Options:
|
|
522
|
+
--name <string> Node name
|
|
523
|
+
--token <string> Authentication token
|
|
524
|
+
--group <string> Auto-join broadcast group
|
|
525
|
+
--transport <type> Transport type: websocket, http, auto (default: auto)
|
|
526
|
+
|
|
527
|
+
Discover Options:
|
|
528
|
+
--timeout <ms> Discovery timeout (default: 5000)
|
|
529
|
+
--verbose Show detailed gateway info
|
|
530
|
+
--tailscale Discover on Tailscale network instead of LAN
|
|
531
|
+
|
|
532
|
+
Tunnel Options:
|
|
533
|
+
--port <number> Gateway port on remote host (default: 18789)
|
|
534
|
+
--local-port <number> Local port for tunnel (default: random)
|
|
535
|
+
--name <string> Node name after connecting
|
|
536
|
+
--group <string> Auto-join broadcast group
|
|
537
|
+
|
|
538
|
+
Token Options:
|
|
539
|
+
--generate Generate a new token
|
|
540
|
+
|
|
541
|
+
Health Options:
|
|
542
|
+
--host <string> Gateway host (default: localhost)
|
|
543
|
+
--port <number> Gateway port (default: 18789)
|
|
544
|
+
|
|
545
|
+
Examples:
|
|
546
|
+
# Start gateway locally
|
|
547
|
+
wingman gateway start
|
|
548
|
+
|
|
549
|
+
# Start with mDNS discovery (LAN)
|
|
550
|
+
wingman gateway start --discovery mdns --name "Home Gateway"
|
|
551
|
+
|
|
552
|
+
# Start with Tailscale discovery
|
|
553
|
+
wingman gateway start --discovery tailscale --name "Work Gateway"
|
|
554
|
+
|
|
555
|
+
# Start with authentication
|
|
556
|
+
wingman gateway token --generate
|
|
557
|
+
wingman gateway start --auth --token="<token>"
|
|
558
|
+
|
|
559
|
+
# Start on custom port
|
|
560
|
+
wingman gateway start --port 8080
|
|
561
|
+
|
|
562
|
+
# Discover gateways on local network
|
|
563
|
+
wingman gateway discover
|
|
564
|
+
wingman gateway discover --verbose
|
|
565
|
+
|
|
566
|
+
# Discover gateways on Tailscale
|
|
567
|
+
wingman gateway discover --tailscale
|
|
568
|
+
wingman gateway discover --tailscale --verbose
|
|
569
|
+
|
|
570
|
+
# Join a gateway
|
|
571
|
+
wingman gateway join ws://localhost:18789/ws --name="agent-1" --group="swarm"
|
|
572
|
+
|
|
573
|
+
# Join via HTTP bridge (firewall traversal)
|
|
574
|
+
wingman gateway join http://localhost:18789 --transport http --name="agent-1"
|
|
575
|
+
|
|
576
|
+
# Auto-select transport
|
|
577
|
+
wingman gateway join http://localhost:18789 --transport auto --name="agent-1"
|
|
578
|
+
|
|
579
|
+
# Connect via SSH tunnel
|
|
580
|
+
wingman gateway tunnel user@remote-host --name="tunnel-node"
|
|
581
|
+
wingman gateway tunnel user@remote-host --port 18789 --group="swarm"
|
|
582
|
+
|
|
583
|
+
# Check status
|
|
584
|
+
wingman gateway status
|
|
585
|
+
|
|
586
|
+
# Check health
|
|
587
|
+
wingman gateway health
|
|
588
|
+
|
|
589
|
+
Deployment:
|
|
590
|
+
Local: Run on localhost or LAN
|
|
591
|
+
Tailscale: Accessible over Tailscale network
|
|
592
|
+
Cloudflare: Deploy to Cloudflare Workers (see cloudflare/README.md)
|
|
593
|
+
`);
|
|
594
|
+
}
|
|
595
|
+
exports.executeGatewayCommand = __webpack_exports__.executeGatewayCommand;
|
|
596
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
597
|
+
"executeGatewayCommand"
|
|
598
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
599
|
+
Object.defineProperty(exports, '__esModule', {
|
|
600
|
+
value: true
|
|
601
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway command arguments
|
|
3
|
+
*/
|
|
4
|
+
export interface GatewayCommandArgs {
|
|
5
|
+
subcommand: string;
|
|
6
|
+
args: string[];
|
|
7
|
+
options: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Execute gateway command
|
|
11
|
+
*/
|
|
12
|
+
export declare function executeGatewayCommand(args: GatewayCommandArgs): Promise<void>;
|