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