@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,264 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_exports__ = {};
|
|
3
|
+
const external_vitest_namespaceObject = require("vitest");
|
|
4
|
+
const agentLoader_cjs_namespaceObject = require("../../agent/config/agentLoader.cjs");
|
|
5
|
+
const external_fs_namespaceObject = require("fs");
|
|
6
|
+
const external_path_namespaceObject = require("path");
|
|
7
|
+
const external_os_namespaceObject = require("os");
|
|
8
|
+
(0, external_vitest_namespaceObject.describe)("Agent Invocation Integration", ()=>{
|
|
9
|
+
let testDir;
|
|
10
|
+
let configDir;
|
|
11
|
+
let agentsDir;
|
|
12
|
+
(0, external_vitest_namespaceObject.beforeEach)(()=>{
|
|
13
|
+
testDir = (0, external_path_namespaceObject.join)((0, external_os_namespaceObject.tmpdir)(), `wingman-integration-${Date.now()}`);
|
|
14
|
+
configDir = (0, external_path_namespaceObject.join)(testDir, ".wingman");
|
|
15
|
+
agentsDir = (0, external_path_namespaceObject.join)(configDir, "agents");
|
|
16
|
+
(0, external_fs_namespaceObject.mkdirSync)(agentsDir, {
|
|
17
|
+
recursive: true
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
(0, external_vitest_namespaceObject.afterEach)(()=>{
|
|
21
|
+
if ((0, external_fs_namespaceObject.existsSync)(testDir)) (0, external_fs_namespaceObject.rmSync)(testDir, {
|
|
22
|
+
recursive: true,
|
|
23
|
+
force: true
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
(0, external_vitest_namespaceObject.describe)("Agent Loading", ()=>{
|
|
27
|
+
(0, external_vitest_namespaceObject.it)("should load agent with tools", ()=>{
|
|
28
|
+
const agentConfig = {
|
|
29
|
+
name: "test-agent",
|
|
30
|
+
description: "Test agent for integration testing",
|
|
31
|
+
systemPrompt: "You are a test agent",
|
|
32
|
+
tools: [
|
|
33
|
+
"think",
|
|
34
|
+
"internet_search"
|
|
35
|
+
]
|
|
36
|
+
};
|
|
37
|
+
const agentDir = (0, external_path_namespaceObject.join)(agentsDir, "test-agent");
|
|
38
|
+
(0, external_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
39
|
+
recursive: true
|
|
40
|
+
});
|
|
41
|
+
(0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(agentConfig));
|
|
42
|
+
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
|
|
43
|
+
const agents = loader.loadAllAgentConfigs();
|
|
44
|
+
(0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
|
|
45
|
+
(0, external_vitest_namespaceObject.expect)(agents[0].name).toBe("test-agent");
|
|
46
|
+
(0, external_vitest_namespaceObject.expect)(agents[0].tools).toEqual([
|
|
47
|
+
"think",
|
|
48
|
+
"internet_search"
|
|
49
|
+
]);
|
|
50
|
+
});
|
|
51
|
+
(0, external_vitest_namespaceObject.it)("should load multiple agents", ()=>{
|
|
52
|
+
const agent1Config = {
|
|
53
|
+
name: "agent1",
|
|
54
|
+
description: "First test agent",
|
|
55
|
+
systemPrompt: "You are agent 1",
|
|
56
|
+
tools: [
|
|
57
|
+
"think"
|
|
58
|
+
]
|
|
59
|
+
};
|
|
60
|
+
const agent2Config = {
|
|
61
|
+
name: "agent2",
|
|
62
|
+
description: "Second test agent",
|
|
63
|
+
systemPrompt: "You are agent 2",
|
|
64
|
+
tools: [
|
|
65
|
+
"internet_search"
|
|
66
|
+
]
|
|
67
|
+
};
|
|
68
|
+
const agent1Dir = (0, external_path_namespaceObject.join)(agentsDir, "agent1");
|
|
69
|
+
const agent2Dir = (0, external_path_namespaceObject.join)(agentsDir, "agent2");
|
|
70
|
+
(0, external_fs_namespaceObject.mkdirSync)(agent1Dir, {
|
|
71
|
+
recursive: true
|
|
72
|
+
});
|
|
73
|
+
(0, external_fs_namespaceObject.mkdirSync)(agent2Dir, {
|
|
74
|
+
recursive: true
|
|
75
|
+
});
|
|
76
|
+
(0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agent1Dir, "agent.json"), JSON.stringify(agent1Config));
|
|
77
|
+
(0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agent2Dir, "agent.json"), JSON.stringify(agent2Config));
|
|
78
|
+
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
|
|
79
|
+
const agents = loader.loadAllAgentConfigs();
|
|
80
|
+
(0, external_vitest_namespaceObject.expect)(agents).toHaveLength(2);
|
|
81
|
+
(0, external_vitest_namespaceObject.expect)(agents.map((a)=>a.name)).toContain("agent1");
|
|
82
|
+
(0, external_vitest_namespaceObject.expect)(agents.map((a)=>a.name)).toContain("agent2");
|
|
83
|
+
});
|
|
84
|
+
(0, external_vitest_namespaceObject.it)("should create agent with command_execute tool and safety options", ()=>{
|
|
85
|
+
const agentConfig = {
|
|
86
|
+
name: "coder-agent",
|
|
87
|
+
description: "Agent with command execution",
|
|
88
|
+
systemPrompt: "You are a coding agent",
|
|
89
|
+
tools: [
|
|
90
|
+
"command_execute"
|
|
91
|
+
],
|
|
92
|
+
blockedCommands: [
|
|
93
|
+
"rm",
|
|
94
|
+
"sudo"
|
|
95
|
+
],
|
|
96
|
+
allowScriptExecution: false,
|
|
97
|
+
commandTimeout: 30000
|
|
98
|
+
};
|
|
99
|
+
const agentDir = (0, external_path_namespaceObject.join)(agentsDir, "coder-agent");
|
|
100
|
+
(0, external_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
101
|
+
recursive: true
|
|
102
|
+
});
|
|
103
|
+
(0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(agentConfig));
|
|
104
|
+
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
|
|
105
|
+
const agents = loader.loadAllAgentConfigs();
|
|
106
|
+
(0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
|
|
107
|
+
(0, external_vitest_namespaceObject.expect)(agents[0].name).toBe("coder-agent");
|
|
108
|
+
(0, external_vitest_namespaceObject.expect)(agents[0].tools).toEqual([
|
|
109
|
+
"command_execute"
|
|
110
|
+
]);
|
|
111
|
+
(0, external_vitest_namespaceObject.expect)(agents[0].blockedCommands).toEqual([
|
|
112
|
+
"rm",
|
|
113
|
+
"sudo"
|
|
114
|
+
]);
|
|
115
|
+
(0, external_vitest_namespaceObject.expect)(agents[0].allowScriptExecution).toBe(false);
|
|
116
|
+
(0, external_vitest_namespaceObject.expect)(agents[0].commandTimeout).toBe(30000);
|
|
117
|
+
});
|
|
118
|
+
(0, external_vitest_namespaceObject.it)("should find specific agent by name", async ()=>{
|
|
119
|
+
const agentConfig = {
|
|
120
|
+
name: "specific-agent",
|
|
121
|
+
description: "Specific test agent",
|
|
122
|
+
systemPrompt: "You are a specific agent"
|
|
123
|
+
};
|
|
124
|
+
const agentDir = (0, external_path_namespaceObject.join)(agentsDir, "specific-agent");
|
|
125
|
+
(0, external_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
126
|
+
recursive: true
|
|
127
|
+
});
|
|
128
|
+
(0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(agentConfig));
|
|
129
|
+
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
|
|
130
|
+
const agent = await loader.loadAgent("specific-agent");
|
|
131
|
+
(0, external_vitest_namespaceObject.expect)(agent).toBeDefined();
|
|
132
|
+
(0, external_vitest_namespaceObject.expect)(agent?.name).toBe("specific-agent");
|
|
133
|
+
});
|
|
134
|
+
(0, external_vitest_namespaceObject.it)("should return undefined for non-existent agent", async ()=>{
|
|
135
|
+
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
|
|
136
|
+
const agent = await loader.loadAgent("non-existent-agent");
|
|
137
|
+
(0, external_vitest_namespaceObject.expect)(agent).toBeUndefined();
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
(0, external_vitest_namespaceObject.describe)("Agent Configuration Validation", ()=>{
|
|
141
|
+
(0, external_vitest_namespaceObject.it)("should skip agents with invalid configuration", ()=>{
|
|
142
|
+
const validConfig = {
|
|
143
|
+
name: "valid-agent",
|
|
144
|
+
description: "Valid agent",
|
|
145
|
+
systemPrompt: "You are valid"
|
|
146
|
+
};
|
|
147
|
+
const invalidConfig = {
|
|
148
|
+
name: "invalid-agent"
|
|
149
|
+
};
|
|
150
|
+
const validDir = (0, external_path_namespaceObject.join)(agentsDir, "valid-agent");
|
|
151
|
+
const invalidDir = (0, external_path_namespaceObject.join)(agentsDir, "invalid-agent");
|
|
152
|
+
(0, external_fs_namespaceObject.mkdirSync)(validDir, {
|
|
153
|
+
recursive: true
|
|
154
|
+
});
|
|
155
|
+
(0, external_fs_namespaceObject.mkdirSync)(invalidDir, {
|
|
156
|
+
recursive: true
|
|
157
|
+
});
|
|
158
|
+
(0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(validDir, "agent.json"), JSON.stringify(validConfig));
|
|
159
|
+
(0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(invalidDir, "agent.json"), JSON.stringify(invalidConfig));
|
|
160
|
+
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
|
|
161
|
+
const agents = loader.loadAllAgentConfigs();
|
|
162
|
+
(0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
|
|
163
|
+
(0, external_vitest_namespaceObject.expect)(agents[0].name).toBe("valid-agent");
|
|
164
|
+
});
|
|
165
|
+
(0, external_vitest_namespaceObject.it)("should skip agents with invalid tool names", ()=>{
|
|
166
|
+
const agentConfig = {
|
|
167
|
+
name: "test-agent",
|
|
168
|
+
description: "Test agent with invalid tool",
|
|
169
|
+
systemPrompt: "You are a test agent",
|
|
170
|
+
tools: [
|
|
171
|
+
"invalid_tool"
|
|
172
|
+
]
|
|
173
|
+
};
|
|
174
|
+
const agentDir = (0, external_path_namespaceObject.join)(agentsDir, "test-agent");
|
|
175
|
+
(0, external_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
176
|
+
recursive: true
|
|
177
|
+
});
|
|
178
|
+
(0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(agentConfig));
|
|
179
|
+
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
|
|
180
|
+
const agents = loader.loadAllAgentConfigs();
|
|
181
|
+
(0, external_vitest_namespaceObject.expect)(agents).toHaveLength(0);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
(0, external_vitest_namespaceObject.describe)("Agent with Model Override", ()=>{
|
|
185
|
+
(0, external_vitest_namespaceObject.it)("should support model override", ()=>{
|
|
186
|
+
const agentConfig = {
|
|
187
|
+
name: "custom-model-agent",
|
|
188
|
+
description: "Agent with custom model",
|
|
189
|
+
systemPrompt: "You are an agent with custom model",
|
|
190
|
+
model: "anthropic:claude-opus-4-5"
|
|
191
|
+
};
|
|
192
|
+
const agentDir = (0, external_path_namespaceObject.join)(agentsDir, "custom-model-agent");
|
|
193
|
+
(0, external_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
194
|
+
recursive: true
|
|
195
|
+
});
|
|
196
|
+
(0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(agentConfig));
|
|
197
|
+
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
|
|
198
|
+
const agents = loader.loadAllAgentConfigs();
|
|
199
|
+
(0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
|
|
200
|
+
(0, external_vitest_namespaceObject.expect)(agents[0].name).toBe("custom-model-agent");
|
|
201
|
+
(0, external_vitest_namespaceObject.expect)(agents[0].model).toBeDefined();
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
(0, external_vitest_namespaceObject.describe)("Subagent Loading", ()=>{
|
|
205
|
+
(0, external_vitest_namespaceObject.it)("should load agent with subagents", ()=>{
|
|
206
|
+
const agentConfig = {
|
|
207
|
+
name: "parent-agent",
|
|
208
|
+
description: "Parent agent with subagents",
|
|
209
|
+
systemPrompt: "You are a parent agent",
|
|
210
|
+
subagents: [
|
|
211
|
+
{
|
|
212
|
+
name: "subagent1",
|
|
213
|
+
description: "First subagent",
|
|
214
|
+
systemPrompt: "You are subagent 1",
|
|
215
|
+
tools: [
|
|
216
|
+
"think"
|
|
217
|
+
]
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
name: "subagent2",
|
|
221
|
+
description: "Second subagent",
|
|
222
|
+
systemPrompt: "You are subagent 2",
|
|
223
|
+
tools: [
|
|
224
|
+
"internet_search"
|
|
225
|
+
]
|
|
226
|
+
}
|
|
227
|
+
]
|
|
228
|
+
};
|
|
229
|
+
const agentDir = (0, external_path_namespaceObject.join)(agentsDir, "parent-agent");
|
|
230
|
+
(0, external_fs_namespaceObject.mkdirSync)(agentDir, {
|
|
231
|
+
recursive: true
|
|
232
|
+
});
|
|
233
|
+
(0, external_fs_namespaceObject.writeFileSync)((0, external_path_namespaceObject.join)(agentDir, "agent.json"), JSON.stringify(agentConfig));
|
|
234
|
+
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
|
|
235
|
+
const agents = loader.loadAllAgentConfigs();
|
|
236
|
+
(0, external_vitest_namespaceObject.expect)(agents).toHaveLength(1);
|
|
237
|
+
(0, external_vitest_namespaceObject.expect)(agents[0].name).toBe("parent-agent");
|
|
238
|
+
(0, external_vitest_namespaceObject.expect)(agents[0].subAgents).toBeDefined();
|
|
239
|
+
(0, external_vitest_namespaceObject.expect)(agents[0].subAgents?.length).toBe(2);
|
|
240
|
+
(0, external_vitest_namespaceObject.expect)(agents[0].subAgents?.[0].name).toBe("subagent1");
|
|
241
|
+
(0, external_vitest_namespaceObject.expect)(agents[0].subAgents?.[1].name).toBe("subagent2");
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
(0, external_vitest_namespaceObject.describe)("Empty Workspace", ()=>{
|
|
245
|
+
(0, external_vitest_namespaceObject.it)("should return empty array when no agents exist", ()=>{
|
|
246
|
+
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
|
|
247
|
+
const agents = loader.loadAllAgentConfigs();
|
|
248
|
+
(0, external_vitest_namespaceObject.expect)(agents).toEqual([]);
|
|
249
|
+
});
|
|
250
|
+
(0, external_vitest_namespaceObject.it)("should return empty array when agents directory doesn't exist", ()=>{
|
|
251
|
+
(0, external_fs_namespaceObject.rmSync)(agentsDir, {
|
|
252
|
+
recursive: true,
|
|
253
|
+
force: true
|
|
254
|
+
});
|
|
255
|
+
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(configDir, testDir);
|
|
256
|
+
const agents = loader.loadAllAgentConfigs();
|
|
257
|
+
(0, external_vitest_namespaceObject.expect)(agents).toEqual([]);
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
262
|
+
Object.defineProperty(exports, '__esModule', {
|
|
263
|
+
value: true
|
|
264
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
2
|
+
import { AgentLoader } from "../../agent/config/agentLoader.js";
|
|
3
|
+
import { existsSync, mkdirSync, rmSync, writeFileSync } from "fs";
|
|
4
|
+
import { join } from "path";
|
|
5
|
+
import { tmpdir } from "os";
|
|
6
|
+
describe("Agent Invocation Integration", ()=>{
|
|
7
|
+
let testDir;
|
|
8
|
+
let configDir;
|
|
9
|
+
let agentsDir;
|
|
10
|
+
beforeEach(()=>{
|
|
11
|
+
testDir = join(tmpdir(), `wingman-integration-${Date.now()}`);
|
|
12
|
+
configDir = join(testDir, ".wingman");
|
|
13
|
+
agentsDir = join(configDir, "agents");
|
|
14
|
+
mkdirSync(agentsDir, {
|
|
15
|
+
recursive: true
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
afterEach(()=>{
|
|
19
|
+
if (existsSync(testDir)) rmSync(testDir, {
|
|
20
|
+
recursive: true,
|
|
21
|
+
force: true
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
describe("Agent Loading", ()=>{
|
|
25
|
+
it("should load agent with tools", ()=>{
|
|
26
|
+
const agentConfig = {
|
|
27
|
+
name: "test-agent",
|
|
28
|
+
description: "Test agent for integration testing",
|
|
29
|
+
systemPrompt: "You are a test agent",
|
|
30
|
+
tools: [
|
|
31
|
+
"think",
|
|
32
|
+
"internet_search"
|
|
33
|
+
]
|
|
34
|
+
};
|
|
35
|
+
const agentDir = join(agentsDir, "test-agent");
|
|
36
|
+
mkdirSync(agentDir, {
|
|
37
|
+
recursive: true
|
|
38
|
+
});
|
|
39
|
+
writeFileSync(join(agentDir, "agent.json"), JSON.stringify(agentConfig));
|
|
40
|
+
const loader = new AgentLoader(configDir, testDir);
|
|
41
|
+
const agents = loader.loadAllAgentConfigs();
|
|
42
|
+
expect(agents).toHaveLength(1);
|
|
43
|
+
expect(agents[0].name).toBe("test-agent");
|
|
44
|
+
expect(agents[0].tools).toEqual([
|
|
45
|
+
"think",
|
|
46
|
+
"internet_search"
|
|
47
|
+
]);
|
|
48
|
+
});
|
|
49
|
+
it("should load multiple agents", ()=>{
|
|
50
|
+
const agent1Config = {
|
|
51
|
+
name: "agent1",
|
|
52
|
+
description: "First test agent",
|
|
53
|
+
systemPrompt: "You are agent 1",
|
|
54
|
+
tools: [
|
|
55
|
+
"think"
|
|
56
|
+
]
|
|
57
|
+
};
|
|
58
|
+
const agent2Config = {
|
|
59
|
+
name: "agent2",
|
|
60
|
+
description: "Second test agent",
|
|
61
|
+
systemPrompt: "You are agent 2",
|
|
62
|
+
tools: [
|
|
63
|
+
"internet_search"
|
|
64
|
+
]
|
|
65
|
+
};
|
|
66
|
+
const agent1Dir = join(agentsDir, "agent1");
|
|
67
|
+
const agent2Dir = join(agentsDir, "agent2");
|
|
68
|
+
mkdirSync(agent1Dir, {
|
|
69
|
+
recursive: true
|
|
70
|
+
});
|
|
71
|
+
mkdirSync(agent2Dir, {
|
|
72
|
+
recursive: true
|
|
73
|
+
});
|
|
74
|
+
writeFileSync(join(agent1Dir, "agent.json"), JSON.stringify(agent1Config));
|
|
75
|
+
writeFileSync(join(agent2Dir, "agent.json"), JSON.stringify(agent2Config));
|
|
76
|
+
const loader = new AgentLoader(configDir, testDir);
|
|
77
|
+
const agents = loader.loadAllAgentConfigs();
|
|
78
|
+
expect(agents).toHaveLength(2);
|
|
79
|
+
expect(agents.map((a)=>a.name)).toContain("agent1");
|
|
80
|
+
expect(agents.map((a)=>a.name)).toContain("agent2");
|
|
81
|
+
});
|
|
82
|
+
it("should create agent with command_execute tool and safety options", ()=>{
|
|
83
|
+
const agentConfig = {
|
|
84
|
+
name: "coder-agent",
|
|
85
|
+
description: "Agent with command execution",
|
|
86
|
+
systemPrompt: "You are a coding agent",
|
|
87
|
+
tools: [
|
|
88
|
+
"command_execute"
|
|
89
|
+
],
|
|
90
|
+
blockedCommands: [
|
|
91
|
+
"rm",
|
|
92
|
+
"sudo"
|
|
93
|
+
],
|
|
94
|
+
allowScriptExecution: false,
|
|
95
|
+
commandTimeout: 30000
|
|
96
|
+
};
|
|
97
|
+
const agentDir = join(agentsDir, "coder-agent");
|
|
98
|
+
mkdirSync(agentDir, {
|
|
99
|
+
recursive: true
|
|
100
|
+
});
|
|
101
|
+
writeFileSync(join(agentDir, "agent.json"), JSON.stringify(agentConfig));
|
|
102
|
+
const loader = new AgentLoader(configDir, testDir);
|
|
103
|
+
const agents = loader.loadAllAgentConfigs();
|
|
104
|
+
expect(agents).toHaveLength(1);
|
|
105
|
+
expect(agents[0].name).toBe("coder-agent");
|
|
106
|
+
expect(agents[0].tools).toEqual([
|
|
107
|
+
"command_execute"
|
|
108
|
+
]);
|
|
109
|
+
expect(agents[0].blockedCommands).toEqual([
|
|
110
|
+
"rm",
|
|
111
|
+
"sudo"
|
|
112
|
+
]);
|
|
113
|
+
expect(agents[0].allowScriptExecution).toBe(false);
|
|
114
|
+
expect(agents[0].commandTimeout).toBe(30000);
|
|
115
|
+
});
|
|
116
|
+
it("should find specific agent by name", async ()=>{
|
|
117
|
+
const agentConfig = {
|
|
118
|
+
name: "specific-agent",
|
|
119
|
+
description: "Specific test agent",
|
|
120
|
+
systemPrompt: "You are a specific agent"
|
|
121
|
+
};
|
|
122
|
+
const agentDir = join(agentsDir, "specific-agent");
|
|
123
|
+
mkdirSync(agentDir, {
|
|
124
|
+
recursive: true
|
|
125
|
+
});
|
|
126
|
+
writeFileSync(join(agentDir, "agent.json"), JSON.stringify(agentConfig));
|
|
127
|
+
const loader = new AgentLoader(configDir, testDir);
|
|
128
|
+
const agent = await loader.loadAgent("specific-agent");
|
|
129
|
+
expect(agent).toBeDefined();
|
|
130
|
+
expect(agent?.name).toBe("specific-agent");
|
|
131
|
+
});
|
|
132
|
+
it("should return undefined for non-existent agent", async ()=>{
|
|
133
|
+
const loader = new AgentLoader(configDir, testDir);
|
|
134
|
+
const agent = await loader.loadAgent("non-existent-agent");
|
|
135
|
+
expect(agent).toBeUndefined();
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
describe("Agent Configuration Validation", ()=>{
|
|
139
|
+
it("should skip agents with invalid configuration", ()=>{
|
|
140
|
+
const validConfig = {
|
|
141
|
+
name: "valid-agent",
|
|
142
|
+
description: "Valid agent",
|
|
143
|
+
systemPrompt: "You are valid"
|
|
144
|
+
};
|
|
145
|
+
const invalidConfig = {
|
|
146
|
+
name: "invalid-agent"
|
|
147
|
+
};
|
|
148
|
+
const validDir = join(agentsDir, "valid-agent");
|
|
149
|
+
const invalidDir = join(agentsDir, "invalid-agent");
|
|
150
|
+
mkdirSync(validDir, {
|
|
151
|
+
recursive: true
|
|
152
|
+
});
|
|
153
|
+
mkdirSync(invalidDir, {
|
|
154
|
+
recursive: true
|
|
155
|
+
});
|
|
156
|
+
writeFileSync(join(validDir, "agent.json"), JSON.stringify(validConfig));
|
|
157
|
+
writeFileSync(join(invalidDir, "agent.json"), JSON.stringify(invalidConfig));
|
|
158
|
+
const loader = new AgentLoader(configDir, testDir);
|
|
159
|
+
const agents = loader.loadAllAgentConfigs();
|
|
160
|
+
expect(agents).toHaveLength(1);
|
|
161
|
+
expect(agents[0].name).toBe("valid-agent");
|
|
162
|
+
});
|
|
163
|
+
it("should skip agents with invalid tool names", ()=>{
|
|
164
|
+
const agentConfig = {
|
|
165
|
+
name: "test-agent",
|
|
166
|
+
description: "Test agent with invalid tool",
|
|
167
|
+
systemPrompt: "You are a test agent",
|
|
168
|
+
tools: [
|
|
169
|
+
"invalid_tool"
|
|
170
|
+
]
|
|
171
|
+
};
|
|
172
|
+
const agentDir = join(agentsDir, "test-agent");
|
|
173
|
+
mkdirSync(agentDir, {
|
|
174
|
+
recursive: true
|
|
175
|
+
});
|
|
176
|
+
writeFileSync(join(agentDir, "agent.json"), JSON.stringify(agentConfig));
|
|
177
|
+
const loader = new AgentLoader(configDir, testDir);
|
|
178
|
+
const agents = loader.loadAllAgentConfigs();
|
|
179
|
+
expect(agents).toHaveLength(0);
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
describe("Agent with Model Override", ()=>{
|
|
183
|
+
it("should support model override", ()=>{
|
|
184
|
+
const agentConfig = {
|
|
185
|
+
name: "custom-model-agent",
|
|
186
|
+
description: "Agent with custom model",
|
|
187
|
+
systemPrompt: "You are an agent with custom model",
|
|
188
|
+
model: "anthropic:claude-opus-4-5"
|
|
189
|
+
};
|
|
190
|
+
const agentDir = join(agentsDir, "custom-model-agent");
|
|
191
|
+
mkdirSync(agentDir, {
|
|
192
|
+
recursive: true
|
|
193
|
+
});
|
|
194
|
+
writeFileSync(join(agentDir, "agent.json"), JSON.stringify(agentConfig));
|
|
195
|
+
const loader = new AgentLoader(configDir, testDir);
|
|
196
|
+
const agents = loader.loadAllAgentConfigs();
|
|
197
|
+
expect(agents).toHaveLength(1);
|
|
198
|
+
expect(agents[0].name).toBe("custom-model-agent");
|
|
199
|
+
expect(agents[0].model).toBeDefined();
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
describe("Subagent Loading", ()=>{
|
|
203
|
+
it("should load agent with subagents", ()=>{
|
|
204
|
+
const agentConfig = {
|
|
205
|
+
name: "parent-agent",
|
|
206
|
+
description: "Parent agent with subagents",
|
|
207
|
+
systemPrompt: "You are a parent agent",
|
|
208
|
+
subagents: [
|
|
209
|
+
{
|
|
210
|
+
name: "subagent1",
|
|
211
|
+
description: "First subagent",
|
|
212
|
+
systemPrompt: "You are subagent 1",
|
|
213
|
+
tools: [
|
|
214
|
+
"think"
|
|
215
|
+
]
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
name: "subagent2",
|
|
219
|
+
description: "Second subagent",
|
|
220
|
+
systemPrompt: "You are subagent 2",
|
|
221
|
+
tools: [
|
|
222
|
+
"internet_search"
|
|
223
|
+
]
|
|
224
|
+
}
|
|
225
|
+
]
|
|
226
|
+
};
|
|
227
|
+
const agentDir = join(agentsDir, "parent-agent");
|
|
228
|
+
mkdirSync(agentDir, {
|
|
229
|
+
recursive: true
|
|
230
|
+
});
|
|
231
|
+
writeFileSync(join(agentDir, "agent.json"), JSON.stringify(agentConfig));
|
|
232
|
+
const loader = new AgentLoader(configDir, testDir);
|
|
233
|
+
const agents = loader.loadAllAgentConfigs();
|
|
234
|
+
expect(agents).toHaveLength(1);
|
|
235
|
+
expect(agents[0].name).toBe("parent-agent");
|
|
236
|
+
expect(agents[0].subAgents).toBeDefined();
|
|
237
|
+
expect(agents[0].subAgents?.length).toBe(2);
|
|
238
|
+
expect(agents[0].subAgents?.[0].name).toBe("subagent1");
|
|
239
|
+
expect(agents[0].subAgents?.[1].name).toBe("subagent2");
|
|
240
|
+
});
|
|
241
|
+
});
|
|
242
|
+
describe("Empty Workspace", ()=>{
|
|
243
|
+
it("should return empty array when no agents exist", ()=>{
|
|
244
|
+
const loader = new AgentLoader(configDir, testDir);
|
|
245
|
+
const agents = loader.loadAllAgentConfigs();
|
|
246
|
+
expect(agents).toEqual([]);
|
|
247
|
+
});
|
|
248
|
+
it("should return empty array when agents directory doesn't exist", ()=>{
|
|
249
|
+
rmSync(agentsDir, {
|
|
250
|
+
recursive: true,
|
|
251
|
+
force: true
|
|
252
|
+
});
|
|
253
|
+
const loader = new AgentLoader(configDir, testDir);
|
|
254
|
+
const agents = loader.loadAllAgentConfigs();
|
|
255
|
+
expect(agents).toEqual([]);
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
});
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_exports__ = {};
|
|
3
|
+
const external_vitest_namespaceObject = require("vitest");
|
|
4
|
+
const FINNHUB_BASE_URL = process.env.FINNHUB_BASE_URL?.trim() || "https://finnhub.io/api/v1";
|
|
5
|
+
const FINNHUB_API_KEY = process.env.FINNHUB_API_KEY?.trim();
|
|
6
|
+
const RUN_LIVE = "1" === process.env.FINNHUB_LIVE_TESTS;
|
|
7
|
+
const describeLive = FINNHUB_API_KEY && RUN_LIVE ? external_vitest_namespaceObject.describe : external_vitest_namespaceObject.describe.skip;
|
|
8
|
+
const secondsPerDay = 86400;
|
|
9
|
+
const buildCandleUrl = (scenario)=>{
|
|
10
|
+
const to = Math.floor(Date.now() / 1000);
|
|
11
|
+
const from = to - scenario.lookbackDays * secondsPerDay;
|
|
12
|
+
const url = new URL(`${FINNHUB_BASE_URL}/stock/candle`);
|
|
13
|
+
url.searchParams.set("symbol", scenario.symbol);
|
|
14
|
+
url.searchParams.set("resolution", scenario.resolution);
|
|
15
|
+
url.searchParams.set("from", String(from));
|
|
16
|
+
url.searchParams.set("to", String(to));
|
|
17
|
+
url.searchParams.set("token", FINNHUB_API_KEY || "");
|
|
18
|
+
return url.toString();
|
|
19
|
+
};
|
|
20
|
+
const scenarios = [
|
|
21
|
+
{
|
|
22
|
+
label: "daily-365",
|
|
23
|
+
symbol: "AAPL",
|
|
24
|
+
resolution: "D",
|
|
25
|
+
lookbackDays: 365
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
label: "daily-180",
|
|
29
|
+
symbol: "AAPL",
|
|
30
|
+
resolution: "D",
|
|
31
|
+
lookbackDays: 180
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
label: "daily-90",
|
|
35
|
+
symbol: "AAPL",
|
|
36
|
+
resolution: "D",
|
|
37
|
+
lookbackDays: 90
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
label: "hourly-180",
|
|
41
|
+
symbol: "AAPL",
|
|
42
|
+
resolution: "60",
|
|
43
|
+
lookbackDays: 180
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
label: "hourly-90",
|
|
47
|
+
symbol: "AAPL",
|
|
48
|
+
resolution: "60",
|
|
49
|
+
lookbackDays: 90
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
label: "hourly-30",
|
|
53
|
+
symbol: "AAPL",
|
|
54
|
+
resolution: "60",
|
|
55
|
+
lookbackDays: 30
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
label: "15m-30",
|
|
59
|
+
symbol: "AAPL",
|
|
60
|
+
resolution: "15",
|
|
61
|
+
lookbackDays: 30
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
label: "1m-7",
|
|
65
|
+
symbol: "AAPL",
|
|
66
|
+
resolution: "1",
|
|
67
|
+
lookbackDays: 7
|
|
68
|
+
}
|
|
69
|
+
];
|
|
70
|
+
describeLive("Finnhub candle access (live)", ()=>{
|
|
71
|
+
(0, external_vitest_namespaceObject.it)("does not return 403 for supported ranges", async ()=>{
|
|
72
|
+
const failures = [];
|
|
73
|
+
for (const scenario of scenarios){
|
|
74
|
+
const url = buildCandleUrl(scenario);
|
|
75
|
+
const response = await fetch(url, {
|
|
76
|
+
headers: {
|
|
77
|
+
"User-Agent": "wingman-finnhub-test"
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
const body = await response.text();
|
|
81
|
+
console.info(`Finnhub candle ${scenario.label} -> ${response.status}`);
|
|
82
|
+
if (403 === response.status) {
|
|
83
|
+
failures.push(`403 for ${scenario.label} (${scenario.resolution}, ${scenario.lookbackDays}d): ${body.slice(0, 200)}`);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (429 === response.status) {
|
|
87
|
+
console.warn(`Rate limited for ${scenario.label}; skipping assert.`);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
(0, external_vitest_namespaceObject.expect)(response.status).toBe(200);
|
|
91
|
+
}
|
|
92
|
+
if (failures.length > 0) throw new Error(failures.join("\n"));
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
96
|
+
Object.defineProperty(exports, '__esModule', {
|
|
97
|
+
value: true
|
|
98
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|