@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,535 @@
|
|
|
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
|
+
resolveMessageRole: ()=>resolveMessageRole,
|
|
28
|
+
SessionManager: ()=>SessionManager,
|
|
29
|
+
extractImageUrl: ()=>extractImageUrl,
|
|
30
|
+
extractAttachments: ()=>extractAttachments,
|
|
31
|
+
extractImageAttachments: ()=>extractImageAttachments,
|
|
32
|
+
extractMessagesFromState: ()=>extractMessagesFromState
|
|
33
|
+
});
|
|
34
|
+
const langgraph_checkpoint_sqlite_namespaceObject = require("@langchain/langgraph-checkpoint-sqlite");
|
|
35
|
+
const external_deepagents_namespaceObject = require("deepagents");
|
|
36
|
+
const external_uuid_namespaceObject = require("uuid");
|
|
37
|
+
function _define_property(obj, key, value) {
|
|
38
|
+
if (key in obj) Object.defineProperty(obj, key, {
|
|
39
|
+
value: value,
|
|
40
|
+
enumerable: true,
|
|
41
|
+
configurable: true,
|
|
42
|
+
writable: true
|
|
43
|
+
});
|
|
44
|
+
else obj[key] = value;
|
|
45
|
+
return obj;
|
|
46
|
+
}
|
|
47
|
+
const isBunRuntime = void 0 !== globalThis.Bun;
|
|
48
|
+
class SessionManager {
|
|
49
|
+
async initialize() {
|
|
50
|
+
if (!isBunRuntime) throw new Error("SessionManager requires Bun runtime (bun:sqlite not available)");
|
|
51
|
+
const { BunSqliteAdapter } = await import("./database/bunSqliteAdapter.cjs");
|
|
52
|
+
const adapter = new BunSqliteAdapter(this.dbPath);
|
|
53
|
+
this.checkpointer = new langgraph_checkpoint_sqlite_namespaceObject.SqliteSaver(adapter);
|
|
54
|
+
await this.checkpointer.setup();
|
|
55
|
+
this.db = adapter.db;
|
|
56
|
+
this.db.run(`
|
|
57
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
58
|
+
id TEXT PRIMARY KEY,
|
|
59
|
+
name TEXT NOT NULL,
|
|
60
|
+
agent_name TEXT NOT NULL,
|
|
61
|
+
created_at INTEGER NOT NULL,
|
|
62
|
+
updated_at INTEGER NOT NULL,
|
|
63
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
64
|
+
message_count INTEGER DEFAULT 0,
|
|
65
|
+
last_message_preview TEXT,
|
|
66
|
+
metadata TEXT
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_updated ON sessions(updated_at DESC);
|
|
70
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_agent ON sessions(agent_name);
|
|
71
|
+
`);
|
|
72
|
+
}
|
|
73
|
+
createSession(agentName, name) {
|
|
74
|
+
if (!this.db) throw new Error("SessionManager not initialized");
|
|
75
|
+
const id = (0, external_uuid_namespaceObject.v4)();
|
|
76
|
+
const now = Date.now();
|
|
77
|
+
const sessionName = name || `Session ${new Date().toLocaleString()}`;
|
|
78
|
+
const stmt = this.db.prepare(`
|
|
79
|
+
INSERT INTO sessions (id, name, agent_name, created_at, updated_at, status, message_count)
|
|
80
|
+
VALUES (?, ?, ?, ?, ?, 'active', 0)
|
|
81
|
+
`);
|
|
82
|
+
stmt.run(id, sessionName, agentName, now, now);
|
|
83
|
+
return {
|
|
84
|
+
id,
|
|
85
|
+
name: sessionName,
|
|
86
|
+
agentName,
|
|
87
|
+
createdAt: new Date(now),
|
|
88
|
+
updatedAt: new Date(now),
|
|
89
|
+
status: "active",
|
|
90
|
+
messageCount: 0
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
getOrCreateSession(sessionId, agentName, name) {
|
|
94
|
+
if (!this.db) throw new Error("SessionManager not initialized");
|
|
95
|
+
const existing = this.getSession(sessionId);
|
|
96
|
+
if (existing) return existing;
|
|
97
|
+
const now = Date.now();
|
|
98
|
+
const sessionName = name || `Session ${new Date().toLocaleString()}`;
|
|
99
|
+
const stmt = this.db.prepare(`
|
|
100
|
+
INSERT INTO sessions (id, name, agent_name, created_at, updated_at, status, message_count)
|
|
101
|
+
VALUES (?, ?, ?, ?, ?, 'active', 0)
|
|
102
|
+
`);
|
|
103
|
+
stmt.run(sessionId, sessionName, agentName, now, now);
|
|
104
|
+
return {
|
|
105
|
+
id: sessionId,
|
|
106
|
+
name: sessionName,
|
|
107
|
+
agentName,
|
|
108
|
+
createdAt: new Date(now),
|
|
109
|
+
updatedAt: new Date(now),
|
|
110
|
+
status: "active",
|
|
111
|
+
messageCount: 0
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
getSession(sessionId) {
|
|
115
|
+
if (!this.db) throw new Error("SessionManager not initialized");
|
|
116
|
+
const stmt = this.db.prepare(`
|
|
117
|
+
SELECT * FROM sessions WHERE id = ?
|
|
118
|
+
`);
|
|
119
|
+
const row = stmt.get(sessionId);
|
|
120
|
+
if (!row) return null;
|
|
121
|
+
return this.rowToSession(row);
|
|
122
|
+
}
|
|
123
|
+
getLastSession() {
|
|
124
|
+
if (!this.db) throw new Error("SessionManager not initialized");
|
|
125
|
+
const stmt = this.db.prepare(`
|
|
126
|
+
SELECT * FROM sessions
|
|
127
|
+
WHERE status = 'active'
|
|
128
|
+
ORDER BY updated_at DESC
|
|
129
|
+
LIMIT 1
|
|
130
|
+
`);
|
|
131
|
+
const row = stmt.get();
|
|
132
|
+
if (!row) return null;
|
|
133
|
+
return this.rowToSession(row);
|
|
134
|
+
}
|
|
135
|
+
listSessions(options = {}) {
|
|
136
|
+
if (!this.db) throw new Error("SessionManager not initialized");
|
|
137
|
+
const { status = "active", limit = 10, offset = 0, agentName } = options;
|
|
138
|
+
let query = `
|
|
139
|
+
SELECT * FROM sessions
|
|
140
|
+
WHERE status = ?
|
|
141
|
+
`;
|
|
142
|
+
const params = [
|
|
143
|
+
status
|
|
144
|
+
];
|
|
145
|
+
if (agentName) {
|
|
146
|
+
query += " AND agent_name = ?";
|
|
147
|
+
params.push(agentName);
|
|
148
|
+
}
|
|
149
|
+
query += " ORDER BY updated_at DESC LIMIT ? OFFSET ?";
|
|
150
|
+
params.push(limit, offset);
|
|
151
|
+
const stmt = this.db.prepare(query);
|
|
152
|
+
const rows = stmt.all(...params);
|
|
153
|
+
return rows.map(this.rowToSession);
|
|
154
|
+
}
|
|
155
|
+
updateSession(sessionId, updates) {
|
|
156
|
+
if (!this.db) throw new Error("SessionManager not initialized");
|
|
157
|
+
const fields = [];
|
|
158
|
+
const values = [];
|
|
159
|
+
if (void 0 !== updates.name) {
|
|
160
|
+
fields.push("name = ?");
|
|
161
|
+
values.push(updates.name);
|
|
162
|
+
}
|
|
163
|
+
if (void 0 !== updates.status) {
|
|
164
|
+
fields.push("status = ?");
|
|
165
|
+
values.push(updates.status);
|
|
166
|
+
}
|
|
167
|
+
if (void 0 !== updates.messageCount) {
|
|
168
|
+
fields.push("message_count = ?");
|
|
169
|
+
values.push(updates.messageCount);
|
|
170
|
+
}
|
|
171
|
+
if (void 0 !== updates.lastMessagePreview) {
|
|
172
|
+
fields.push("last_message_preview = ?");
|
|
173
|
+
values.push(updates.lastMessagePreview);
|
|
174
|
+
}
|
|
175
|
+
fields.push("updated_at = ?");
|
|
176
|
+
values.push(Date.now());
|
|
177
|
+
values.push(sessionId);
|
|
178
|
+
const stmt = this.db.prepare(`
|
|
179
|
+
UPDATE sessions
|
|
180
|
+
SET ${fields.join(", ")}
|
|
181
|
+
WHERE id = ?
|
|
182
|
+
`);
|
|
183
|
+
stmt.run(...values);
|
|
184
|
+
}
|
|
185
|
+
updateSessionMetadata(sessionId, metadata) {
|
|
186
|
+
if (!this.db) throw new Error("SessionManager not initialized");
|
|
187
|
+
const existing = this.getSession(sessionId);
|
|
188
|
+
const nextMetadata = {
|
|
189
|
+
...existing?.metadata || {},
|
|
190
|
+
...metadata
|
|
191
|
+
};
|
|
192
|
+
const stmt = this.db.prepare(`
|
|
193
|
+
UPDATE sessions
|
|
194
|
+
SET metadata = ?, updated_at = ?
|
|
195
|
+
WHERE id = ?
|
|
196
|
+
`);
|
|
197
|
+
stmt.run(JSON.stringify(nextMetadata), Date.now(), sessionId);
|
|
198
|
+
}
|
|
199
|
+
archiveSession(sessionId) {
|
|
200
|
+
this.updateSession(sessionId, {
|
|
201
|
+
status: "archived"
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
deleteSession(sessionId) {
|
|
205
|
+
if (!this.db || !this.checkpointer) throw new Error("SessionManager not initialized");
|
|
206
|
+
const sessionStmt = this.db.prepare("DELETE FROM sessions WHERE id = ?");
|
|
207
|
+
sessionStmt.run(sessionId);
|
|
208
|
+
const checkpointStmt = this.db.prepare("DELETE FROM checkpoints WHERE thread_id = ?");
|
|
209
|
+
checkpointStmt.run(sessionId);
|
|
210
|
+
const writesStmt = this.db.prepare("DELETE FROM writes WHERE thread_id = ?");
|
|
211
|
+
writesStmt.run(sessionId);
|
|
212
|
+
}
|
|
213
|
+
clearSessionMessages(sessionId) {
|
|
214
|
+
if (!this.db || !this.checkpointer) throw new Error("SessionManager not initialized");
|
|
215
|
+
const checkpointStmt = this.db.prepare("DELETE FROM checkpoints WHERE thread_id = ?");
|
|
216
|
+
checkpointStmt.run(sessionId);
|
|
217
|
+
const writesStmt = this.db.prepare("DELETE FROM writes WHERE thread_id = ?");
|
|
218
|
+
writesStmt.run(sessionId);
|
|
219
|
+
const sessionStmt = this.db.prepare(`
|
|
220
|
+
UPDATE sessions
|
|
221
|
+
SET message_count = 0, last_message_preview = NULL, updated_at = ?
|
|
222
|
+
WHERE id = ?
|
|
223
|
+
`);
|
|
224
|
+
sessionStmt.run(Date.now(), sessionId);
|
|
225
|
+
}
|
|
226
|
+
getCheckpointer() {
|
|
227
|
+
if (!this.checkpointer) throw new Error("SessionManager not initialized");
|
|
228
|
+
return this.checkpointer;
|
|
229
|
+
}
|
|
230
|
+
async listMessages(sessionId) {
|
|
231
|
+
if (!this.checkpointer) throw new Error("SessionManager not initialized");
|
|
232
|
+
const stateMessages = await this.loadMessagesFromState(sessionId);
|
|
233
|
+
if (null !== stateMessages) return stateMessages;
|
|
234
|
+
const rawCheckpoints = this.loadRecentCheckpoints(sessionId, 25);
|
|
235
|
+
const fallbackTuple = 0 === rawCheckpoints.length ? await this.checkpointer.getTuple({
|
|
236
|
+
configurable: {
|
|
237
|
+
thread_id: sessionId
|
|
238
|
+
}
|
|
239
|
+
}) : null;
|
|
240
|
+
const checkpoints = [
|
|
241
|
+
...rawCheckpoints,
|
|
242
|
+
...fallbackTuple?.checkpoint ? [
|
|
243
|
+
fallbackTuple.checkpoint
|
|
244
|
+
] : []
|
|
245
|
+
];
|
|
246
|
+
if (0 === checkpoints.length) return [];
|
|
247
|
+
let bestScore = -1;
|
|
248
|
+
let bestMessages = [];
|
|
249
|
+
for (const checkpoint of checkpoints){
|
|
250
|
+
const channelValues = checkpoint?.channel_values || checkpoint?.channelValues || checkpoint?.state?.channel_values || checkpoint?.state?.channelValues || {};
|
|
251
|
+
const candidates = [];
|
|
252
|
+
if (Array.isArray(channelValues?.messages)) candidates.push(channelValues.messages);
|
|
253
|
+
for (const value of Object.values(channelValues))if (Array.isArray(value)) candidates.push(value);
|
|
254
|
+
const relevantCandidates = candidates.filter((arr)=>arr.some(isMessageLike));
|
|
255
|
+
if (0 === relevantCandidates.length) continue;
|
|
256
|
+
const baseTime = parseTimestamp(checkpoint?.ts);
|
|
257
|
+
const scored = relevantCandidates.map((candidate)=>scoreMessages(candidate, baseTime));
|
|
258
|
+
scored.sort((a, b)=>b.score - a.score);
|
|
259
|
+
if (scored[0] && scored[0].score > bestScore) {
|
|
260
|
+
bestScore = scored[0].score;
|
|
261
|
+
bestMessages = scored[0].messages;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (0 === bestMessages.length) return [];
|
|
265
|
+
return filterEmptyAssistantMessages(bestMessages);
|
|
266
|
+
}
|
|
267
|
+
rowToSession(row) {
|
|
268
|
+
return {
|
|
269
|
+
id: row.id,
|
|
270
|
+
name: row.name,
|
|
271
|
+
agentName: row.agent_name,
|
|
272
|
+
createdAt: new Date(row.created_at),
|
|
273
|
+
updatedAt: new Date(row.updated_at),
|
|
274
|
+
status: row.status,
|
|
275
|
+
messageCount: row.message_count,
|
|
276
|
+
lastMessagePreview: row.last_message_preview,
|
|
277
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : void 0
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
close() {
|
|
281
|
+
if (this.db) this.db.close();
|
|
282
|
+
}
|
|
283
|
+
loadRecentCheckpoints(sessionId, limit) {
|
|
284
|
+
if (!this.db) return [];
|
|
285
|
+
const stmt = this.db.prepare(`
|
|
286
|
+
SELECT checkpoint
|
|
287
|
+
FROM checkpoints
|
|
288
|
+
WHERE thread_id = ?
|
|
289
|
+
ORDER BY rowid DESC
|
|
290
|
+
LIMIT ?
|
|
291
|
+
`);
|
|
292
|
+
const rows = stmt.all(sessionId, limit);
|
|
293
|
+
const checkpoints = [];
|
|
294
|
+
for (const row of rows){
|
|
295
|
+
if (!row?.checkpoint) continue;
|
|
296
|
+
const raw = row.checkpoint;
|
|
297
|
+
let text = null;
|
|
298
|
+
if ("string" == typeof raw) text = raw;
|
|
299
|
+
else if (raw instanceof Uint8Array) text = new TextDecoder().decode(raw);
|
|
300
|
+
if (text) try {
|
|
301
|
+
checkpoints.push(JSON.parse(text));
|
|
302
|
+
} catch {
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return checkpoints;
|
|
307
|
+
}
|
|
308
|
+
getStateReaderAgent() {
|
|
309
|
+
if (!this.checkpointer) throw new Error("SessionManager not initialized");
|
|
310
|
+
if (!this.stateReaderAgent) this.stateReaderAgent = (0, external_deepagents_namespaceObject.createDeepAgent)({
|
|
311
|
+
checkpointer: this.checkpointer
|
|
312
|
+
});
|
|
313
|
+
return this.stateReaderAgent;
|
|
314
|
+
}
|
|
315
|
+
async loadMessagesFromState(sessionId) {
|
|
316
|
+
if (!this.checkpointer) return null;
|
|
317
|
+
try {
|
|
318
|
+
const agent = this.getStateReaderAgent();
|
|
319
|
+
if ("function" != typeof agent.getState) return null;
|
|
320
|
+
const state = await agent.getState({
|
|
321
|
+
configurable: {
|
|
322
|
+
thread_id: sessionId
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
return extractMessagesFromState(state);
|
|
326
|
+
} catch {
|
|
327
|
+
return null;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
constructor(dbPath){
|
|
331
|
+
_define_property(this, "checkpointer", null);
|
|
332
|
+
_define_property(this, "stateReaderAgent", null);
|
|
333
|
+
_define_property(this, "db", null);
|
|
334
|
+
_define_property(this, "dbPath", void 0);
|
|
335
|
+
this.dbPath = dbPath;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
function isMessageLike(entry) {
|
|
339
|
+
if (!entry || "object" != typeof entry) return false;
|
|
340
|
+
return "string" == typeof entry.role || "string" == typeof entry.type || "string" == typeof entry?.kwargs?.role || "string" == typeof entry?.additional_kwargs?.role;
|
|
341
|
+
}
|
|
342
|
+
function toSessionMessage(entry, index, baseTime) {
|
|
343
|
+
if (!entry || "object" != typeof entry) return null;
|
|
344
|
+
if (entry?.additional_kwargs?.ui_hidden || entry?.additional_kwargs?.uiHidden) return null;
|
|
345
|
+
if (entry?.metadata?.ui_hidden || entry?.metadata?.uiHidden) return null;
|
|
346
|
+
const role = resolveMessageRole(entry);
|
|
347
|
+
if ("user" !== role && "assistant" !== role) return null;
|
|
348
|
+
const blocks = extractContentBlocks(entry);
|
|
349
|
+
const content = "string" == typeof entry.content ? entry.content : "string" == typeof entry?.kwargs?.content ? entry.kwargs.content : "string" == typeof entry?.additional_kwargs?.content ? entry.additional_kwargs.content : "string" == typeof entry?.data?.content ? entry.data.content : blocks.length > 0 ? blocks.filter((block)=>block && "text" === block.type && block.text).map((block)=>block.text).join("") : "";
|
|
350
|
+
if ("user" === role && isUiHiddenContent(content)) return null;
|
|
351
|
+
const attachments = extractAttachments(blocks);
|
|
352
|
+
return {
|
|
353
|
+
id: `msg-${index}`,
|
|
354
|
+
role,
|
|
355
|
+
content,
|
|
356
|
+
attachments: attachments.length > 0 ? attachments : void 0,
|
|
357
|
+
createdAt: baseTime + index
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
function extractMessagesFromState(state) {
|
|
361
|
+
if (!state || "object" != typeof state) return null;
|
|
362
|
+
const values = state?.values ?? state?.value ?? state?.state ?? {};
|
|
363
|
+
const candidates = [
|
|
364
|
+
values?.messages,
|
|
365
|
+
values?.channel_values?.messages,
|
|
366
|
+
values?.channelValues?.messages,
|
|
367
|
+
state?.channel_values?.messages,
|
|
368
|
+
state?.channelValues?.messages
|
|
369
|
+
];
|
|
370
|
+
const messages = candidates.find((candidate)=>Array.isArray(candidate));
|
|
371
|
+
if (!messages) return null;
|
|
372
|
+
const baseTime = parseTimestamp(state?.createdAt ?? values?.createdAt ?? state?.metadata?.createdAt ?? state?.metadata?.created_at ?? state?.ts);
|
|
373
|
+
const mapped = messages.map((message, index)=>toSessionMessage(message, index, baseTime)).filter(Boolean);
|
|
374
|
+
return filterEmptyAssistantMessages(mapped);
|
|
375
|
+
}
|
|
376
|
+
function extractContentBlocks(entry) {
|
|
377
|
+
if (!entry || "object" != typeof entry) return [];
|
|
378
|
+
const candidates = [
|
|
379
|
+
entry?.content,
|
|
380
|
+
entry?.kwargs?.content,
|
|
381
|
+
entry?.additional_kwargs?.content,
|
|
382
|
+
entry?.data?.content
|
|
383
|
+
];
|
|
384
|
+
for (const candidate of candidates)if (Array.isArray(candidate)) return candidate;
|
|
385
|
+
return [];
|
|
386
|
+
}
|
|
387
|
+
function extractAttachments(blocks) {
|
|
388
|
+
const attachments = [];
|
|
389
|
+
for (const block of blocks){
|
|
390
|
+
if (!block || "object" != typeof block) continue;
|
|
391
|
+
const imageUrl = extractImageUrl(block);
|
|
392
|
+
if (imageUrl) {
|
|
393
|
+
attachments.push({
|
|
394
|
+
kind: "image",
|
|
395
|
+
dataUrl: imageUrl
|
|
396
|
+
});
|
|
397
|
+
continue;
|
|
398
|
+
}
|
|
399
|
+
const audioUrl = extractAudioUrl(block);
|
|
400
|
+
if (audioUrl) attachments.push({
|
|
401
|
+
kind: "audio",
|
|
402
|
+
dataUrl: audioUrl
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
return attachments;
|
|
406
|
+
}
|
|
407
|
+
function extractImageAttachments(blocks) {
|
|
408
|
+
return extractAttachments(blocks).filter((attachment)=>"image" === attachment.kind);
|
|
409
|
+
}
|
|
410
|
+
function extractImageUrl(block) {
|
|
411
|
+
if ("image_url" === block.type) {
|
|
412
|
+
if ("string" == typeof block.image_url) return block.image_url;
|
|
413
|
+
if ("string" == typeof block.image_url?.url) return block.image_url.url;
|
|
414
|
+
}
|
|
415
|
+
if ("input_image" === block.type) {
|
|
416
|
+
if ("string" == typeof block.image_url) return block.image_url;
|
|
417
|
+
if ("string" == typeof block.image_url?.url) return block.image_url.url;
|
|
418
|
+
if ("string" == typeof block.url) return block.url;
|
|
419
|
+
}
|
|
420
|
+
if ("image" === block.type && block.source) {
|
|
421
|
+
const mediaType = block.source.media_type || block.source.mediaType;
|
|
422
|
+
const data = block.source.data;
|
|
423
|
+
if (mediaType && data) return `data:${mediaType};base64,${data}`;
|
|
424
|
+
}
|
|
425
|
+
return null;
|
|
426
|
+
}
|
|
427
|
+
function extractAudioUrl(block) {
|
|
428
|
+
if ("audio_url" === block.type) {
|
|
429
|
+
if ("string" == typeof block.audio_url) return block.audio_url;
|
|
430
|
+
if ("string" == typeof block.audio_url?.url) return block.audio_url.url;
|
|
431
|
+
}
|
|
432
|
+
if ("input_audio" === block.type) {
|
|
433
|
+
const input = block.input_audio || block.audio;
|
|
434
|
+
const data = "string" == typeof input?.data ? input.data : null;
|
|
435
|
+
const format = "string" == typeof input?.format ? input.format : void 0;
|
|
436
|
+
if (data) {
|
|
437
|
+
const mimeType = format ? resolveAudioMimeType(format) : "audio/wav";
|
|
438
|
+
return `data:${mimeType};base64,${data}`;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
if ("audio" === block.type && block.source) {
|
|
442
|
+
const mediaType = block.source.media_type || block.source.mediaType;
|
|
443
|
+
const data = block.source.data;
|
|
444
|
+
if (mediaType && data) return `data:${mediaType};base64,${data}`;
|
|
445
|
+
}
|
|
446
|
+
if ("audio" === block.type) {
|
|
447
|
+
const sourceType = block.source_type || block.sourceType;
|
|
448
|
+
const data = block.data;
|
|
449
|
+
if ("base64" === sourceType && "string" == typeof data) {
|
|
450
|
+
const rawFormat = block.mime_type || block.media_type || block.mediaType || block.format;
|
|
451
|
+
const mimeType = "string" == typeof rawFormat ? rawFormat.includes("/") ? rawFormat : resolveAudioMimeType(rawFormat) : "audio/wav";
|
|
452
|
+
return `data:${mimeType};base64,${data}`;
|
|
453
|
+
}
|
|
454
|
+
if ("url" === sourceType && "string" == typeof block.url) return block.url;
|
|
455
|
+
}
|
|
456
|
+
return null;
|
|
457
|
+
}
|
|
458
|
+
function resolveAudioMimeType(format) {
|
|
459
|
+
const normalized = format.toLowerCase();
|
|
460
|
+
switch(normalized){
|
|
461
|
+
case "mp3":
|
|
462
|
+
case "mpeg":
|
|
463
|
+
return "audio/mpeg";
|
|
464
|
+
case "wav":
|
|
465
|
+
return "audio/wav";
|
|
466
|
+
case "m4a":
|
|
467
|
+
case "mp4":
|
|
468
|
+
return "audio/mp4";
|
|
469
|
+
case "ogg":
|
|
470
|
+
return "audio/ogg";
|
|
471
|
+
case "webm":
|
|
472
|
+
return "audio/webm";
|
|
473
|
+
default:
|
|
474
|
+
return `audio/${normalized}`;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
function mapMessageType(type) {
|
|
478
|
+
if (!type) return null;
|
|
479
|
+
if ("human" === type || "user" === type) return "user";
|
|
480
|
+
if ("ai" === type || "assistant" === type) return "assistant";
|
|
481
|
+
return null;
|
|
482
|
+
}
|
|
483
|
+
function mapMessageTypeFromId(id) {
|
|
484
|
+
if (!Array.isArray(id) || 0 === id.length) return null;
|
|
485
|
+
const last = String(id[id.length - 1] || "").toLowerCase();
|
|
486
|
+
if (last.includes("human") || last.includes("user")) return "user";
|
|
487
|
+
if (last.includes("ai") || last.includes("assistant")) return "assistant";
|
|
488
|
+
return null;
|
|
489
|
+
}
|
|
490
|
+
function resolveMessageRole(entry) {
|
|
491
|
+
return entry?.role || entry?.kwargs?.role || entry?.additional_kwargs?.role || mapMessageType(entry?.type) || mapMessageTypeFromId(entry?.id ?? entry?.lc_id ?? entry?.kwargs?.id);
|
|
492
|
+
}
|
|
493
|
+
function parseTimestamp(value) {
|
|
494
|
+
if ("number" == typeof value && Number.isFinite(value)) return value;
|
|
495
|
+
if ("string" == typeof value) {
|
|
496
|
+
const parsed = Date.parse(value);
|
|
497
|
+
if (!Number.isNaN(parsed)) return parsed;
|
|
498
|
+
}
|
|
499
|
+
return Date.now();
|
|
500
|
+
}
|
|
501
|
+
function isUiHiddenContent(content) {
|
|
502
|
+
if (!content) return false;
|
|
503
|
+
return content.includes("Current Date Time (UTC):") || content.startsWith("# User's Machine Information");
|
|
504
|
+
}
|
|
505
|
+
function scoreMessages(candidate, baseTime) {
|
|
506
|
+
const messages = candidate.map((message, index)=>toSessionMessage(message, index, baseTime)).filter(Boolean);
|
|
507
|
+
const contentful = messages.filter((msg)=>msg.content.trim().length > 0 || (msg.attachments?.length ?? 0) > 0).length;
|
|
508
|
+
const assistantContentful = messages.filter((msg)=>"assistant" === msg.role && msg.content.trim().length > 0).length;
|
|
509
|
+
const score = 3 * assistantContentful + 2 * contentful + messages.length;
|
|
510
|
+
return {
|
|
511
|
+
score,
|
|
512
|
+
messages
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
function filterEmptyAssistantMessages(messages) {
|
|
516
|
+
const filtered = messages.filter((message)=>"assistant" !== message.role || message.content.trim().length > 0 || (message.attachments?.length ?? 0) > 0);
|
|
517
|
+
return filtered.length > 0 ? filtered : messages;
|
|
518
|
+
}
|
|
519
|
+
exports.SessionManager = __webpack_exports__.SessionManager;
|
|
520
|
+
exports.extractAttachments = __webpack_exports__.extractAttachments;
|
|
521
|
+
exports.extractImageAttachments = __webpack_exports__.extractImageAttachments;
|
|
522
|
+
exports.extractImageUrl = __webpack_exports__.extractImageUrl;
|
|
523
|
+
exports.extractMessagesFromState = __webpack_exports__.extractMessagesFromState;
|
|
524
|
+
exports.resolveMessageRole = __webpack_exports__.resolveMessageRole;
|
|
525
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
526
|
+
"SessionManager",
|
|
527
|
+
"extractAttachments",
|
|
528
|
+
"extractImageAttachments",
|
|
529
|
+
"extractImageUrl",
|
|
530
|
+
"extractMessagesFromState",
|
|
531
|
+
"resolveMessageRole"
|
|
532
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
533
|
+
Object.defineProperty(exports, '__esModule', {
|
|
534
|
+
value: true
|
|
535
|
+
});
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { SqliteSaver } from "@langchain/langgraph-checkpoint-sqlite";
|
|
2
|
+
export interface Session {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
agentName: string;
|
|
6
|
+
createdAt: Date;
|
|
7
|
+
updatedAt: Date;
|
|
8
|
+
status: "active" | "archived" | "deleted";
|
|
9
|
+
messageCount: number;
|
|
10
|
+
lastMessagePreview?: string;
|
|
11
|
+
metadata?: Record<string, any>;
|
|
12
|
+
}
|
|
13
|
+
export interface ListSessionsOptions {
|
|
14
|
+
status?: "active" | "archived" | "deleted";
|
|
15
|
+
limit?: number;
|
|
16
|
+
offset?: number;
|
|
17
|
+
agentName?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface SessionMessage {
|
|
20
|
+
id: string;
|
|
21
|
+
role: "user" | "assistant";
|
|
22
|
+
content: string;
|
|
23
|
+
attachments?: SessionAttachment[];
|
|
24
|
+
createdAt: number;
|
|
25
|
+
}
|
|
26
|
+
export interface SessionAttachment {
|
|
27
|
+
kind: "image" | "audio";
|
|
28
|
+
dataUrl: string;
|
|
29
|
+
name?: string;
|
|
30
|
+
mimeType?: string;
|
|
31
|
+
size?: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* SessionManager handles session metadata and provides unified access to
|
|
35
|
+
* both the custom sessions table and LangGraph's SqliteSaver checkpointer.
|
|
36
|
+
*/
|
|
37
|
+
export declare class SessionManager {
|
|
38
|
+
private checkpointer;
|
|
39
|
+
private stateReaderAgent;
|
|
40
|
+
private db;
|
|
41
|
+
private dbPath;
|
|
42
|
+
constructor(dbPath: string);
|
|
43
|
+
/**
|
|
44
|
+
* Initialize the SessionManager with SqliteSaver and create custom tables
|
|
45
|
+
*/
|
|
46
|
+
initialize(): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Create a new session
|
|
49
|
+
*/
|
|
50
|
+
createSession(agentName: string, name?: string): Session;
|
|
51
|
+
/**
|
|
52
|
+
* Get or create a session with a fixed ID
|
|
53
|
+
*/
|
|
54
|
+
getOrCreateSession(sessionId: string, agentName: string, name?: string): Session;
|
|
55
|
+
/**
|
|
56
|
+
* Get a session by ID
|
|
57
|
+
*/
|
|
58
|
+
getSession(sessionId: string): Session | null;
|
|
59
|
+
/**
|
|
60
|
+
* Get the most recently updated session
|
|
61
|
+
*/
|
|
62
|
+
getLastSession(): Session | null;
|
|
63
|
+
/**
|
|
64
|
+
* List sessions with optional filtering
|
|
65
|
+
*/
|
|
66
|
+
listSessions(options?: ListSessionsOptions): Session[];
|
|
67
|
+
/**
|
|
68
|
+
* Update a session's metadata
|
|
69
|
+
*/
|
|
70
|
+
updateSession(sessionId: string, updates: Partial<Pick<Session, "name" | "status" | "messageCount" | "lastMessagePreview">>): void;
|
|
71
|
+
/**
|
|
72
|
+
* Merge and update session metadata
|
|
73
|
+
*/
|
|
74
|
+
updateSessionMetadata(sessionId: string, metadata: Record<string, any>): void;
|
|
75
|
+
/**
|
|
76
|
+
* Archive a session (soft delete)
|
|
77
|
+
*/
|
|
78
|
+
archiveSession(sessionId: string): void;
|
|
79
|
+
/**
|
|
80
|
+
* Delete a session (hard delete from database)
|
|
81
|
+
*/
|
|
82
|
+
deleteSession(sessionId: string): void;
|
|
83
|
+
/**
|
|
84
|
+
* Clear session messages while preserving the session record
|
|
85
|
+
*/
|
|
86
|
+
clearSessionMessages(sessionId: string): void;
|
|
87
|
+
/**
|
|
88
|
+
* Get the checkpointer for use with DeepAgents
|
|
89
|
+
*/
|
|
90
|
+
getCheckpointer(): SqliteSaver;
|
|
91
|
+
/**
|
|
92
|
+
* List messages for a session by reading the latest checkpoint.
|
|
93
|
+
*/
|
|
94
|
+
listMessages(sessionId: string): Promise<SessionMessage[]>;
|
|
95
|
+
/**
|
|
96
|
+
* Convert database row to Session object
|
|
97
|
+
*/
|
|
98
|
+
private rowToSession;
|
|
99
|
+
/**
|
|
100
|
+
* Close the database connection
|
|
101
|
+
*/
|
|
102
|
+
close(): void;
|
|
103
|
+
private loadRecentCheckpoints;
|
|
104
|
+
private getStateReaderAgent;
|
|
105
|
+
private loadMessagesFromState;
|
|
106
|
+
}
|
|
107
|
+
export declare function extractMessagesFromState(state: any): SessionMessage[] | null;
|
|
108
|
+
export declare function extractAttachments(blocks: any[]): SessionAttachment[];
|
|
109
|
+
export declare function extractImageAttachments(blocks: any[]): SessionAttachment[];
|
|
110
|
+
export declare function extractImageUrl(block: any): string | null;
|
|
111
|
+
export declare function resolveMessageRole(entry: any): "user" | "assistant" | null;
|