@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,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
createRoutineStore: ()=>createRoutineStore,
|
|
28
|
+
handleRoutinesApi: ()=>handleRoutinesApi
|
|
29
|
+
});
|
|
30
|
+
const agentLoader_cjs_namespaceObject = require("../../agent/config/agentLoader.cjs");
|
|
31
|
+
const external_node_crypto_namespaceObject = require("node:crypto");
|
|
32
|
+
const external_node_fs_namespaceObject = require("node:fs");
|
|
33
|
+
const external_node_path_namespaceObject = require("node:path");
|
|
34
|
+
const CRON_FIELD_PATTERN = /^[0-9*/,\-]+$/;
|
|
35
|
+
const isValidCron = (cron)=>{
|
|
36
|
+
const parts = cron.trim().split(/\s+/);
|
|
37
|
+
if (5 !== parts.length) return false;
|
|
38
|
+
return parts.every((part)=>CRON_FIELD_PATTERN.test(part));
|
|
39
|
+
};
|
|
40
|
+
const createRoutineStore = (resolveConfigDirPath)=>{
|
|
41
|
+
const resolvePath = ()=>{
|
|
42
|
+
const configDir = resolveConfigDirPath();
|
|
43
|
+
(0, external_node_fs_namespaceObject.mkdirSync)(configDir, {
|
|
44
|
+
recursive: true
|
|
45
|
+
});
|
|
46
|
+
return (0, external_node_path_namespaceObject.join)(configDir, "routines.json");
|
|
47
|
+
};
|
|
48
|
+
return {
|
|
49
|
+
load: ()=>{
|
|
50
|
+
const path = resolvePath();
|
|
51
|
+
if (!(0, external_node_fs_namespaceObject.existsSync)(path)) return [];
|
|
52
|
+
try {
|
|
53
|
+
const raw = (0, external_node_fs_namespaceObject.readFileSync)(path, "utf-8");
|
|
54
|
+
const parsed = JSON.parse(raw);
|
|
55
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
56
|
+
} catch {
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
save: (routines)=>{
|
|
61
|
+
const path = resolvePath();
|
|
62
|
+
(0, external_node_fs_namespaceObject.writeFileSync)(path, JSON.stringify(routines, null, 2));
|
|
63
|
+
},
|
|
64
|
+
generateId: ()=>`routine-${(0, external_node_crypto_namespaceObject.randomUUID)()}`
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
const agentExists = (ctx, agentId)=>{
|
|
68
|
+
const loader = new agentLoader_cjs_namespaceObject.AgentLoader(ctx.configDir, ctx.workspace, ctx.getWingmanConfig());
|
|
69
|
+
const configs = loader.loadAllAgentConfigs();
|
|
70
|
+
return Boolean(configs.find((config)=>config.name === agentId));
|
|
71
|
+
};
|
|
72
|
+
const sessionExists = async (ctx, agentId, sessionId)=>{
|
|
73
|
+
const manager = await ctx.getSessionManager(agentId);
|
|
74
|
+
return Boolean(manager.getSession(sessionId));
|
|
75
|
+
};
|
|
76
|
+
const handleRoutinesApi = async (ctx, store, req, url)=>{
|
|
77
|
+
if ("/api/routines" === url.pathname) {
|
|
78
|
+
if ("GET" === req.method) {
|
|
79
|
+
const routines = store.load();
|
|
80
|
+
return new Response(JSON.stringify(routines, null, 2), {
|
|
81
|
+
headers: {
|
|
82
|
+
"Content-Type": "application/json"
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
if ("POST" === req.method) {
|
|
87
|
+
let body;
|
|
88
|
+
try {
|
|
89
|
+
body = await req.json();
|
|
90
|
+
} catch {
|
|
91
|
+
return new Response("Invalid JSON body", {
|
|
92
|
+
status: 400
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
const name = body?.name?.trim();
|
|
96
|
+
const agentId = body?.agentId?.trim();
|
|
97
|
+
const cron = body?.cron?.trim();
|
|
98
|
+
const prompt = body?.prompt?.trim();
|
|
99
|
+
if (!name) return new Response("Routine name required", {
|
|
100
|
+
status: 400
|
|
101
|
+
});
|
|
102
|
+
if (!agentId) return new Response("agentId required", {
|
|
103
|
+
status: 400
|
|
104
|
+
});
|
|
105
|
+
if (!cron) return new Response("cron required", {
|
|
106
|
+
status: 400
|
|
107
|
+
});
|
|
108
|
+
if (!prompt) return new Response("prompt required", {
|
|
109
|
+
status: 400
|
|
110
|
+
});
|
|
111
|
+
if (!isValidCron(cron)) return new Response("Invalid cron expression", {
|
|
112
|
+
status: 400
|
|
113
|
+
});
|
|
114
|
+
if (!agentExists(ctx, agentId)) return new Response("Invalid agentId", {
|
|
115
|
+
status: 400
|
|
116
|
+
});
|
|
117
|
+
const sessionId = body?.sessionId?.trim();
|
|
118
|
+
if (sessionId) {
|
|
119
|
+
const exists = await sessionExists(ctx, agentId, sessionId);
|
|
120
|
+
if (!exists) return new Response("Invalid sessionId", {
|
|
121
|
+
status: 400
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
const routines = store.load();
|
|
125
|
+
const providedId = body?.id?.trim();
|
|
126
|
+
if (providedId && !/^[a-zA-Z0-9_-]+$/.test(providedId)) return new Response("Invalid routine id", {
|
|
127
|
+
status: 400
|
|
128
|
+
});
|
|
129
|
+
const id = providedId || store.generateId();
|
|
130
|
+
if (routines.some((routine)=>routine.id === id)) return new Response("Routine already exists", {
|
|
131
|
+
status: 409
|
|
132
|
+
});
|
|
133
|
+
const routine = {
|
|
134
|
+
id,
|
|
135
|
+
name,
|
|
136
|
+
agentId,
|
|
137
|
+
cron,
|
|
138
|
+
prompt,
|
|
139
|
+
sessionId: sessionId || void 0,
|
|
140
|
+
createdAt: Date.now(),
|
|
141
|
+
enabled: body?.enabled ?? true
|
|
142
|
+
};
|
|
143
|
+
routines.unshift(routine);
|
|
144
|
+
store.save(routines);
|
|
145
|
+
return new Response(JSON.stringify(routine, null, 2), {
|
|
146
|
+
headers: {
|
|
147
|
+
"Content-Type": "application/json"
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return new Response("Method Not Allowed", {
|
|
152
|
+
status: 405
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
const routineMatch = url.pathname.match(/^\/api\/routines\/([^/]+)$/);
|
|
156
|
+
if (!routineMatch) return null;
|
|
157
|
+
const routineId = decodeURIComponent(routineMatch[1]);
|
|
158
|
+
const routines = store.load();
|
|
159
|
+
const routine = routines.find((item)=>item.id === routineId);
|
|
160
|
+
if ("GET" === req.method) {
|
|
161
|
+
if (!routine) return new Response("Routine not found", {
|
|
162
|
+
status: 404
|
|
163
|
+
});
|
|
164
|
+
return new Response(JSON.stringify(routine, null, 2), {
|
|
165
|
+
headers: {
|
|
166
|
+
"Content-Type": "application/json"
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
if ("DELETE" === req.method) {
|
|
171
|
+
if (!routine) return new Response("Routine not found", {
|
|
172
|
+
status: 404
|
|
173
|
+
});
|
|
174
|
+
const nextRoutines = routines.filter((item)=>item.id !== routineId);
|
|
175
|
+
store.save(nextRoutines);
|
|
176
|
+
return new Response(JSON.stringify({
|
|
177
|
+
ok: true
|
|
178
|
+
}, null, 2), {
|
|
179
|
+
headers: {
|
|
180
|
+
"Content-Type": "application/json"
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return new Response("Method Not Allowed", {
|
|
185
|
+
status: 405
|
|
186
|
+
});
|
|
187
|
+
};
|
|
188
|
+
exports.createRoutineStore = __webpack_exports__.createRoutineStore;
|
|
189
|
+
exports.handleRoutinesApi = __webpack_exports__.handleRoutinesApi;
|
|
190
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
191
|
+
"createRoutineStore",
|
|
192
|
+
"handleRoutinesApi"
|
|
193
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
194
|
+
Object.defineProperty(exports, '__esModule', {
|
|
195
|
+
value: true
|
|
196
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { GatewayHttpContext } from "./types.js";
|
|
2
|
+
export type RoutineConfig = {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
agentId: string;
|
|
6
|
+
cron: string;
|
|
7
|
+
prompt: string;
|
|
8
|
+
sessionId?: string;
|
|
9
|
+
createdAt: number;
|
|
10
|
+
lastRunAt?: number;
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
};
|
|
13
|
+
type RoutineStore = {
|
|
14
|
+
load: () => RoutineConfig[];
|
|
15
|
+
save: (routines: RoutineConfig[]) => void;
|
|
16
|
+
generateId: () => string;
|
|
17
|
+
};
|
|
18
|
+
export declare const createRoutineStore: (resolveConfigDirPath: () => string) => RoutineStore;
|
|
19
|
+
export declare const handleRoutinesApi: (ctx: GatewayHttpContext, store: RoutineStore, req: Request, url: URL) => Promise<Response | null>;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { AgentLoader } from "../../agent/config/agentLoader.js";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
const CRON_FIELD_PATTERN = /^[0-9*/,\-]+$/;
|
|
6
|
+
const isValidCron = (cron)=>{
|
|
7
|
+
const parts = cron.trim().split(/\s+/);
|
|
8
|
+
if (5 !== parts.length) return false;
|
|
9
|
+
return parts.every((part)=>CRON_FIELD_PATTERN.test(part));
|
|
10
|
+
};
|
|
11
|
+
const createRoutineStore = (resolveConfigDirPath)=>{
|
|
12
|
+
const resolvePath = ()=>{
|
|
13
|
+
const configDir = resolveConfigDirPath();
|
|
14
|
+
mkdirSync(configDir, {
|
|
15
|
+
recursive: true
|
|
16
|
+
});
|
|
17
|
+
return join(configDir, "routines.json");
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
load: ()=>{
|
|
21
|
+
const path = resolvePath();
|
|
22
|
+
if (!existsSync(path)) return [];
|
|
23
|
+
try {
|
|
24
|
+
const raw = readFileSync(path, "utf-8");
|
|
25
|
+
const parsed = JSON.parse(raw);
|
|
26
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
27
|
+
} catch {
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
save: (routines)=>{
|
|
32
|
+
const path = resolvePath();
|
|
33
|
+
writeFileSync(path, JSON.stringify(routines, null, 2));
|
|
34
|
+
},
|
|
35
|
+
generateId: ()=>`routine-${randomUUID()}`
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
const agentExists = (ctx, agentId)=>{
|
|
39
|
+
const loader = new AgentLoader(ctx.configDir, ctx.workspace, ctx.getWingmanConfig());
|
|
40
|
+
const configs = loader.loadAllAgentConfigs();
|
|
41
|
+
return Boolean(configs.find((config)=>config.name === agentId));
|
|
42
|
+
};
|
|
43
|
+
const sessionExists = async (ctx, agentId, sessionId)=>{
|
|
44
|
+
const manager = await ctx.getSessionManager(agentId);
|
|
45
|
+
return Boolean(manager.getSession(sessionId));
|
|
46
|
+
};
|
|
47
|
+
const handleRoutinesApi = async (ctx, store, req, url)=>{
|
|
48
|
+
if ("/api/routines" === url.pathname) {
|
|
49
|
+
if ("GET" === req.method) {
|
|
50
|
+
const routines = store.load();
|
|
51
|
+
return new Response(JSON.stringify(routines, null, 2), {
|
|
52
|
+
headers: {
|
|
53
|
+
"Content-Type": "application/json"
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
if ("POST" === req.method) {
|
|
58
|
+
let body;
|
|
59
|
+
try {
|
|
60
|
+
body = await req.json();
|
|
61
|
+
} catch {
|
|
62
|
+
return new Response("Invalid JSON body", {
|
|
63
|
+
status: 400
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
const name = body?.name?.trim();
|
|
67
|
+
const agentId = body?.agentId?.trim();
|
|
68
|
+
const cron = body?.cron?.trim();
|
|
69
|
+
const prompt = body?.prompt?.trim();
|
|
70
|
+
if (!name) return new Response("Routine name required", {
|
|
71
|
+
status: 400
|
|
72
|
+
});
|
|
73
|
+
if (!agentId) return new Response("agentId required", {
|
|
74
|
+
status: 400
|
|
75
|
+
});
|
|
76
|
+
if (!cron) return new Response("cron required", {
|
|
77
|
+
status: 400
|
|
78
|
+
});
|
|
79
|
+
if (!prompt) return new Response("prompt required", {
|
|
80
|
+
status: 400
|
|
81
|
+
});
|
|
82
|
+
if (!isValidCron(cron)) return new Response("Invalid cron expression", {
|
|
83
|
+
status: 400
|
|
84
|
+
});
|
|
85
|
+
if (!agentExists(ctx, agentId)) return new Response("Invalid agentId", {
|
|
86
|
+
status: 400
|
|
87
|
+
});
|
|
88
|
+
const sessionId = body?.sessionId?.trim();
|
|
89
|
+
if (sessionId) {
|
|
90
|
+
const exists = await sessionExists(ctx, agentId, sessionId);
|
|
91
|
+
if (!exists) return new Response("Invalid sessionId", {
|
|
92
|
+
status: 400
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
const routines = store.load();
|
|
96
|
+
const providedId = body?.id?.trim();
|
|
97
|
+
if (providedId && !/^[a-zA-Z0-9_-]+$/.test(providedId)) return new Response("Invalid routine id", {
|
|
98
|
+
status: 400
|
|
99
|
+
});
|
|
100
|
+
const id = providedId || store.generateId();
|
|
101
|
+
if (routines.some((routine)=>routine.id === id)) return new Response("Routine already exists", {
|
|
102
|
+
status: 409
|
|
103
|
+
});
|
|
104
|
+
const routine = {
|
|
105
|
+
id,
|
|
106
|
+
name,
|
|
107
|
+
agentId,
|
|
108
|
+
cron,
|
|
109
|
+
prompt,
|
|
110
|
+
sessionId: sessionId || void 0,
|
|
111
|
+
createdAt: Date.now(),
|
|
112
|
+
enabled: body?.enabled ?? true
|
|
113
|
+
};
|
|
114
|
+
routines.unshift(routine);
|
|
115
|
+
store.save(routines);
|
|
116
|
+
return new Response(JSON.stringify(routine, null, 2), {
|
|
117
|
+
headers: {
|
|
118
|
+
"Content-Type": "application/json"
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
return new Response("Method Not Allowed", {
|
|
123
|
+
status: 405
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
const routineMatch = url.pathname.match(/^\/api\/routines\/([^/]+)$/);
|
|
127
|
+
if (!routineMatch) return null;
|
|
128
|
+
const routineId = decodeURIComponent(routineMatch[1]);
|
|
129
|
+
const routines = store.load();
|
|
130
|
+
const routine = routines.find((item)=>item.id === routineId);
|
|
131
|
+
if ("GET" === req.method) {
|
|
132
|
+
if (!routine) return new Response("Routine not found", {
|
|
133
|
+
status: 404
|
|
134
|
+
});
|
|
135
|
+
return new Response(JSON.stringify(routine, null, 2), {
|
|
136
|
+
headers: {
|
|
137
|
+
"Content-Type": "application/json"
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
if ("DELETE" === req.method) {
|
|
142
|
+
if (!routine) return new Response("Routine not found", {
|
|
143
|
+
status: 404
|
|
144
|
+
});
|
|
145
|
+
const nextRoutines = routines.filter((item)=>item.id !== routineId);
|
|
146
|
+
store.save(nextRoutines);
|
|
147
|
+
return new Response(JSON.stringify({
|
|
148
|
+
ok: true
|
|
149
|
+
}, null, 2), {
|
|
150
|
+
headers: {
|
|
151
|
+
"Content-Type": "application/json"
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return new Response("Method Not Allowed", {
|
|
156
|
+
status: 405
|
|
157
|
+
});
|
|
158
|
+
};
|
|
159
|
+
export { createRoutineStore, handleRoutinesApi };
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: definition[key]
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
})();
|
|
11
|
+
(()=>{
|
|
12
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
+
})();
|
|
14
|
+
(()=>{
|
|
15
|
+
__webpack_require__.r = (exports1)=>{
|
|
16
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
+
value: 'Module'
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
+
value: true
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
var __webpack_exports__ = {};
|
|
25
|
+
__webpack_require__.r(__webpack_exports__);
|
|
26
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
+
handleSessionsApi: ()=>handleSessionsApi
|
|
28
|
+
});
|
|
29
|
+
const external_node_crypto_namespaceObject = require("node:crypto");
|
|
30
|
+
const external_node_fs_namespaceObject = require("node:fs");
|
|
31
|
+
const handleSessionsApi = async (ctx, req, url)=>{
|
|
32
|
+
if ("/api/sessions" === url.pathname) {
|
|
33
|
+
if ("GET" === req.method) {
|
|
34
|
+
const limit = Number(url.searchParams.get("limit") || "100");
|
|
35
|
+
const status = url.searchParams.get("status") || "active";
|
|
36
|
+
const agentId = url.searchParams.get("agentId") || void 0;
|
|
37
|
+
const agents = agentId ? [
|
|
38
|
+
agentId
|
|
39
|
+
] : ctx.getWingmanConfig().agents?.list?.map((agent)=>agent.id) || [
|
|
40
|
+
"main"
|
|
41
|
+
];
|
|
42
|
+
const sessions = [];
|
|
43
|
+
for (const agent of agents){
|
|
44
|
+
const manager = await ctx.getSessionManager(agent);
|
|
45
|
+
const list = manager.listSessions({
|
|
46
|
+
status,
|
|
47
|
+
limit,
|
|
48
|
+
agentName: agent
|
|
49
|
+
});
|
|
50
|
+
for (const session of list)sessions.push({
|
|
51
|
+
id: session.id,
|
|
52
|
+
name: session.name,
|
|
53
|
+
agentId: session.agentName,
|
|
54
|
+
createdAt: session.createdAt.getTime(),
|
|
55
|
+
updatedAt: session.updatedAt.getTime(),
|
|
56
|
+
messageCount: session.messageCount,
|
|
57
|
+
lastMessagePreview: session.lastMessagePreview,
|
|
58
|
+
workdir: session.metadata?.workdir ?? null
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
const sorted = sessions.sort((a, b)=>{
|
|
62
|
+
const aUpdated = "number" == typeof a.updatedAt ? a.updatedAt : 0;
|
|
63
|
+
const bUpdated = "number" == typeof b.updatedAt ? b.updatedAt : 0;
|
|
64
|
+
return bUpdated - aUpdated;
|
|
65
|
+
});
|
|
66
|
+
return new Response(JSON.stringify(sorted.slice(0, limit), null, 2), {
|
|
67
|
+
headers: {
|
|
68
|
+
"Content-Type": "application/json"
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
if ("POST" === req.method) {
|
|
73
|
+
const body = await req.json();
|
|
74
|
+
const selectedAgent = ctx.router.selectAgent(body.agentId);
|
|
75
|
+
if (!selectedAgent) return new Response("Invalid agent", {
|
|
76
|
+
status: 400
|
|
77
|
+
});
|
|
78
|
+
const sessionId = body.sessionId || `agent:${selectedAgent}:webui:thread:${(0, external_node_crypto_namespaceObject.randomUUID)()}`;
|
|
79
|
+
const manager = await ctx.getSessionManager(selectedAgent);
|
|
80
|
+
const session = manager.getOrCreateSession(sessionId, selectedAgent, body.name);
|
|
81
|
+
return new Response(JSON.stringify({
|
|
82
|
+
id: session.id,
|
|
83
|
+
name: session.name,
|
|
84
|
+
agentId: session.agentName,
|
|
85
|
+
createdAt: session.createdAt.getTime(),
|
|
86
|
+
updatedAt: session.updatedAt.getTime(),
|
|
87
|
+
messageCount: session.messageCount,
|
|
88
|
+
lastMessagePreview: session.lastMessagePreview,
|
|
89
|
+
workdir: session.metadata?.workdir ?? null
|
|
90
|
+
}, null, 2), {
|
|
91
|
+
headers: {
|
|
92
|
+
"Content-Type": "application/json"
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return new Response("Method Not Allowed", {
|
|
97
|
+
status: 405
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
const sessionMessagesMatch = url.pathname.match(/^\/api\/sessions\/(.+)\/messages$/);
|
|
101
|
+
if (sessionMessagesMatch) {
|
|
102
|
+
const sessionId = decodeURIComponent(sessionMessagesMatch[1]);
|
|
103
|
+
const agentId = url.searchParams.get("agentId");
|
|
104
|
+
if (!agentId) return new Response("agentId required", {
|
|
105
|
+
status: 400
|
|
106
|
+
});
|
|
107
|
+
const manager = await ctx.getSessionManager(agentId);
|
|
108
|
+
if ("GET" === req.method) {
|
|
109
|
+
const messages = await manager.listMessages(sessionId);
|
|
110
|
+
return new Response(JSON.stringify(messages, null, 2), {
|
|
111
|
+
headers: {
|
|
112
|
+
"Content-Type": "application/json"
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
if ("DELETE" === req.method) {
|
|
117
|
+
const session = manager.getSession(sessionId);
|
|
118
|
+
if (!session) return new Response("session not found", {
|
|
119
|
+
status: 404
|
|
120
|
+
});
|
|
121
|
+
manager.clearSessionMessages(sessionId);
|
|
122
|
+
const updated = manager.getSession(sessionId);
|
|
123
|
+
return new Response(JSON.stringify({
|
|
124
|
+
id: sessionId,
|
|
125
|
+
messageCount: updated?.messageCount ?? 0,
|
|
126
|
+
lastMessagePreview: updated?.lastMessagePreview ?? null
|
|
127
|
+
}, null, 2), {
|
|
128
|
+
headers: {
|
|
129
|
+
"Content-Type": "application/json"
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const sessionWorkdirMatch = url.pathname.match(/^\/api\/sessions\/(.+)\/workdir$/);
|
|
135
|
+
if (sessionWorkdirMatch && "POST" === req.method) {
|
|
136
|
+
const sessionId = decodeURIComponent(sessionWorkdirMatch[1]);
|
|
137
|
+
const agentId = url.searchParams.get("agentId");
|
|
138
|
+
if (!agentId) return new Response("agentId required", {
|
|
139
|
+
status: 400
|
|
140
|
+
});
|
|
141
|
+
const body = await req.json();
|
|
142
|
+
const manager = await ctx.getSessionManager(agentId);
|
|
143
|
+
const session = manager.getSession(sessionId);
|
|
144
|
+
if (!session) return new Response("session not found", {
|
|
145
|
+
status: 404
|
|
146
|
+
});
|
|
147
|
+
const rawWorkdir = body?.workdir;
|
|
148
|
+
if (!rawWorkdir) {
|
|
149
|
+
manager.updateSessionMetadata(sessionId, {
|
|
150
|
+
workdir: null
|
|
151
|
+
});
|
|
152
|
+
return new Response(JSON.stringify({
|
|
153
|
+
id: session.id,
|
|
154
|
+
workdir: null
|
|
155
|
+
}, null, 2), {
|
|
156
|
+
headers: {
|
|
157
|
+
"Content-Type": "application/json"
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
const resolved = ctx.resolveFsPath(rawWorkdir);
|
|
162
|
+
const roots = ctx.resolveFsRoots();
|
|
163
|
+
if (!ctx.isPathWithinRoots(resolved, roots)) return new Response("workdir not allowed", {
|
|
164
|
+
status: 403
|
|
165
|
+
});
|
|
166
|
+
if (!(0, external_node_fs_namespaceObject.existsSync)(resolved) || !(0, external_node_fs_namespaceObject.statSync)(resolved).isDirectory()) return new Response("workdir not found", {
|
|
167
|
+
status: 404
|
|
168
|
+
});
|
|
169
|
+
manager.updateSessionMetadata(sessionId, {
|
|
170
|
+
workdir: resolved
|
|
171
|
+
});
|
|
172
|
+
return new Response(JSON.stringify({
|
|
173
|
+
id: session.id,
|
|
174
|
+
workdir: resolved
|
|
175
|
+
}, null, 2), {
|
|
176
|
+
headers: {
|
|
177
|
+
"Content-Type": "application/json"
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
const sessionDeleteMatch = url.pathname.match(/^\/api\/sessions\/(.+)$/);
|
|
182
|
+
if (sessionDeleteMatch && "PUT" === req.method) {
|
|
183
|
+
const sessionId = decodeURIComponent(sessionDeleteMatch[1]);
|
|
184
|
+
const agentId = url.searchParams.get("agentId");
|
|
185
|
+
if (!agentId) return new Response("agentId required", {
|
|
186
|
+
status: 400
|
|
187
|
+
});
|
|
188
|
+
const body = await req.json();
|
|
189
|
+
const name = body?.name?.trim();
|
|
190
|
+
if (!name) return new Response("name required", {
|
|
191
|
+
status: 400
|
|
192
|
+
});
|
|
193
|
+
const manager = await ctx.getSessionManager(agentId);
|
|
194
|
+
const session = manager.getSession(sessionId);
|
|
195
|
+
if (!session) return new Response("session not found", {
|
|
196
|
+
status: 404
|
|
197
|
+
});
|
|
198
|
+
manager.updateSession(sessionId, {
|
|
199
|
+
name
|
|
200
|
+
});
|
|
201
|
+
const updated = manager.getSession(sessionId);
|
|
202
|
+
return new Response(JSON.stringify({
|
|
203
|
+
id: updated?.id || sessionId,
|
|
204
|
+
name: updated?.name || name,
|
|
205
|
+
agentId: updated?.agentName || agentId,
|
|
206
|
+
createdAt: updated?.createdAt.getTime() || session.createdAt.getTime(),
|
|
207
|
+
updatedAt: updated?.updatedAt.getTime() || Date.now(),
|
|
208
|
+
messageCount: updated?.messageCount ?? session.messageCount,
|
|
209
|
+
lastMessagePreview: updated?.lastMessagePreview ?? session.lastMessagePreview,
|
|
210
|
+
workdir: updated?.metadata?.workdir ?? session.metadata?.workdir ?? null
|
|
211
|
+
}, null, 2), {
|
|
212
|
+
headers: {
|
|
213
|
+
"Content-Type": "application/json"
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
if (sessionDeleteMatch && "DELETE" === req.method) {
|
|
218
|
+
const sessionId = decodeURIComponent(sessionDeleteMatch[1]);
|
|
219
|
+
const agentId = url.searchParams.get("agentId");
|
|
220
|
+
if (!agentId) return new Response("agentId required", {
|
|
221
|
+
status: 400
|
|
222
|
+
});
|
|
223
|
+
const manager = await ctx.getSessionManager(agentId);
|
|
224
|
+
manager.deleteSession(sessionId);
|
|
225
|
+
return new Response(JSON.stringify({
|
|
226
|
+
ok: true
|
|
227
|
+
}), {
|
|
228
|
+
headers: {
|
|
229
|
+
"Content-Type": "application/json"
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
return null;
|
|
234
|
+
};
|
|
235
|
+
exports.handleSessionsApi = __webpack_exports__.handleSessionsApi;
|
|
236
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
237
|
+
"handleSessionsApi"
|
|
238
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
239
|
+
Object.defineProperty(exports, '__esModule', {
|
|
240
|
+
value: true
|
|
241
|
+
});
|