clodds 1.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/LICENSE +21 -0
- package/README.md +468 -0
- package/dist/acp/agreement.d.ts +110 -0
- package/dist/acp/agreement.js +514 -0
- package/dist/acp/agreement.js.map +1 -0
- package/dist/acp/discovery.d.ts +84 -0
- package/dist/acp/discovery.js +332 -0
- package/dist/acp/discovery.js.map +1 -0
- package/dist/acp/escrow.d.ts +139 -0
- package/dist/acp/escrow.js +880 -0
- package/dist/acp/escrow.js.map +1 -0
- package/dist/acp/identity.d.ts +135 -0
- package/dist/acp/identity.js +716 -0
- package/dist/acp/identity.js.map +1 -0
- package/dist/acp/index.d.ts +205 -0
- package/dist/acp/index.js +583 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/persistence.d.ts +59 -0
- package/dist/acp/persistence.js +590 -0
- package/dist/acp/persistence.js.map +1 -0
- package/dist/acp/predictions.d.ts +89 -0
- package/dist/acp/predictions.js +417 -0
- package/dist/acp/predictions.js.map +1 -0
- package/dist/acp/registry.d.ts +143 -0
- package/dist/acp/registry.js +584 -0
- package/dist/acp/registry.js.map +1 -0
- package/dist/agents/handlers/acp.d.ts +12 -0
- package/dist/agents/handlers/acp.js +987 -0
- package/dist/agents/handlers/acp.js.map +1 -0
- package/dist/agents/handlers/agentbets.d.ts +8 -0
- package/dist/agents/handlers/agentbets.js +63 -0
- package/dist/agents/handlers/agentbets.js.map +1 -0
- package/dist/agents/handlers/arbitrage.d.ts +16 -0
- package/dist/agents/handlers/arbitrage.js +187 -0
- package/dist/agents/handlers/arbitrage.js.map +1 -0
- package/dist/agents/handlers/betfair.d.ts +11 -0
- package/dist/agents/handlers/betfair.js +214 -0
- package/dist/agents/handlers/betfair.js.map +1 -0
- package/dist/agents/handlers/binance.d.ts +9 -0
- package/dist/agents/handlers/binance.js +227 -0
- package/dist/agents/handlers/binance.js.map +1 -0
- package/dist/agents/handlers/bittensor.d.ts +10 -0
- package/dist/agents/handlers/bittensor.js +90 -0
- package/dist/agents/handlers/bittensor.js.map +1 -0
- package/dist/agents/handlers/bybit.d.ts +9 -0
- package/dist/agents/handlers/bybit.js +226 -0
- package/dist/agents/handlers/bybit.js.map +1 -0
- package/dist/agents/handlers/credentials.d.ts +8 -0
- package/dist/agents/handlers/credentials.js +103 -0
- package/dist/agents/handlers/credentials.js.map +1 -0
- package/dist/agents/handlers/hyperliquid.d.ts +9 -0
- package/dist/agents/handlers/hyperliquid.js +326 -0
- package/dist/agents/handlers/hyperliquid.js.map +1 -0
- package/dist/agents/handlers/index.d.ts +82 -0
- package/dist/agents/handlers/index.js +143 -0
- package/dist/agents/handlers/index.js.map +1 -0
- package/dist/agents/handlers/kalshi.d.ts +10 -0
- package/dist/agents/handlers/kalshi.js +1377 -0
- package/dist/agents/handlers/kalshi.js.map +1 -0
- package/dist/agents/handlers/manifold.d.ts +9 -0
- package/dist/agents/handlers/manifold.js +1001 -0
- package/dist/agents/handlers/manifold.js.map +1 -0
- package/dist/agents/handlers/markets.d.ts +8 -0
- package/dist/agents/handlers/markets.js +321 -0
- package/dist/agents/handlers/markets.js.map +1 -0
- package/dist/agents/handlers/opinion.d.ts +11 -0
- package/dist/agents/handlers/opinion.js +374 -0
- package/dist/agents/handlers/opinion.js.map +1 -0
- package/dist/agents/handlers/paper-trading.d.ts +8 -0
- package/dist/agents/handlers/paper-trading.js +124 -0
- package/dist/agents/handlers/paper-trading.js.map +1 -0
- package/dist/agents/handlers/polymarket.d.ts +17 -0
- package/dist/agents/handlers/polymarket.js +455 -0
- package/dist/agents/handlers/polymarket.js.map +1 -0
- package/dist/agents/handlers/predictfun.d.ts +9 -0
- package/dist/agents/handlers/predictfun.js +488 -0
- package/dist/agents/handlers/predictfun.js.map +1 -0
- package/dist/agents/handlers/smarkets.d.ts +11 -0
- package/dist/agents/handlers/smarkets.js +205 -0
- package/dist/agents/handlers/smarkets.js.map +1 -0
- package/dist/agents/handlers/solana.d.ts +14 -0
- package/dist/agents/handlers/solana.js +1530 -0
- package/dist/agents/handlers/solana.js.map +1 -0
- package/dist/agents/handlers/types.d.ts +58 -0
- package/dist/agents/handlers/types.js +34 -0
- package/dist/agents/handlers/types.js.map +1 -0
- package/dist/agents/handlers/virtuals.d.ts +11 -0
- package/dist/agents/handlers/virtuals.js +135 -0
- package/dist/agents/handlers/virtuals.js.map +1 -0
- package/dist/agents/handlers/wallets.d.ts +9 -0
- package/dist/agents/handlers/wallets.js +222 -0
- package/dist/agents/handlers/wallets.js.map +1 -0
- package/dist/agents/index.d.ts +79 -0
- package/dist/agents/index.js +16690 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/subagents.d.ts +219 -0
- package/dist/agents/subagents.js +736 -0
- package/dist/agents/subagents.js.map +1 -0
- package/dist/alerts/index.d.ts +110 -0
- package/dist/alerts/index.js +421 -0
- package/dist/alerts/index.js.map +1 -0
- package/dist/alerts/realtime.d.ts +114 -0
- package/dist/alerts/realtime.js +262 -0
- package/dist/alerts/realtime.js.map +1 -0
- package/dist/api/apikeys.d.ts +74 -0
- package/dist/api/apikeys.js +319 -0
- package/dist/api/apikeys.js.map +1 -0
- package/dist/api/compute/code.d.ts +28 -0
- package/dist/api/compute/code.js +257 -0
- package/dist/api/compute/code.js.map +1 -0
- package/dist/api/compute/data.d.ts +72 -0
- package/dist/api/compute/data.js +264 -0
- package/dist/api/compute/data.js.map +1 -0
- package/dist/api/compute/gateway.d.ts +185 -0
- package/dist/api/compute/gateway.js +958 -0
- package/dist/api/compute/gateway.js.map +1 -0
- package/dist/api/compute/index.d.ts +21 -0
- package/dist/api/compute/index.js +46 -0
- package/dist/api/compute/index.js.map +1 -0
- package/dist/api/compute/llm.d.ts +64 -0
- package/dist/api/compute/llm.js +602 -0
- package/dist/api/compute/llm.js.map +1 -0
- package/dist/api/compute/persistence.d.ts +77 -0
- package/dist/api/compute/persistence.js +251 -0
- package/dist/api/compute/persistence.js.map +1 -0
- package/dist/api/compute/storage.d.ts +48 -0
- package/dist/api/compute/storage.js +283 -0
- package/dist/api/compute/storage.js.map +1 -0
- package/dist/api/compute/trade.d.ts +69 -0
- package/dist/api/compute/trade.js +460 -0
- package/dist/api/compute/trade.js.map +1 -0
- package/dist/api/compute/types.d.ts +271 -0
- package/dist/api/compute/types.js +87 -0
- package/dist/api/compute/types.js.map +1 -0
- package/dist/api/compute/web.d.ts +29 -0
- package/dist/api/compute/web.js +255 -0
- package/dist/api/compute/web.js.map +1 -0
- package/dist/api/custody.d.ts +48 -0
- package/dist/api/custody.js +272 -0
- package/dist/api/custody.js.map +1 -0
- package/dist/api/fees.d.ts +91 -0
- package/dist/api/fees.js +155 -0
- package/dist/api/fees.js.map +1 -0
- package/dist/api/gateway.d.ts +40 -0
- package/dist/api/gateway.js +569 -0
- package/dist/api/gateway.js.map +1 -0
- package/dist/api/index.d.ts +29 -0
- package/dist/api/index.js +55 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/jobs.d.ts +59 -0
- package/dist/api/jobs.js +362 -0
- package/dist/api/jobs.js.map +1 -0
- package/dist/api/middleware.d.ts +60 -0
- package/dist/api/middleware.js +315 -0
- package/dist/api/middleware.js.map +1 -0
- package/dist/api/prompt.d.ts +44 -0
- package/dist/api/prompt.js +345 -0
- package/dist/api/prompt.js.map +1 -0
- package/dist/api/sdk.d.ts +258 -0
- package/dist/api/sdk.js +341 -0
- package/dist/api/sdk.js.map +1 -0
- package/dist/api/server.d.ts +17 -0
- package/dist/api/server.js +852 -0
- package/dist/api/server.js.map +1 -0
- package/dist/api/types.d.ts +307 -0
- package/dist/api/types.js +64 -0
- package/dist/api/types.js.map +1 -0
- package/dist/arbitrage/index.d.ts +124 -0
- package/dist/arbitrage/index.js +482 -0
- package/dist/arbitrage/index.js.map +1 -0
- package/dist/auth/copilot.d.ts +87 -0
- package/dist/auth/copilot.js +328 -0
- package/dist/auth/copilot.js.map +1 -0
- package/dist/auth/google.d.ts +121 -0
- package/dist/auth/google.js +479 -0
- package/dist/auth/google.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.js +25 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth.d.ts +94 -0
- package/dist/auth/oauth.js +502 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/auth/qwen.d.ts +110 -0
- package/dist/auth/qwen.js +351 -0
- package/dist/auth/qwen.js.map +1 -0
- package/dist/auto-reply/index.d.ts +143 -0
- package/dist/auto-reply/index.js +391 -0
- package/dist/auto-reply/index.js.map +1 -0
- package/dist/automation/cron.d.ts +66 -0
- package/dist/automation/cron.js +226 -0
- package/dist/automation/cron.js.map +1 -0
- package/dist/automation/heartbeats.d.ts +63 -0
- package/dist/automation/heartbeats.js +144 -0
- package/dist/automation/heartbeats.js.map +1 -0
- package/dist/automation/index.d.ts +9 -0
- package/dist/automation/index.js +15 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/webhooks.d.ts +60 -0
- package/dist/automation/webhooks.js +225 -0
- package/dist/automation/webhooks.js.map +1 -0
- package/dist/bankr/client.d.ts +86 -0
- package/dist/bankr/client.js +177 -0
- package/dist/bankr/client.js.map +1 -0
- package/dist/bankr/index.d.ts +6 -0
- package/dist/bankr/index.js +23 -0
- package/dist/bankr/index.js.map +1 -0
- package/dist/base/index.d.ts +6 -0
- package/dist/base/index.js +23 -0
- package/dist/base/index.js.map +1 -0
- package/dist/base/provider.d.ts +27 -0
- package/dist/base/provider.js +128 -0
- package/dist/base/provider.js.map +1 -0
- package/dist/bin/worker.d.ts +31 -0
- package/dist/bin/worker.js +127 -0
- package/dist/bin/worker.js.map +1 -0
- package/dist/bittensor/chutes.d.ts +14 -0
- package/dist/bittensor/chutes.js +141 -0
- package/dist/bittensor/chutes.js.map +1 -0
- package/dist/bittensor/index.d.ts +7 -0
- package/dist/bittensor/index.js +13 -0
- package/dist/bittensor/index.js.map +1 -0
- package/dist/bittensor/persistence.d.ts +8 -0
- package/dist/bittensor/persistence.js +188 -0
- package/dist/bittensor/persistence.js.map +1 -0
- package/dist/bittensor/plugin.d.ts +30 -0
- package/dist/bittensor/plugin.js +134 -0
- package/dist/bittensor/plugin.js.map +1 -0
- package/dist/bittensor/python-runner.d.ts +7 -0
- package/dist/bittensor/python-runner.js +83 -0
- package/dist/bittensor/python-runner.js.map +1 -0
- package/dist/bittensor/server.d.ts +7 -0
- package/dist/bittensor/server.js +110 -0
- package/dist/bittensor/server.js.map +1 -0
- package/dist/bittensor/service.d.ts +7 -0
- package/dist/bittensor/service.js +291 -0
- package/dist/bittensor/service.js.map +1 -0
- package/dist/bittensor/tool.d.ts +45 -0
- package/dist/bittensor/tool.js +147 -0
- package/dist/bittensor/tool.js.map +1 -0
- package/dist/bittensor/types.d.ts +188 -0
- package/dist/bittensor/types.js +6 -0
- package/dist/bittensor/types.js.map +1 -0
- package/dist/bittensor/wallet.d.ts +18 -0
- package/dist/bittensor/wallet.js +192 -0
- package/dist/bittensor/wallet.js.map +1 -0
- package/dist/bridge/wormhole.d.ts +239 -0
- package/dist/bridge/wormhole.js +404 -0
- package/dist/bridge/wormhole.js.map +1 -0
- package/dist/browser/index.d.ts +67 -0
- package/dist/browser/index.js +458 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/cache/index.d.ts +105 -0
- package/dist/cache/index.js +306 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/canvas/index.d.ts +66 -0
- package/dist/canvas/index.js +391 -0
- package/dist/canvas/index.js.map +1 -0
- package/dist/channels/base-adapter.d.ts +126 -0
- package/dist/channels/base-adapter.js +416 -0
- package/dist/channels/base-adapter.js.map +1 -0
- package/dist/channels/bluebubbles/index.d.ts +23 -0
- package/dist/channels/bluebubbles/index.js +182 -0
- package/dist/channels/bluebubbles/index.js.map +1 -0
- package/dist/channels/discord/index.d.ts +25 -0
- package/dist/channels/discord/index.js +419 -0
- package/dist/channels/discord/index.js.map +1 -0
- package/dist/channels/googlechat/index.d.ts +35 -0
- package/dist/channels/googlechat/index.js +223 -0
- package/dist/channels/googlechat/index.js.map +1 -0
- package/dist/channels/imessage/index.d.ts +28 -0
- package/dist/channels/imessage/index.js +340 -0
- package/dist/channels/imessage/index.js.map +1 -0
- package/dist/channels/index.d.ts +58 -0
- package/dist/channels/index.js +382 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/channels/line/index.d.ts +307 -0
- package/dist/channels/line/index.js +760 -0
- package/dist/channels/line/index.js.map +1 -0
- package/dist/channels/matrix/index.d.ts +35 -0
- package/dist/channels/matrix/index.js +328 -0
- package/dist/channels/matrix/index.js.map +1 -0
- package/dist/channels/mattermost/index.d.ts +25 -0
- package/dist/channels/mattermost/index.js +239 -0
- package/dist/channels/mattermost/index.js.map +1 -0
- package/dist/channels/nextcloud-talk/index.d.ts +25 -0
- package/dist/channels/nextcloud-talk/index.js +175 -0
- package/dist/channels/nextcloud-talk/index.js.map +1 -0
- package/dist/channels/nostr/index.d.ts +21 -0
- package/dist/channels/nostr/index.js +278 -0
- package/dist/channels/nostr/index.js.map +1 -0
- package/dist/channels/signal/index.d.ts +33 -0
- package/dist/channels/signal/index.js +333 -0
- package/dist/channels/signal/index.js.map +1 -0
- package/dist/channels/slack/index.d.ts +26 -0
- package/dist/channels/slack/index.js +266 -0
- package/dist/channels/slack/index.js.map +1 -0
- package/dist/channels/teams/index.d.ts +42 -0
- package/dist/channels/teams/index.js +312 -0
- package/dist/channels/teams/index.js.map +1 -0
- package/dist/channels/telegram/index.d.ts +9 -0
- package/dist/channels/telegram/index.js +761 -0
- package/dist/channels/telegram/index.js.map +1 -0
- package/dist/channels/tlon/index.d.ts +25 -0
- package/dist/channels/tlon/index.js +236 -0
- package/dist/channels/tlon/index.js.map +1 -0
- package/dist/channels/twitch/index.d.ts +25 -0
- package/dist/channels/twitch/index.js +182 -0
- package/dist/channels/twitch/index.js.map +1 -0
- package/dist/channels/voice/index.d.ts +31 -0
- package/dist/channels/voice/index.js +208 -0
- package/dist/channels/voice/index.js.map +1 -0
- package/dist/channels/webchat/index.d.ts +29 -0
- package/dist/channels/webchat/index.js +366 -0
- package/dist/channels/webchat/index.js.map +1 -0
- package/dist/channels/whatsapp/index.d.ts +72 -0
- package/dist/channels/whatsapp/index.js +767 -0
- package/dist/channels/whatsapp/index.js.map +1 -0
- package/dist/channels/zalo/index.d.ts +45 -0
- package/dist/channels/zalo/index.js +285 -0
- package/dist/channels/zalo/index.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +23 -0
- package/dist/cli/commands/doctor.js +649 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/gateway.d.ts +6 -0
- package/dist/cli/commands/gateway.js +32 -0
- package/dist/cli/commands/gateway.js.map +1 -0
- package/dist/cli/commands/index.d.ts +31 -0
- package/dist/cli/commands/index.js +3743 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/onboard.d.ts +4 -0
- package/dist/cli/commands/onboard.js +334 -0
- package/dist/cli/commands/onboard.js.map +1 -0
- package/dist/cli/commands/repl.d.ts +11 -0
- package/dist/cli/commands/repl.js +185 -0
- package/dist/cli/commands/repl.js.map +1 -0
- package/dist/cli/commands/skills.d.ts +29 -0
- package/dist/cli/commands/skills.js +297 -0
- package/dist/cli/commands/skills.js.map +1 -0
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.js +449 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/secure.d.ts +14 -0
- package/dist/cli/secure.js +626 -0
- package/dist/cli/secure.js.map +1 -0
- package/dist/commands/index.d.ts +61 -0
- package/dist/commands/index.js +290 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/registry.d.ts +69 -0
- package/dist/commands/registry.js +3142 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/config/index.d.ts +465 -0
- package/dist/config/index.js +1451 -0
- package/dist/config/index.js.map +1 -0
- package/dist/credentials/index.d.ts +51 -0
- package/dist/credentials/index.js +270 -0
- package/dist/credentials/index.js.map +1 -0
- package/dist/cron/index.d.ts +151 -0
- package/dist/cron/index.js +1283 -0
- package/dist/cron/index.js.map +1 -0
- package/dist/cron/types.d.ts +102 -0
- package/dist/cron/types.js +6 -0
- package/dist/cron/types.js.map +1 -0
- package/dist/daemon/index.d.ts +23 -0
- package/dist/daemon/index.js +159 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/db/index.d.ts +825 -0
- package/dist/db/index.js +3382 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrations.d.ts +70 -0
- package/dist/db/migrations.js +1373 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/docker/index.d.ts +188 -0
- package/dist/docker/index.js +571 -0
- package/dist/docker/index.js.map +1 -0
- package/dist/doctor/index.d.ts +47 -0
- package/dist/doctor/index.js +379 -0
- package/dist/doctor/index.js.map +1 -0
- package/dist/embeddings/index.d.ts +65 -0
- package/dist/embeddings/index.js +399 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/evm/contracts.d.ts +112 -0
- package/dist/evm/contracts.js +332 -0
- package/dist/evm/contracts.js.map +1 -0
- package/dist/evm/index.d.ts +21 -0
- package/dist/evm/index.js +45 -0
- package/dist/evm/index.js.map +1 -0
- package/dist/evm/multichain.d.ts +87 -0
- package/dist/evm/multichain.js +308 -0
- package/dist/evm/multichain.js.map +1 -0
- package/dist/evm/odos.d.ts +62 -0
- package/dist/evm/odos.js +261 -0
- package/dist/evm/odos.js.map +1 -0
- package/dist/evm/oneinch.d.ts +55 -0
- package/dist/evm/oneinch.js +324 -0
- package/dist/evm/oneinch.js.map +1 -0
- package/dist/evm/transfers.d.ts +83 -0
- package/dist/evm/transfers.js +393 -0
- package/dist/evm/transfers.js.map +1 -0
- package/dist/evm/uniswap.d.ts +56 -0
- package/dist/evm/uniswap.js +307 -0
- package/dist/evm/uniswap.js.map +1 -0
- package/dist/evm/virtuals.d.ts +220 -0
- package/dist/evm/virtuals.js +735 -0
- package/dist/evm/virtuals.js.map +1 -0
- package/dist/evm/wallet.d.ts +96 -0
- package/dist/evm/wallet.js +258 -0
- package/dist/evm/wallet.js.map +1 -0
- package/dist/exchanges/binance-futures/index.d.ts +83 -0
- package/dist/exchanges/binance-futures/index.js +394 -0
- package/dist/exchanges/binance-futures/index.js.map +1 -0
- package/dist/exchanges/bybit/index.d.ts +78 -0
- package/dist/exchanges/bybit/index.js +379 -0
- package/dist/exchanges/bybit/index.js.map +1 -0
- package/dist/exchanges/hyperliquid/index.d.ts +594 -0
- package/dist/exchanges/hyperliquid/index.js +1101 -0
- package/dist/exchanges/hyperliquid/index.js.map +1 -0
- package/dist/exchanges/mexc/index.d.ts +80 -0
- package/dist/exchanges/mexc/index.js +389 -0
- package/dist/exchanges/mexc/index.js.map +1 -0
- package/dist/exchanges/opinion/index.d.ts +128 -0
- package/dist/exchanges/opinion/index.js +443 -0
- package/dist/exchanges/opinion/index.js.map +1 -0
- package/dist/exchanges/predictfun/index.d.ts +107 -0
- package/dist/exchanges/predictfun/index.js +398 -0
- package/dist/exchanges/predictfun/index.js.map +1 -0
- package/dist/execution/auto-redeem.d.ts +55 -0
- package/dist/execution/auto-redeem.js +324 -0
- package/dist/execution/auto-redeem.js.map +1 -0
- package/dist/execution/bracket-orders.d.ts +84 -0
- package/dist/execution/bracket-orders.js +387 -0
- package/dist/execution/bracket-orders.js.map +1 -0
- package/dist/execution/circuit-breaker.d.ts +87 -0
- package/dist/execution/circuit-breaker.js +274 -0
- package/dist/execution/circuit-breaker.js.map +1 -0
- package/dist/execution/dca-persistence.d.ts +47 -0
- package/dist/execution/dca-persistence.js +159 -0
- package/dist/execution/dca-persistence.js.map +1 -0
- package/dist/execution/dca.d.ts +60 -0
- package/dist/execution/dca.js +273 -0
- package/dist/execution/dca.js.map +1 -0
- package/dist/execution/futures.d.ts +162 -0
- package/dist/execution/futures.js +1336 -0
- package/dist/execution/futures.js.map +1 -0
- package/dist/execution/index.d.ts +346 -0
- package/dist/execution/index.js +2532 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/mev-protection.d.ts +150 -0
- package/dist/execution/mev-protection.js +377 -0
- package/dist/execution/mev-protection.js.map +1 -0
- package/dist/execution/order-persistence.d.ts +81 -0
- package/dist/execution/order-persistence.js +350 -0
- package/dist/execution/order-persistence.js.map +1 -0
- package/dist/execution/position-manager.d.ts +142 -0
- package/dist/execution/position-manager.js +404 -0
- package/dist/execution/position-manager.js.map +1 -0
- package/dist/execution/smart-router.d.ts +90 -0
- package/dist/execution/smart-router.js +323 -0
- package/dist/execution/smart-router.js.map +1 -0
- package/dist/execution/trigger-orders.d.ts +81 -0
- package/dist/execution/trigger-orders.js +266 -0
- package/dist/execution/trigger-orders.js.map +1 -0
- package/dist/execution/twap.d.ts +87 -0
- package/dist/execution/twap.js +405 -0
- package/dist/execution/twap.js.map +1 -0
- package/dist/extensions/copilot-proxy/index.d.ts +49 -0
- package/dist/extensions/copilot-proxy/index.js +204 -0
- package/dist/extensions/copilot-proxy/index.js.map +1 -0
- package/dist/extensions/diagnostics-otel/index.d.ts +54 -0
- package/dist/extensions/diagnostics-otel/index.js +290 -0
- package/dist/extensions/diagnostics-otel/index.js.map +1 -0
- package/dist/extensions/google-auth/index.d.ts +71 -0
- package/dist/extensions/google-auth/index.js +350 -0
- package/dist/extensions/google-auth/index.js.map +1 -0
- package/dist/extensions/index.d.ts +11 -0
- package/dist/extensions/index.js +29 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/llm-task/index.d.ts +80 -0
- package/dist/extensions/llm-task/index.js +248 -0
- package/dist/extensions/llm-task/index.js.map +1 -0
- package/dist/extensions/lobster/index.d.ts +69 -0
- package/dist/extensions/lobster/index.js +178 -0
- package/dist/extensions/lobster/index.js.map +1 -0
- package/dist/extensions/memory-lancedb/index.d.ts +62 -0
- package/dist/extensions/memory-lancedb/index.js +343 -0
- package/dist/extensions/memory-lancedb/index.js.map +1 -0
- package/dist/extensions/open-prose/index.d.ts +82 -0
- package/dist/extensions/open-prose/index.js +565 -0
- package/dist/extensions/open-prose/index.js.map +1 -0
- package/dist/extensions/qwen-portal/index.d.ts +48 -0
- package/dist/extensions/qwen-portal/index.js +161 -0
- package/dist/extensions/qwen-portal/index.js.map +1 -0
- package/dist/extensions/task-runner/index.d.ts +121 -0
- package/dist/extensions/task-runner/index.js +640 -0
- package/dist/extensions/task-runner/index.js.map +1 -0
- package/dist/farcaster/client.d.ts +101 -0
- package/dist/farcaster/client.js +282 -0
- package/dist/farcaster/client.js.map +1 -0
- package/dist/farcaster/index.d.ts +4 -0
- package/dist/farcaster/index.js +21 -0
- package/dist/farcaster/index.js.map +1 -0
- package/dist/feeds/acled/index.d.ts +86 -0
- package/dist/feeds/acled/index.js +215 -0
- package/dist/feeds/acled/index.js.map +1 -0
- package/dist/feeds/agentbets/index.d.ts +17 -0
- package/dist/feeds/agentbets/index.js +137 -0
- package/dist/feeds/agentbets/index.js.map +1 -0
- package/dist/feeds/betfair/index.d.ts +132 -0
- package/dist/feeds/betfair/index.js +640 -0
- package/dist/feeds/betfair/index.js.map +1 -0
- package/dist/feeds/crypto/index.d.ts +101 -0
- package/dist/feeds/crypto/index.js +506 -0
- package/dist/feeds/crypto/index.js.map +1 -0
- package/dist/feeds/crypto/whale-tracker.d.ts +138 -0
- package/dist/feeds/crypto/whale-tracker.js +685 -0
- package/dist/feeds/crypto/whale-tracker.js.map +1 -0
- package/dist/feeds/descriptors.d.ts +14 -0
- package/dist/feeds/descriptors.js +582 -0
- package/dist/feeds/descriptors.js.map +1 -0
- package/dist/feeds/drift/index.d.ts +23 -0
- package/dist/feeds/drift/index.js +182 -0
- package/dist/feeds/drift/index.js.map +1 -0
- package/dist/feeds/drift/trading.d.ts +75 -0
- package/dist/feeds/drift/trading.js +457 -0
- package/dist/feeds/drift/trading.js.map +1 -0
- package/dist/feeds/external/index.d.ts +48 -0
- package/dist/feeds/external/index.js +575 -0
- package/dist/feeds/external/index.js.map +1 -0
- package/dist/feeds/fred/index.d.ts +134 -0
- package/dist/feeds/fred/index.js +263 -0
- package/dist/feeds/fred/index.js.map +1 -0
- package/dist/feeds/freshness.d.ts +79 -0
- package/dist/feeds/freshness.js +259 -0
- package/dist/feeds/freshness.js.map +1 -0
- package/dist/feeds/hedgehog/index.d.ts +24 -0
- package/dist/feeds/hedgehog/index.js +589 -0
- package/dist/feeds/hedgehog/index.js.map +1 -0
- package/dist/feeds/hedgehog/types.d.ts +215 -0
- package/dist/feeds/hedgehog/types.js +7 -0
- package/dist/feeds/hedgehog/types.js.map +1 -0
- package/dist/feeds/index.d.ts +38 -0
- package/dist/feeds/index.js +469 -0
- package/dist/feeds/index.js.map +1 -0
- package/dist/feeds/kalshi/index.d.ts +116 -0
- package/dist/feeds/kalshi/index.js +970 -0
- package/dist/feeds/kalshi/index.js.map +1 -0
- package/dist/feeds/manifold/index.d.ts +15 -0
- package/dist/feeds/manifold/index.js +269 -0
- package/dist/feeds/manifold/index.js.map +1 -0
- package/dist/feeds/metaculus/index.d.ts +22 -0
- package/dist/feeds/metaculus/index.js +149 -0
- package/dist/feeds/metaculus/index.js.map +1 -0
- package/dist/feeds/news/index.d.ts +20 -0
- package/dist/feeds/news/index.js +308 -0
- package/dist/feeds/news/index.js.map +1 -0
- package/dist/feeds/opinion/index.d.ts +31 -0
- package/dist/feeds/opinion/index.js +389 -0
- package/dist/feeds/opinion/index.js.map +1 -0
- package/dist/feeds/polymarket/index.d.ts +21 -0
- package/dist/feeds/polymarket/index.js +501 -0
- package/dist/feeds/polymarket/index.js.map +1 -0
- package/dist/feeds/polymarket/rtds.d.ts +40 -0
- package/dist/feeds/polymarket/rtds.js +159 -0
- package/dist/feeds/polymarket/rtds.js.map +1 -0
- package/dist/feeds/polymarket/user-ws.d.ts +64 -0
- package/dist/feeds/polymarket/user-ws.js +230 -0
- package/dist/feeds/polymarket/user-ws.js.map +1 -0
- package/dist/feeds/polymarket/whale-tracker.d.ts +152 -0
- package/dist/feeds/polymarket/whale-tracker.js +709 -0
- package/dist/feeds/polymarket/whale-tracker.js.map +1 -0
- package/dist/feeds/predictfun/index.d.ts +24 -0
- package/dist/feeds/predictfun/index.js +234 -0
- package/dist/feeds/predictfun/index.js.map +1 -0
- package/dist/feeds/predictit/index.d.ts +14 -0
- package/dist/feeds/predictit/index.js +88 -0
- package/dist/feeds/predictit/index.js.map +1 -0
- package/dist/feeds/registry.d.ts +148 -0
- package/dist/feeds/registry.js +197 -0
- package/dist/feeds/registry.js.map +1 -0
- package/dist/feeds/smarkets/index.d.ts +76 -0
- package/dist/feeds/smarkets/index.js +415 -0
- package/dist/feeds/smarkets/index.js.map +1 -0
- package/dist/feeds/virtuals/index.d.ts +92 -0
- package/dist/feeds/virtuals/index.js +341 -0
- package/dist/feeds/virtuals/index.js.map +1 -0
- package/dist/feeds/weather-nws/index.d.ts +73 -0
- package/dist/feeds/weather-nws/index.js +162 -0
- package/dist/feeds/weather-nws/index.js.map +1 -0
- package/dist/feeds/weather-openmeteo/index.d.ts +80 -0
- package/dist/feeds/weather-openmeteo/index.js +197 -0
- package/dist/feeds/weather-openmeteo/index.js.map +1 -0
- package/dist/gateway/alerts-routes.d.ts +15 -0
- package/dist/gateway/alerts-routes.js +188 -0
- package/dist/gateway/alerts-routes.js.map +1 -0
- package/dist/gateway/alt-data-routes.d.ts +15 -0
- package/dist/gateway/alt-data-routes.js +67 -0
- package/dist/gateway/alt-data-routes.js.map +1 -0
- package/dist/gateway/api-routes.d.ts +39 -0
- package/dist/gateway/api-routes.js +1028 -0
- package/dist/gateway/api-routes.js.map +1 -0
- package/dist/gateway/audit-routes.d.ts +8 -0
- package/dist/gateway/audit-routes.js +61 -0
- package/dist/gateway/audit-routes.js.map +1 -0
- package/dist/gateway/bracket-routes.d.ts +12 -0
- package/dist/gateway/bracket-routes.js +122 -0
- package/dist/gateway/bracket-routes.js.map +1 -0
- package/dist/gateway/control-ui.d.ts +45 -0
- package/dist/gateway/control-ui.js +301 -0
- package/dist/gateway/control-ui.js.map +1 -0
- package/dist/gateway/copy-trading-routes.d.ts +12 -0
- package/dist/gateway/copy-trading-routes.js +159 -0
- package/dist/gateway/copy-trading-routes.js.map +1 -0
- package/dist/gateway/cron-routes.d.ts +14 -0
- package/dist/gateway/cron-routes.js +132 -0
- package/dist/gateway/cron-routes.js.map +1 -0
- package/dist/gateway/dca-routes.d.ts +8 -0
- package/dist/gateway/dca-routes.js +179 -0
- package/dist/gateway/dca-routes.js.map +1 -0
- package/dist/gateway/embeddings-routes.d.ts +12 -0
- package/dist/gateway/embeddings-routes.js +102 -0
- package/dist/gateway/embeddings-routes.js.map +1 -0
- package/dist/gateway/feeds-routes.d.ts +34 -0
- package/dist/gateway/feeds-routes.js +167 -0
- package/dist/gateway/feeds-routes.js.map +1 -0
- package/dist/gateway/index.d.ts +100 -0
- package/dist/gateway/index.js +2321 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/monitoring-routes.d.ts +12 -0
- package/dist/gateway/monitoring-routes.js +73 -0
- package/dist/gateway/monitoring-routes.js.map +1 -0
- package/dist/gateway/opportunity-routes.d.ts +12 -0
- package/dist/gateway/opportunity-routes.js +238 -0
- package/dist/gateway/opportunity-routes.js.map +1 -0
- package/dist/gateway/payments-routes.d.ts +14 -0
- package/dist/gateway/payments-routes.js +82 -0
- package/dist/gateway/payments-routes.js.map +1 -0
- package/dist/gateway/percolator-routes.d.ts +16 -0
- package/dist/gateway/percolator-routes.js +139 -0
- package/dist/gateway/percolator-routes.js.map +1 -0
- package/dist/gateway/queue-routes.d.ts +12 -0
- package/dist/gateway/queue-routes.js +47 -0
- package/dist/gateway/queue-routes.js.map +1 -0
- package/dist/gateway/risk-routes.d.ts +12 -0
- package/dist/gateway/risk-routes.js +119 -0
- package/dist/gateway/risk-routes.js.map +1 -0
- package/dist/gateway/routing-routes.d.ts +12 -0
- package/dist/gateway/routing-routes.js +86 -0
- package/dist/gateway/routing-routes.js.map +1 -0
- package/dist/gateway/server.d.ts +215 -0
- package/dist/gateway/server.js +2287 -0
- package/dist/gateway/server.js.map +1 -0
- package/dist/gateway/shield-routes.d.ts +8 -0
- package/dist/gateway/shield-routes.js +88 -0
- package/dist/gateway/shield-routes.js.map +1 -0
- package/dist/gateway/signal-bus.d.ts +51 -0
- package/dist/gateway/signal-bus.js +64 -0
- package/dist/gateway/signal-bus.js.map +1 -0
- package/dist/gateway/trigger-routes.d.ts +12 -0
- package/dist/gateway/trigger-routes.js +127 -0
- package/dist/gateway/trigger-routes.js.map +1 -0
- package/dist/gateway/twap-routes.d.ts +12 -0
- package/dist/gateway/twap-routes.js +142 -0
- package/dist/gateway/twap-routes.js.map +1 -0
- package/dist/gateway/webhooks-routes.d.ts +31 -0
- package/dist/gateway/webhooks-routes.js +107 -0
- package/dist/gateway/webhooks-routes.js.map +1 -0
- package/dist/gateway/whale-routes.d.ts +12 -0
- package/dist/gateway/whale-routes.js +204 -0
- package/dist/gateway/whale-routes.js.map +1 -0
- package/dist/history/index.d.ts +81 -0
- package/dist/history/index.js +362 -0
- package/dist/history/index.js.map +1 -0
- package/dist/hooks/index.d.ts +279 -0
- package/dist/hooks/index.js +739 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/i18n/index.d.ts +65 -0
- package/dist/i18n/index.js +183 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/identity/erc8004.d.ts +104 -0
- package/dist/identity/erc8004.js +493 -0
- package/dist/identity/erc8004.js.map +1 -0
- package/dist/identity/index.d.ts +1 -0
- package/dist/identity/index.js +18 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +240 -0
- package/dist/index.js.map +1 -0
- package/dist/infra/index.d.ts +133 -0
- package/dist/infra/index.js +481 -0
- package/dist/infra/index.js.map +1 -0
- package/dist/infra/retry.d.ts +132 -0
- package/dist/infra/retry.js +450 -0
- package/dist/infra/retry.js.map +1 -0
- package/dist/ledger/anchor.d.ts +45 -0
- package/dist/ledger/anchor.js +271 -0
- package/dist/ledger/anchor.js.map +1 -0
- package/dist/ledger/hash.d.ts +26 -0
- package/dist/ledger/hash.js +69 -0
- package/dist/ledger/hash.js.map +1 -0
- package/dist/ledger/hooks.d.ts +107 -0
- package/dist/ledger/hooks.js +314 -0
- package/dist/ledger/hooks.js.map +1 -0
- package/dist/ledger/index.d.ts +67 -0
- package/dist/ledger/index.js +221 -0
- package/dist/ledger/index.js.map +1 -0
- package/dist/ledger/storage.d.ts +57 -0
- package/dist/ledger/storage.js +368 -0
- package/dist/ledger/storage.js.map +1 -0
- package/dist/ledger/types.d.ts +138 -0
- package/dist/ledger/types.js +16 -0
- package/dist/ledger/types.js.map +1 -0
- package/dist/link-understanding/index.d.ts +61 -0
- package/dist/link-understanding/index.js +320 -0
- package/dist/link-understanding/index.js.map +1 -0
- package/dist/logging/index.d.ts +50 -0
- package/dist/logging/index.js +255 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/macos/index.d.ts +143 -0
- package/dist/macos/index.js +587 -0
- package/dist/macos/index.js.map +1 -0
- package/dist/markdown/index.d.ts +43 -0
- package/dist/markdown/index.js +305 -0
- package/dist/markdown/index.js.map +1 -0
- package/dist/market-index/index.d.ts +51 -0
- package/dist/market-index/index.js +553 -0
- package/dist/market-index/index.js.map +1 -0
- package/dist/mcp/index.d.ts +263 -0
- package/dist/mcp/index.js +940 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/installer.d.ts +11 -0
- package/dist/mcp/installer.js +128 -0
- package/dist/mcp/installer.js.map +1 -0
- package/dist/mcp/server.d.ts +7 -0
- package/dist/mcp/server.js +172 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/media/index.d.ts +119 -0
- package/dist/media/index.js +740 -0
- package/dist/media/index.js.map +1 -0
- package/dist/memory/context.d.ts +189 -0
- package/dist/memory/context.js +541 -0
- package/dist/memory/context.js.map +1 -0
- package/dist/memory/index.d.ts +74 -0
- package/dist/memory/index.js +352 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/summarizer.d.ts +10 -0
- package/dist/memory/summarizer.js +51 -0
- package/dist/memory/summarizer.js.map +1 -0
- package/dist/memory/tokenizer.d.ts +4 -0
- package/dist/memory/tokenizer.js +61 -0
- package/dist/memory/tokenizer.js.map +1 -0
- package/dist/messages/unified.d.ts +7 -0
- package/dist/messages/unified.js +77 -0
- package/dist/messages/unified.js.map +1 -0
- package/dist/ml-pipeline/collector.d.ts +23 -0
- package/dist/ml-pipeline/collector.js +176 -0
- package/dist/ml-pipeline/collector.js.map +1 -0
- package/dist/ml-pipeline/index.d.ts +21 -0
- package/dist/ml-pipeline/index.js +72 -0
- package/dist/ml-pipeline/index.js.map +1 -0
- package/dist/ml-pipeline/trainer.d.ts +32 -0
- package/dist/ml-pipeline/trainer.js +228 -0
- package/dist/ml-pipeline/trainer.js.map +1 -0
- package/dist/ml-pipeline/types.d.ts +51 -0
- package/dist/ml-pipeline/types.js +23 -0
- package/dist/ml-pipeline/types.js.map +1 -0
- package/dist/models/adaptive.d.ts +11 -0
- package/dist/models/adaptive.js +64 -0
- package/dist/models/adaptive.js.map +1 -0
- package/dist/models/failover.d.ts +51 -0
- package/dist/models/failover.js +151 -0
- package/dist/models/failover.js.map +1 -0
- package/dist/models/index.d.ts +7 -0
- package/dist/models/index.js +13 -0
- package/dist/models/index.js.map +1 -0
- package/dist/monitoring/alerts.d.ts +185 -0
- package/dist/monitoring/alerts.js +565 -0
- package/dist/monitoring/alerts.js.map +1 -0
- package/dist/monitoring/health.d.ts +151 -0
- package/dist/monitoring/health.js +423 -0
- package/dist/monitoring/health.js.map +1 -0
- package/dist/monitoring/index.d.ts +25 -0
- package/dist/monitoring/index.js +258 -0
- package/dist/monitoring/index.js.map +1 -0
- package/dist/monitoring/metrics.d.ts +147 -0
- package/dist/monitoring/metrics.js +519 -0
- package/dist/monitoring/metrics.js.map +1 -0
- package/dist/nodes/index.d.ts +81 -0
- package/dist/nodes/index.js +475 -0
- package/dist/nodes/index.js.map +1 -0
- package/dist/opportunity/analytics.d.ts +221 -0
- package/dist/opportunity/analytics.js +678 -0
- package/dist/opportunity/analytics.js.map +1 -0
- package/dist/opportunity/combinatorial.d.ts +147 -0
- package/dist/opportunity/combinatorial.js +765 -0
- package/dist/opportunity/combinatorial.js.map +1 -0
- package/dist/opportunity/correlation.d.ts +107 -0
- package/dist/opportunity/correlation.js +410 -0
- package/dist/opportunity/correlation.js.map +1 -0
- package/dist/opportunity/executor.d.ts +108 -0
- package/dist/opportunity/executor.js +356 -0
- package/dist/opportunity/executor.js.map +1 -0
- package/dist/opportunity/index.d.ts +285 -0
- package/dist/opportunity/index.js +839 -0
- package/dist/opportunity/index.js.map +1 -0
- package/dist/opportunity/links.d.ts +87 -0
- package/dist/opportunity/links.js +344 -0
- package/dist/opportunity/links.js.map +1 -0
- package/dist/opportunity/matching.d.ts +101 -0
- package/dist/opportunity/matching.js +551 -0
- package/dist/opportunity/matching.js.map +1 -0
- package/dist/opportunity/outcomes.d.ts +74 -0
- package/dist/opportunity/outcomes.js +321 -0
- package/dist/opportunity/outcomes.js.map +1 -0
- package/dist/opportunity/risk.d.ts +128 -0
- package/dist/opportunity/risk.js +381 -0
- package/dist/opportunity/risk.js.map +1 -0
- package/dist/opportunity/scoring.d.ts +151 -0
- package/dist/opportunity/scoring.js +421 -0
- package/dist/opportunity/scoring.js.map +1 -0
- package/dist/pairing/index.d.ts +108 -0
- package/dist/pairing/index.js +431 -0
- package/dist/pairing/index.js.map +1 -0
- package/dist/payments/index.d.ts +12 -0
- package/dist/payments/index.js +34 -0
- package/dist/payments/index.js.map +1 -0
- package/dist/payments/x402/evm.d.ts +53 -0
- package/dist/payments/x402/evm.js +282 -0
- package/dist/payments/x402/evm.js.map +1 -0
- package/dist/payments/x402/index.d.ts +158 -0
- package/dist/payments/x402/index.js +531 -0
- package/dist/payments/x402/index.js.map +1 -0
- package/dist/payments/x402/solana.d.ts +51 -0
- package/dist/payments/x402/solana.js +397 -0
- package/dist/payments/x402/solana.js.map +1 -0
- package/dist/percolator/accounts.d.ts +21 -0
- package/dist/percolator/accounts.js +76 -0
- package/dist/percolator/accounts.js.map +1 -0
- package/dist/percolator/encode.d.ts +14 -0
- package/dist/percolator/encode.js +90 -0
- package/dist/percolator/encode.js.map +1 -0
- package/dist/percolator/execution.d.ts +29 -0
- package/dist/percolator/execution.js +239 -0
- package/dist/percolator/execution.js.map +1 -0
- package/dist/percolator/feed.d.ts +15 -0
- package/dist/percolator/feed.js +160 -0
- package/dist/percolator/feed.js.map +1 -0
- package/dist/percolator/index.d.ts +20 -0
- package/dist/percolator/index.js +24 -0
- package/dist/percolator/index.js.map +1 -0
- package/dist/percolator/instructions.d.ts +29 -0
- package/dist/percolator/instructions.js +52 -0
- package/dist/percolator/instructions.js.map +1 -0
- package/dist/percolator/keeper.d.ts +11 -0
- package/dist/percolator/keeper.js +83 -0
- package/dist/percolator/keeper.js.map +1 -0
- package/dist/percolator/pda.d.ts +15 -0
- package/dist/percolator/pda.js +26 -0
- package/dist/percolator/pda.js.map +1 -0
- package/dist/percolator/slab.d.ts +122 -0
- package/dist/percolator/slab.js +325 -0
- package/dist/percolator/slab.js.map +1 -0
- package/dist/percolator/tx.d.ts +27 -0
- package/dist/percolator/tx.js +77 -0
- package/dist/percolator/tx.js.map +1 -0
- package/dist/percolator/types.d.ts +51 -0
- package/dist/percolator/types.js +9 -0
- package/dist/percolator/types.js.map +1 -0
- package/dist/permissions/index.d.ts +262 -0
- package/dist/permissions/index.js +929 -0
- package/dist/permissions/index.js.map +1 -0
- package/dist/plugins/index.d.ts +158 -0
- package/dist/plugins/index.js +444 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/portfolio/index.d.ts +170 -0
- package/dist/portfolio/index.js +970 -0
- package/dist/portfolio/index.js.map +1 -0
- package/dist/presence/index.d.ts +34 -0
- package/dist/presence/index.js +124 -0
- package/dist/presence/index.js.map +1 -0
- package/dist/process/index.d.ts +82 -0
- package/dist/process/index.js +402 -0
- package/dist/process/index.js.map +1 -0
- package/dist/providers/discovery.d.ts +209 -0
- package/dist/providers/discovery.js +751 -0
- package/dist/providers/discovery.js.map +1 -0
- package/dist/providers/health.d.ts +27 -0
- package/dist/providers/health.js +80 -0
- package/dist/providers/health.js.map +1 -0
- package/dist/providers/index.d.ts +154 -0
- package/dist/providers/index.js +897 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/queue/index.d.ts +36 -0
- package/dist/queue/index.js +146 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/jobs/index.d.ts +11 -0
- package/dist/queue/jobs/index.js +32 -0
- package/dist/queue/jobs/index.js.map +1 -0
- package/dist/queue/jobs/producer.d.ts +43 -0
- package/dist/queue/jobs/producer.js +233 -0
- package/dist/queue/jobs/producer.js.map +1 -0
- package/dist/queue/jobs/types.d.ts +128 -0
- package/dist/queue/jobs/types.js +14 -0
- package/dist/queue/jobs/types.js.map +1 -0
- package/dist/queue/jobs/worker.d.ts +22 -0
- package/dist/queue/jobs/worker.js +220 -0
- package/dist/queue/jobs/worker.js.map +1 -0
- package/dist/remote/index.d.ts +136 -0
- package/dist/remote/index.js +456 -0
- package/dist/remote/index.js.map +1 -0
- package/dist/risk/circuit-breaker.d.ts +99 -0
- package/dist/risk/circuit-breaker.js +300 -0
- package/dist/risk/circuit-breaker.js.map +1 -0
- package/dist/risk/dashboard.d.ts +69 -0
- package/dist/risk/dashboard.js +127 -0
- package/dist/risk/dashboard.js.map +1 -0
- package/dist/risk/engine.d.ts +128 -0
- package/dist/risk/engine.js +311 -0
- package/dist/risk/engine.js.map +1 -0
- package/dist/risk/index.d.ts +10 -0
- package/dist/risk/index.js +38 -0
- package/dist/risk/index.js.map +1 -0
- package/dist/risk/stress.d.ts +70 -0
- package/dist/risk/stress.js +215 -0
- package/dist/risk/stress.js.map +1 -0
- package/dist/risk/var.d.ts +72 -0
- package/dist/risk/var.js +173 -0
- package/dist/risk/var.js.map +1 -0
- package/dist/risk/volatility.d.ts +61 -0
- package/dist/risk/volatility.js +132 -0
- package/dist/risk/volatility.js.map +1 -0
- package/dist/routing/index.d.ts +116 -0
- package/dist/routing/index.js +371 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/search/index.d.ts +30 -0
- package/dist/search/index.js +129 -0
- package/dist/search/index.js.map +1 -0
- package/dist/security/address-checker.d.ts +6 -0
- package/dist/security/address-checker.js +213 -0
- package/dist/security/address-checker.js.map +1 -0
- package/dist/security/code-scanner.d.ts +3 -0
- package/dist/security/code-scanner.js +190 -0
- package/dist/security/code-scanner.js.map +1 -0
- package/dist/security/index.d.ts +176 -0
- package/dist/security/index.js +498 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/sanitizer.d.ts +2 -0
- package/dist/security/sanitizer.js +135 -0
- package/dist/security/sanitizer.js.map +1 -0
- package/dist/security/scam-db.d.ts +5 -0
- package/dist/security/scam-db.js +116 -0
- package/dist/security/scam-db.js.map +1 -0
- package/dist/security/shield.d.ts +12 -0
- package/dist/security/shield.js +80 -0
- package/dist/security/shield.js.map +1 -0
- package/dist/security/tx-validator.d.ts +5 -0
- package/dist/security/tx-validator.js +115 -0
- package/dist/security/tx-validator.js.map +1 -0
- package/dist/security/types.d.ts +84 -0
- package/dist/security/types.js +6 -0
- package/dist/security/types.js.map +1 -0
- package/dist/services/alt-data/feeds/fear-greed.d.ts +14 -0
- package/dist/services/alt-data/feeds/fear-greed.js +81 -0
- package/dist/services/alt-data/feeds/fear-greed.js.map +1 -0
- package/dist/services/alt-data/feeds/funding-rates.d.ts +13 -0
- package/dist/services/alt-data/feeds/funding-rates.js +90 -0
- package/dist/services/alt-data/feeds/funding-rates.js.map +1 -0
- package/dist/services/alt-data/feeds/reddit.d.ts +13 -0
- package/dist/services/alt-data/feeds/reddit.js +112 -0
- package/dist/services/alt-data/feeds/reddit.js.map +1 -0
- package/dist/services/alt-data/index.d.ts +31 -0
- package/dist/services/alt-data/index.js +278 -0
- package/dist/services/alt-data/index.js.map +1 -0
- package/dist/services/alt-data/market-matcher.d.ts +29 -0
- package/dist/services/alt-data/market-matcher.js +157 -0
- package/dist/services/alt-data/market-matcher.js.map +1 -0
- package/dist/services/alt-data/sentiment.d.ts +11 -0
- package/dist/services/alt-data/sentiment.js +277 -0
- package/dist/services/alt-data/sentiment.js.map +1 -0
- package/dist/services/alt-data/types.d.ts +86 -0
- package/dist/services/alt-data/types.js +9 -0
- package/dist/services/alt-data/types.js.map +1 -0
- package/dist/services/feature-engineering/accessor.d.ts +19 -0
- package/dist/services/feature-engineering/accessor.js +31 -0
- package/dist/services/feature-engineering/accessor.js.map +1 -0
- package/dist/services/feature-engineering/index.d.ts +15 -0
- package/dist/services/feature-engineering/index.js +345 -0
- package/dist/services/feature-engineering/index.js.map +1 -0
- package/dist/services/feature-engineering/indicators.d.ts +90 -0
- package/dist/services/feature-engineering/indicators.js +254 -0
- package/dist/services/feature-engineering/indicators.js.map +1 -0
- package/dist/services/feature-engineering/rolling-window.d.ts +89 -0
- package/dist/services/feature-engineering/rolling-window.js +173 -0
- package/dist/services/feature-engineering/rolling-window.js.map +1 -0
- package/dist/services/feature-engineering/thresholds.d.ts +137 -0
- package/dist/services/feature-engineering/thresholds.js +280 -0
- package/dist/services/feature-engineering/thresholds.js.map +1 -0
- package/dist/services/feature-engineering/types.d.ts +138 -0
- package/dist/services/feature-engineering/types.js +6 -0
- package/dist/services/feature-engineering/types.js.map +1 -0
- package/dist/services/tick-recorder/index.d.ts +12 -0
- package/dist/services/tick-recorder/index.js +200 -0
- package/dist/services/tick-recorder/index.js.map +1 -0
- package/dist/services/tick-recorder/queries.d.ts +46 -0
- package/dist/services/tick-recorder/queries.js +291 -0
- package/dist/services/tick-recorder/queries.js.map +1 -0
- package/dist/services/tick-recorder/schema.d.ts +27 -0
- package/dist/services/tick-recorder/schema.js +185 -0
- package/dist/services/tick-recorder/schema.js.map +1 -0
- package/dist/services/tick-recorder/timescale.d.ts +27 -0
- package/dist/services/tick-recorder/timescale.js +105 -0
- package/dist/services/tick-recorder/timescale.js.map +1 -0
- package/dist/services/tick-recorder/types.d.ts +113 -0
- package/dist/services/tick-recorder/types.js +7 -0
- package/dist/services/tick-recorder/types.js.map +1 -0
- package/dist/services/tick-streamer/index.d.ts +12 -0
- package/dist/services/tick-streamer/index.js +317 -0
- package/dist/services/tick-streamer/index.js.map +1 -0
- package/dist/services/tick-streamer/types.d.ts +134 -0
- package/dist/services/tick-streamer/types.js +6 -0
- package/dist/services/tick-streamer/types.js.map +1 -0
- package/dist/session/index.d.ts +147 -0
- package/dist/session/index.js +429 -0
- package/dist/session/index.js.map +1 -0
- package/dist/sessions/index.d.ts +69 -0
- package/dist/sessions/index.js +447 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/signal-router/index.d.ts +2 -0
- package/dist/signal-router/index.js +6 -0
- package/dist/signal-router/index.js.map +1 -0
- package/dist/signal-router/router.d.ts +25 -0
- package/dist/signal-router/router.js +391 -0
- package/dist/signal-router/router.js.map +1 -0
- package/dist/signal-router/types.d.ts +64 -0
- package/dist/signal-router/types.js +9 -0
- package/dist/signal-router/types.js.map +1 -0
- package/dist/skills/bundled/acp/index.d.ts +25 -0
- package/dist/skills/bundled/acp/index.js +472 -0
- package/dist/skills/bundled/acp/index.js.map +1 -0
- package/dist/skills/bundled/agentbets/index.d.ts +15 -0
- package/dist/skills/bundled/agentbets/index.js +168 -0
- package/dist/skills/bundled/agentbets/index.js.map +1 -0
- package/dist/skills/bundled/ai-strategy/index.d.ts +21 -0
- package/dist/skills/bundled/ai-strategy/index.js +647 -0
- package/dist/skills/bundled/ai-strategy/index.js.map +1 -0
- package/dist/skills/bundled/alerts/index.d.ts +20 -0
- package/dist/skills/bundled/alerts/index.js +249 -0
- package/dist/skills/bundled/alerts/index.js.map +1 -0
- package/dist/skills/bundled/analytics/index.d.ts +17 -0
- package/dist/skills/bundled/analytics/index.js +112 -0
- package/dist/skills/bundled/analytics/index.js.map +1 -0
- package/dist/skills/bundled/arbitrage/index.d.ts +24 -0
- package/dist/skills/bundled/arbitrage/index.js +253 -0
- package/dist/skills/bundled/arbitrage/index.js.map +1 -0
- package/dist/skills/bundled/auto-reply/index.d.ts +18 -0
- package/dist/skills/bundled/auto-reply/index.js +215 -0
- package/dist/skills/bundled/auto-reply/index.js.map +1 -0
- package/dist/skills/bundled/automation/index.d.ts +19 -0
- package/dist/skills/bundled/automation/index.js +160 -0
- package/dist/skills/bundled/automation/index.js.map +1 -0
- package/dist/skills/bundled/backtest/index.d.ts +18 -0
- package/dist/skills/bundled/backtest/index.js +250 -0
- package/dist/skills/bundled/backtest/index.js.map +1 -0
- package/dist/skills/bundled/bags/index.d.ts +49 -0
- package/dist/skills/bundled/bags/index.js +1069 -0
- package/dist/skills/bundled/bags/index.js.map +1 -0
- package/dist/skills/bundled/bankr/index.d.ts +161 -0
- package/dist/skills/bundled/bankr/index.js +271 -0
- package/dist/skills/bundled/bankr/index.js.map +1 -0
- package/dist/skills/bundled/betfair/index.d.ts +24 -0
- package/dist/skills/bundled/betfair/index.js +511 -0
- package/dist/skills/bundled/betfair/index.js.map +1 -0
- package/dist/skills/bundled/binance-futures/index.d.ts +15 -0
- package/dist/skills/bundled/binance-futures/index.js +485 -0
- package/dist/skills/bundled/binance-futures/index.js.map +1 -0
- package/dist/skills/bundled/botchan/index.d.ts +130 -0
- package/dist/skills/bundled/botchan/index.js +427 -0
- package/dist/skills/bundled/botchan/index.js.map +1 -0
- package/dist/skills/bundled/bridge/index.d.ts +17 -0
- package/dist/skills/bundled/bridge/index.js +297 -0
- package/dist/skills/bundled/bridge/index.js.map +1 -0
- package/dist/skills/bundled/bybit-futures/index.d.ts +15 -0
- package/dist/skills/bundled/bybit-futures/index.js +380 -0
- package/dist/skills/bundled/bybit-futures/index.js.map +1 -0
- package/dist/skills/bundled/clanker/index.d.ts +236 -0
- package/dist/skills/bundled/clanker/index.js +759 -0
- package/dist/skills/bundled/clanker/index.js.map +1 -0
- package/dist/skills/bundled/copy-trading/index.d.ts +20 -0
- package/dist/skills/bundled/copy-trading/index.js +213 -0
- package/dist/skills/bundled/copy-trading/index.js.map +1 -0
- package/dist/skills/bundled/copy-trading-solana/index.d.ts +21 -0
- package/dist/skills/bundled/copy-trading-solana/index.js +421 -0
- package/dist/skills/bundled/copy-trading-solana/index.js.map +1 -0
- package/dist/skills/bundled/credentials/index.d.ts +17 -0
- package/dist/skills/bundled/credentials/index.js +137 -0
- package/dist/skills/bundled/credentials/index.js.map +1 -0
- package/dist/skills/bundled/crypto-hft/index.d.ts +26 -0
- package/dist/skills/bundled/crypto-hft/index.js +361 -0
- package/dist/skills/bundled/crypto-hft/index.js.map +1 -0
- package/dist/skills/bundled/dca/index.d.ts +26 -0
- package/dist/skills/bundled/dca/index.js +1342 -0
- package/dist/skills/bundled/dca/index.js.map +1 -0
- package/dist/skills/bundled/divergence/index.d.ts +19 -0
- package/dist/skills/bundled/divergence/index.js +272 -0
- package/dist/skills/bundled/divergence/index.js.map +1 -0
- package/dist/skills/bundled/doctor/index.d.ts +18 -0
- package/dist/skills/bundled/doctor/index.js +78 -0
- package/dist/skills/bundled/doctor/index.js.map +1 -0
- package/dist/skills/bundled/drift/index.d.ts +13 -0
- package/dist/skills/bundled/drift/index.js +378 -0
- package/dist/skills/bundled/drift/index.js.map +1 -0
- package/dist/skills/bundled/drift-sdk/index.d.ts +17 -0
- package/dist/skills/bundled/drift-sdk/index.js +501 -0
- package/dist/skills/bundled/drift-sdk/index.js.map +1 -0
- package/dist/skills/bundled/edge/index.d.ts +16 -0
- package/dist/skills/bundled/edge/index.js +91 -0
- package/dist/skills/bundled/edge/index.js.map +1 -0
- package/dist/skills/bundled/embeddings/index.d.ts +19 -0
- package/dist/skills/bundled/embeddings/index.js +215 -0
- package/dist/skills/bundled/embeddings/index.js.map +1 -0
- package/dist/skills/bundled/endaoment/index.d.ts +105 -0
- package/dist/skills/bundled/endaoment/index.js +285 -0
- package/dist/skills/bundled/endaoment/index.js.map +1 -0
- package/dist/skills/bundled/ens/index.d.ts +151 -0
- package/dist/skills/bundled/ens/index.js +278 -0
- package/dist/skills/bundled/ens/index.js.map +1 -0
- package/dist/skills/bundled/erc8004/index.d.ts +123 -0
- package/dist/skills/bundled/erc8004/index.js +301 -0
- package/dist/skills/bundled/erc8004/index.js.map +1 -0
- package/dist/skills/bundled/execution/index.d.ts +18 -0
- package/dist/skills/bundled/execution/index.js +358 -0
- package/dist/skills/bundled/execution/index.js.map +1 -0
- package/dist/skills/bundled/farcaster/index.d.ts +121 -0
- package/dist/skills/bundled/farcaster/index.js +314 -0
- package/dist/skills/bundled/farcaster/index.js.map +1 -0
- package/dist/skills/bundled/features/index.d.ts +17 -0
- package/dist/skills/bundled/features/index.js +305 -0
- package/dist/skills/bundled/features/index.js.map +1 -0
- package/dist/skills/bundled/feeds/index.d.ts +26 -0
- package/dist/skills/bundled/feeds/index.js +462 -0
- package/dist/skills/bundled/feeds/index.js.map +1 -0
- package/dist/skills/bundled/harden/index.d.ts +55 -0
- package/dist/skills/bundled/harden/index.js +510 -0
- package/dist/skills/bundled/harden/index.js.map +1 -0
- package/dist/skills/bundled/history/index.d.ts +21 -0
- package/dist/skills/bundled/history/index.js +195 -0
- package/dist/skills/bundled/history/index.js.map +1 -0
- package/dist/skills/bundled/hyperliquid/index.d.ts +19 -0
- package/dist/skills/bundled/hyperliquid/index.js +1280 -0
- package/dist/skills/bundled/hyperliquid/index.js.map +1 -0
- package/dist/skills/bundled/identity/index.d.ts +17 -0
- package/dist/skills/bundled/identity/index.js +223 -0
- package/dist/skills/bundled/identity/index.js.map +1 -0
- package/dist/skills/bundled/integrations/index.d.ts +17 -0
- package/dist/skills/bundled/integrations/index.js +138 -0
- package/dist/skills/bundled/integrations/index.js.map +1 -0
- package/dist/skills/bundled/jupiter/index.d.ts +41 -0
- package/dist/skills/bundled/jupiter/index.js +872 -0
- package/dist/skills/bundled/jupiter/index.js.map +1 -0
- package/dist/skills/bundled/kamino/index.d.ts +33 -0
- package/dist/skills/bundled/kamino/index.js +578 -0
- package/dist/skills/bundled/kamino/index.js.map +1 -0
- package/dist/skills/bundled/ledger/index.d.ts +14 -0
- package/dist/skills/bundled/ledger/index.js +186 -0
- package/dist/skills/bundled/ledger/index.js.map +1 -0
- package/dist/skills/bundled/market-index/index.d.ts +18 -0
- package/dist/skills/bundled/market-index/index.js +182 -0
- package/dist/skills/bundled/market-index/index.js.map +1 -0
- package/dist/skills/bundled/markets/index.d.ts +16 -0
- package/dist/skills/bundled/markets/index.js +95 -0
- package/dist/skills/bundled/markets/index.js.map +1 -0
- package/dist/skills/bundled/mcp/index.d.ts +19 -0
- package/dist/skills/bundled/mcp/index.js +212 -0
- package/dist/skills/bundled/mcp/index.js.map +1 -0
- package/dist/skills/bundled/memory/index.d.ts +20 -0
- package/dist/skills/bundled/memory/index.js +210 -0
- package/dist/skills/bundled/memory/index.js.map +1 -0
- package/dist/skills/bundled/metaculus/index.d.ts +17 -0
- package/dist/skills/bundled/metaculus/index.js +168 -0
- package/dist/skills/bundled/metaculus/index.js.map +1 -0
- package/dist/skills/bundled/meteora/index.d.ts +39 -0
- package/dist/skills/bundled/meteora/index.js +837 -0
- package/dist/skills/bundled/meteora/index.js.map +1 -0
- package/dist/skills/bundled/meteora-dbc/index.d.ts +33 -0
- package/dist/skills/bundled/meteora-dbc/index.js +993 -0
- package/dist/skills/bundled/meteora-dbc/index.js.map +1 -0
- package/dist/skills/bundled/metrics/index.d.ts +18 -0
- package/dist/skills/bundled/metrics/index.js +91 -0
- package/dist/skills/bundled/metrics/index.js.map +1 -0
- package/dist/skills/bundled/mev/index.d.ts +17 -0
- package/dist/skills/bundled/mev/index.js +108 -0
- package/dist/skills/bundled/mev/index.js.map +1 -0
- package/dist/skills/bundled/mexc-futures/index.d.ts +16 -0
- package/dist/skills/bundled/mexc-futures/index.js +389 -0
- package/dist/skills/bundled/mexc-futures/index.js.map +1 -0
- package/dist/skills/bundled/mm/index.d.ts +18 -0
- package/dist/skills/bundled/mm/index.js +315 -0
- package/dist/skills/bundled/mm/index.js.map +1 -0
- package/dist/skills/bundled/monitoring/index.d.ts +18 -0
- package/dist/skills/bundled/monitoring/index.js +146 -0
- package/dist/skills/bundled/monitoring/index.js.map +1 -0
- package/dist/skills/bundled/news/index.d.ts +17 -0
- package/dist/skills/bundled/news/index.js +161 -0
- package/dist/skills/bundled/news/index.js.map +1 -0
- package/dist/skills/bundled/onchainkit/index.d.ts +92 -0
- package/dist/skills/bundled/onchainkit/index.js +429 -0
- package/dist/skills/bundled/onchainkit/index.js.map +1 -0
- package/dist/skills/bundled/opinion/index.d.ts +12 -0
- package/dist/skills/bundled/opinion/index.js +429 -0
- package/dist/skills/bundled/opinion/index.js.map +1 -0
- package/dist/skills/bundled/opportunity/index.d.ts +25 -0
- package/dist/skills/bundled/opportunity/index.js +289 -0
- package/dist/skills/bundled/opportunity/index.js.map +1 -0
- package/dist/skills/bundled/orca/index.d.ts +12 -0
- package/dist/skills/bundled/orca/index.js +663 -0
- package/dist/skills/bundled/orca/index.js.map +1 -0
- package/dist/skills/bundled/pairing/index.d.ts +24 -0
- package/dist/skills/bundled/pairing/index.js +228 -0
- package/dist/skills/bundled/pairing/index.js.map +1 -0
- package/dist/skills/bundled/percolator/index.d.ts +20 -0
- package/dist/skills/bundled/percolator/index.js +229 -0
- package/dist/skills/bundled/percolator/index.js.map +1 -0
- package/dist/skills/bundled/permissions/index.d.ts +21 -0
- package/dist/skills/bundled/permissions/index.js +204 -0
- package/dist/skills/bundled/permissions/index.js.map +1 -0
- package/dist/skills/bundled/plugins/index.d.ts +20 -0
- package/dist/skills/bundled/plugins/index.js +209 -0
- package/dist/skills/bundled/plugins/index.js.map +1 -0
- package/dist/skills/bundled/portfolio/index.d.ts +20 -0
- package/dist/skills/bundled/portfolio/index.js +367 -0
- package/dist/skills/bundled/portfolio/index.js.map +1 -0
- package/dist/skills/bundled/portfolio-sync/index.d.ts +17 -0
- package/dist/skills/bundled/portfolio-sync/index.js +116 -0
- package/dist/skills/bundled/portfolio-sync/index.js.map +1 -0
- package/dist/skills/bundled/positions/index.d.ts +18 -0
- package/dist/skills/bundled/positions/index.js +161 -0
- package/dist/skills/bundled/positions/index.js.map +1 -0
- package/dist/skills/bundled/predictfun/index.d.ts +13 -0
- package/dist/skills/bundled/predictfun/index.js +612 -0
- package/dist/skills/bundled/predictfun/index.js.map +1 -0
- package/dist/skills/bundled/predictit/index.d.ts +16 -0
- package/dist/skills/bundled/predictit/index.js +138 -0
- package/dist/skills/bundled/predictit/index.js.map +1 -0
- package/dist/skills/bundled/presence/index.d.ts +18 -0
- package/dist/skills/bundled/presence/index.js +151 -0
- package/dist/skills/bundled/presence/index.js.map +1 -0
- package/dist/skills/bundled/processes/index.d.ts +17 -0
- package/dist/skills/bundled/processes/index.js +121 -0
- package/dist/skills/bundled/processes/index.js.map +1 -0
- package/dist/skills/bundled/pump-swarm/index.d.ts +16 -0
- package/dist/skills/bundled/pump-swarm/index.js +2235 -0
- package/dist/skills/bundled/pump-swarm/index.js.map +1 -0
- package/dist/skills/bundled/pumpfun/index.d.ts +47 -0
- package/dist/skills/bundled/pumpfun/index.js +1400 -0
- package/dist/skills/bundled/pumpfun/index.js.map +1 -0
- package/dist/skills/bundled/qmd/index.d.ts +18 -0
- package/dist/skills/bundled/qmd/index.js +116 -0
- package/dist/skills/bundled/qmd/index.js.map +1 -0
- package/dist/skills/bundled/qrcoin/index.d.ts +92 -0
- package/dist/skills/bundled/qrcoin/index.js +328 -0
- package/dist/skills/bundled/qrcoin/index.js.map +1 -0
- package/dist/skills/bundled/raydium/index.d.ts +35 -0
- package/dist/skills/bundled/raydium/index.js +695 -0
- package/dist/skills/bundled/raydium/index.js.map +1 -0
- package/dist/skills/bundled/remote/index.d.ts +19 -0
- package/dist/skills/bundled/remote/index.js +186 -0
- package/dist/skills/bundled/remote/index.js.map +1 -0
- package/dist/skills/bundled/research/index.d.ts +17 -0
- package/dist/skills/bundled/research/index.js +185 -0
- package/dist/skills/bundled/research/index.js.map +1 -0
- package/dist/skills/bundled/risk/index.d.ts +31 -0
- package/dist/skills/bundled/risk/index.js +379 -0
- package/dist/skills/bundled/risk/index.js.map +1 -0
- package/dist/skills/bundled/router/index.d.ts +17 -0
- package/dist/skills/bundled/router/index.js +160 -0
- package/dist/skills/bundled/router/index.js.map +1 -0
- package/dist/skills/bundled/routing/index.d.ts +23 -0
- package/dist/skills/bundled/routing/index.js +257 -0
- package/dist/skills/bundled/routing/index.js.map +1 -0
- package/dist/skills/bundled/sandbox/index.d.ts +18 -0
- package/dist/skills/bundled/sandbox/index.js +119 -0
- package/dist/skills/bundled/sandbox/index.js.map +1 -0
- package/dist/skills/bundled/search-config/index.d.ts +18 -0
- package/dist/skills/bundled/search-config/index.js +170 -0
- package/dist/skills/bundled/search-config/index.js.map +1 -0
- package/dist/skills/bundled/sessions/index.d.ts +29 -0
- package/dist/skills/bundled/sessions/index.js +193 -0
- package/dist/skills/bundled/sessions/index.js.map +1 -0
- package/dist/skills/bundled/shield/index.d.ts +22 -0
- package/dist/skills/bundled/shield/index.js +245 -0
- package/dist/skills/bundled/shield/index.js.map +1 -0
- package/dist/skills/bundled/signals/index.d.ts +24 -0
- package/dist/skills/bundled/signals/index.js +776 -0
- package/dist/skills/bundled/signals/index.js.map +1 -0
- package/dist/skills/bundled/sizing/index.d.ts +16 -0
- package/dist/skills/bundled/sizing/index.js +168 -0
- package/dist/skills/bundled/sizing/index.js.map +1 -0
- package/dist/skills/bundled/slippage/index.d.ts +16 -0
- package/dist/skills/bundled/slippage/index.js +111 -0
- package/dist/skills/bundled/slippage/index.js.map +1 -0
- package/dist/skills/bundled/smarkets/index.d.ts +23 -0
- package/dist/skills/bundled/smarkets/index.js +473 -0
- package/dist/skills/bundled/smarkets/index.js.map +1 -0
- package/dist/skills/bundled/strategy/index.d.ts +18 -0
- package/dist/skills/bundled/strategy/index.js +168 -0
- package/dist/skills/bundled/strategy/index.js.map +1 -0
- package/dist/skills/bundled/streaming/index.d.ts +19 -0
- package/dist/skills/bundled/streaming/index.js +147 -0
- package/dist/skills/bundled/streaming/index.js.map +1 -0
- package/dist/skills/bundled/tailscale/index.d.ts +18 -0
- package/dist/skills/bundled/tailscale/index.js +173 -0
- package/dist/skills/bundled/tailscale/index.js.map +1 -0
- package/dist/skills/bundled/ticks/index.d.ts +17 -0
- package/dist/skills/bundled/ticks/index.js +287 -0
- package/dist/skills/bundled/ticks/index.js.map +1 -0
- package/dist/skills/bundled/token-security/index.d.ts +19 -0
- package/dist/skills/bundled/token-security/index.js +138 -0
- package/dist/skills/bundled/token-security/index.js.map +1 -0
- package/dist/skills/bundled/trading-evm/index.d.ts +19 -0
- package/dist/skills/bundled/trading-evm/index.js +302 -0
- package/dist/skills/bundled/trading-evm/index.js.map +1 -0
- package/dist/skills/bundled/trading-futures/index.d.ts +14 -0
- package/dist/skills/bundled/trading-futures/index.js +874 -0
- package/dist/skills/bundled/trading-futures/index.js.map +1 -0
- package/dist/skills/bundled/trading-kalshi/index.d.ts +36 -0
- package/dist/skills/bundled/trading-kalshi/index.js +1199 -0
- package/dist/skills/bundled/trading-kalshi/index.js.map +1 -0
- package/dist/skills/bundled/trading-manifold/index.d.ts +23 -0
- package/dist/skills/bundled/trading-manifold/index.js +391 -0
- package/dist/skills/bundled/trading-manifold/index.js.map +1 -0
- package/dist/skills/bundled/trading-polymarket/index.d.ts +27 -0
- package/dist/skills/bundled/trading-polymarket/index.js +1321 -0
- package/dist/skills/bundled/trading-polymarket/index.js.map +1 -0
- package/dist/skills/bundled/trading-solana/index.d.ts +19 -0
- package/dist/skills/bundled/trading-solana/index.js +383 -0
- package/dist/skills/bundled/trading-solana/index.js.map +1 -0
- package/dist/skills/bundled/trading-system/index.d.ts +22 -0
- package/dist/skills/bundled/trading-system/index.js +355 -0
- package/dist/skills/bundled/trading-system/index.js.map +1 -0
- package/dist/skills/bundled/triggers/index.d.ts +18 -0
- package/dist/skills/bundled/triggers/index.js +172 -0
- package/dist/skills/bundled/triggers/index.js.map +1 -0
- package/dist/skills/bundled/tts/index.d.ts +16 -0
- package/dist/skills/bundled/tts/index.js +150 -0
- package/dist/skills/bundled/tts/index.js.map +1 -0
- package/dist/skills/bundled/tweet-ideas/index.d.ts +20 -0
- package/dist/skills/bundled/tweet-ideas/index.js +470 -0
- package/dist/skills/bundled/tweet-ideas/index.js.map +1 -0
- package/dist/skills/bundled/usage/index.d.ts +17 -0
- package/dist/skills/bundled/usage/index.js +145 -0
- package/dist/skills/bundled/usage/index.js.map +1 -0
- package/dist/skills/bundled/veil/index.d.ts +79 -0
- package/dist/skills/bundled/veil/index.js +322 -0
- package/dist/skills/bundled/veil/index.js.map +1 -0
- package/dist/skills/bundled/verify/index.d.ts +20 -0
- package/dist/skills/bundled/verify/index.js +157 -0
- package/dist/skills/bundled/verify/index.js.map +1 -0
- package/dist/skills/bundled/virtuals/index.d.ts +20 -0
- package/dist/skills/bundled/virtuals/index.js +255 -0
- package/dist/skills/bundled/virtuals/index.js.map +1 -0
- package/dist/skills/bundled/voice/index.d.ts +18 -0
- package/dist/skills/bundled/voice/index.js +190 -0
- package/dist/skills/bundled/voice/index.js.map +1 -0
- package/dist/skills/bundled/weather/index.d.ts +20 -0
- package/dist/skills/bundled/weather/index.js +475 -0
- package/dist/skills/bundled/weather/index.js.map +1 -0
- package/dist/skills/bundled/webhooks/index.d.ts +18 -0
- package/dist/skills/bundled/webhooks/index.js +136 -0
- package/dist/skills/bundled/webhooks/index.js.map +1 -0
- package/dist/skills/bundled/whale-tracking/index.d.ts +18 -0
- package/dist/skills/bundled/whale-tracking/index.js +441 -0
- package/dist/skills/bundled/whale-tracking/index.js.map +1 -0
- package/dist/skills/bundled/yoink/index.d.ts +78 -0
- package/dist/skills/bundled/yoink/index.js +236 -0
- package/dist/skills/bundled/yoink/index.js.map +1 -0
- package/dist/skills/executor.d.ts +117 -0
- package/dist/skills/executor.js +469 -0
- package/dist/skills/executor.js.map +1 -0
- package/dist/skills/frontmatter.d.ts +69 -0
- package/dist/skills/frontmatter.js +187 -0
- package/dist/skills/frontmatter.js.map +1 -0
- package/dist/skills/index.d.ts +150 -0
- package/dist/skills/index.js +531 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/loader.d.ts +48 -0
- package/dist/skills/loader.js +594 -0
- package/dist/skills/loader.js.map +1 -0
- package/dist/skills/registry.d.ts +94 -0
- package/dist/skills/registry.js +308 -0
- package/dist/skills/registry.js.map +1 -0
- package/dist/solana/copytrade.d.ts +116 -0
- package/dist/solana/copytrade.js +493 -0
- package/dist/solana/copytrade.js.map +1 -0
- package/dist/solana/drift.d.ts +154 -0
- package/dist/solana/drift.js +599 -0
- package/dist/solana/drift.js.map +1 -0
- package/dist/solana/jupiter.d.ts +283 -0
- package/dist/solana/jupiter.js +553 -0
- package/dist/solana/jupiter.js.map +1 -0
- package/dist/solana/kamino.d.ts +206 -0
- package/dist/solana/kamino.js +546 -0
- package/dist/solana/kamino.js.map +1 -0
- package/dist/solana/meteora-dbc.d.ts +430 -0
- package/dist/solana/meteora-dbc.js +1105 -0
- package/dist/solana/meteora-dbc.js.map +1 -0
- package/dist/solana/meteora.d.ts +232 -0
- package/dist/solana/meteora.js +682 -0
- package/dist/solana/meteora.js.map +1 -0
- package/dist/solana/orca.d.ts +163 -0
- package/dist/solana/orca.js +378 -0
- package/dist/solana/orca.js.map +1 -0
- package/dist/solana/pools.d.ts +26 -0
- package/dist/solana/pools.js +96 -0
- package/dist/solana/pools.js.map +1 -0
- package/dist/solana/pump-swarm.d.ts +349 -0
- package/dist/solana/pump-swarm.js +1663 -0
- package/dist/solana/pump-swarm.js.map +1 -0
- package/dist/solana/pumpapi.d.ts +196 -0
- package/dist/solana/pumpapi.js +462 -0
- package/dist/solana/pumpapi.js.map +1 -0
- package/dist/solana/raydium.d.ts +170 -0
- package/dist/solana/raydium.js +673 -0
- package/dist/solana/raydium.js.map +1 -0
- package/dist/solana/swarm-ai-builder.d.ts +97 -0
- package/dist/solana/swarm-ai-builder.js +571 -0
- package/dist/solana/swarm-ai-builder.js.map +1 -0
- package/dist/solana/swarm-arbitrage.d.ts +111 -0
- package/dist/solana/swarm-arbitrage.js +437 -0
- package/dist/solana/swarm-arbitrage.js.map +1 -0
- package/dist/solana/swarm-builders.d.ts +71 -0
- package/dist/solana/swarm-builders.js +402 -0
- package/dist/solana/swarm-builders.js.map +1 -0
- package/dist/solana/swarm-copytrade.d.ts +103 -0
- package/dist/solana/swarm-copytrade.js +420 -0
- package/dist/solana/swarm-copytrade.js.map +1 -0
- package/dist/solana/swarm-presets.d.ts +49 -0
- package/dist/solana/swarm-presets.js +282 -0
- package/dist/solana/swarm-presets.js.map +1 -0
- package/dist/solana/swarm-signals.d.ts +128 -0
- package/dist/solana/swarm-signals.js +529 -0
- package/dist/solana/swarm-signals.js.map +1 -0
- package/dist/solana/swarm-strategies.d.ts +230 -0
- package/dist/solana/swarm-strategies.js +611 -0
- package/dist/solana/swarm-strategies.js.map +1 -0
- package/dist/solana/tokenlist.d.ts +10 -0
- package/dist/solana/tokenlist.js +54 -0
- package/dist/solana/tokenlist.js.map +1 -0
- package/dist/solana/wallet.d.ts +12 -0
- package/dist/solana/wallet.js +90 -0
- package/dist/solana/wallet.js.map +1 -0
- package/dist/strategies/crypto-hft/index.d.ts +46 -0
- package/dist/strategies/crypto-hft/index.js +469 -0
- package/dist/strategies/crypto-hft/index.js.map +1 -0
- package/dist/strategies/crypto-hft/market-scanner.d.ts +26 -0
- package/dist/strategies/crypto-hft/market-scanner.js +177 -0
- package/dist/strategies/crypto-hft/market-scanner.js.map +1 -0
- package/dist/strategies/crypto-hft/orderbook.d.ts +37 -0
- package/dist/strategies/crypto-hft/orderbook.js +184 -0
- package/dist/strategies/crypto-hft/orderbook.js.map +1 -0
- package/dist/strategies/crypto-hft/positions.d.ts +49 -0
- package/dist/strategies/crypto-hft/positions.js +376 -0
- package/dist/strategies/crypto-hft/positions.js.map +1 -0
- package/dist/strategies/crypto-hft/presets.d.ts +11 -0
- package/dist/strategies/crypto-hft/presets.js +164 -0
- package/dist/strategies/crypto-hft/presets.js.map +1 -0
- package/dist/strategies/crypto-hft/strategies.d.ts +96 -0
- package/dist/strategies/crypto-hft/strategies.js +330 -0
- package/dist/strategies/crypto-hft/strategies.js.map +1 -0
- package/dist/strategies/crypto-hft/types.d.ts +196 -0
- package/dist/strategies/crypto-hft/types.js +32 -0
- package/dist/strategies/crypto-hft/types.js.map +1 -0
- package/dist/strategies/hft-divergence/detector.d.ts +29 -0
- package/dist/strategies/hft-divergence/detector.js +182 -0
- package/dist/strategies/hft-divergence/detector.js.map +1 -0
- package/dist/strategies/hft-divergence/index.d.ts +12 -0
- package/dist/strategies/hft-divergence/index.js +19 -0
- package/dist/strategies/hft-divergence/index.js.map +1 -0
- package/dist/strategies/hft-divergence/market-rotator.d.ts +17 -0
- package/dist/strategies/hft-divergence/market-rotator.js +128 -0
- package/dist/strategies/hft-divergence/market-rotator.js.map +1 -0
- package/dist/strategies/hft-divergence/position-manager.d.ts +35 -0
- package/dist/strategies/hft-divergence/position-manager.js +188 -0
- package/dist/strategies/hft-divergence/position-manager.js.map +1 -0
- package/dist/strategies/hft-divergence/strategy.d.ts +31 -0
- package/dist/strategies/hft-divergence/strategy.js +295 -0
- package/dist/strategies/hft-divergence/strategy.js.map +1 -0
- package/dist/strategies/hft-divergence/types.d.ts +114 -0
- package/dist/strategies/hft-divergence/types.js +10 -0
- package/dist/strategies/hft-divergence/types.js.map +1 -0
- package/dist/streaming/index.d.ts +70 -0
- package/dist/streaming/index.js +296 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/tailscale/index.d.ts +139 -0
- package/dist/tailscale/index.js +345 -0
- package/dist/tailscale/index.js.map +1 -0
- package/dist/telemetry/index.d.ts +143 -0
- package/dist/telemetry/index.js +535 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/terminal/index.d.ts +121 -0
- package/dist/terminal/index.js +548 -0
- package/dist/terminal/index.js.map +1 -0
- package/dist/token-security/index.d.ts +36 -0
- package/dist/token-security/index.js +253 -0
- package/dist/token-security/index.js.map +1 -0
- package/dist/tools/browser.d.ts +128 -0
- package/dist/tools/browser.js +459 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/canvas.d.ts +93 -0
- package/dist/tools/canvas.js +349 -0
- package/dist/tools/canvas.js.map +1 -0
- package/dist/tools/docker.d.ts +59 -0
- package/dist/tools/docker.js +191 -0
- package/dist/tools/docker.js.map +1 -0
- package/dist/tools/email.d.ts +25 -0
- package/dist/tools/email.js +131 -0
- package/dist/tools/email.js.map +1 -0
- package/dist/tools/exec.d.ts +81 -0
- package/dist/tools/exec.js +373 -0
- package/dist/tools/exec.js.map +1 -0
- package/dist/tools/files.d.ts +46 -0
- package/dist/tools/files.js +185 -0
- package/dist/tools/files.js.map +1 -0
- package/dist/tools/git.d.ts +29 -0
- package/dist/tools/git.js +105 -0
- package/dist/tools/git.js.map +1 -0
- package/dist/tools/image.d.ts +57 -0
- package/dist/tools/image.js +308 -0
- package/dist/tools/image.js.map +1 -0
- package/dist/tools/index.d.ts +39 -0
- package/dist/tools/index.js +46 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/message.d.ts +99 -0
- package/dist/tools/message.js +200 -0
- package/dist/tools/message.js.map +1 -0
- package/dist/tools/nodes.d.ts +134 -0
- package/dist/tools/nodes.js +357 -0
- package/dist/tools/nodes.js.map +1 -0
- package/dist/tools/sessions.d.ts +60 -0
- package/dist/tools/sessions.js +119 -0
- package/dist/tools/sessions.js.map +1 -0
- package/dist/tools/shell-history.d.ts +17 -0
- package/dist/tools/shell-history.js +118 -0
- package/dist/tools/shell-history.js.map +1 -0
- package/dist/tools/sms.d.ts +18 -0
- package/dist/tools/sms.js +66 -0
- package/dist/tools/sms.js.map +1 -0
- package/dist/tools/sql.d.ts +19 -0
- package/dist/tools/sql.js +91 -0
- package/dist/tools/sql.js.map +1 -0
- package/dist/tools/transcription.d.ts +13 -0
- package/dist/tools/transcription.js +99 -0
- package/dist/tools/transcription.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +69 -0
- package/dist/tools/web-fetch.js +251 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/tools/web-search.d.ts +58 -0
- package/dist/tools/web-search.js +204 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tools/webhooks.d.ts +74 -0
- package/dist/tools/webhooks.js +165 -0
- package/dist/tools/webhooks.js.map +1 -0
- package/dist/trading/accounts.d.ts +167 -0
- package/dist/trading/accounts.js +394 -0
- package/dist/trading/accounts.js.map +1 -0
- package/dist/trading/adapters/index.d.ts +27 -0
- package/dist/trading/adapters/index.js +165 -0
- package/dist/trading/adapters/index.js.map +1 -0
- package/dist/trading/backtest.d.ts +161 -0
- package/dist/trading/backtest.js +665 -0
- package/dist/trading/backtest.js.map +1 -0
- package/dist/trading/bots/index.d.ts +196 -0
- package/dist/trading/bots/index.js +688 -0
- package/dist/trading/bots/index.js.map +1 -0
- package/dist/trading/bridge.d.ts +33 -0
- package/dist/trading/bridge.js +121 -0
- package/dist/trading/bridge.js.map +1 -0
- package/dist/trading/builder.d.ts +102 -0
- package/dist/trading/builder.js +430 -0
- package/dist/trading/builder.js.map +1 -0
- package/dist/trading/copy-trading.d.ts +125 -0
- package/dist/trading/copy-trading.js +611 -0
- package/dist/trading/copy-trading.js.map +1 -0
- package/dist/trading/devtools.d.ts +172 -0
- package/dist/trading/devtools.js +425 -0
- package/dist/trading/devtools.js.map +1 -0
- package/dist/trading/futures/index.d.ts +981 -0
- package/dist/trading/futures/index.js +4011 -0
- package/dist/trading/futures/index.js.map +1 -0
- package/dist/trading/index.d.ts +102 -0
- package/dist/trading/index.js +310 -0
- package/dist/trading/index.js.map +1 -0
- package/dist/trading/kelly.d.ts +137 -0
- package/dist/trading/kelly.js +328 -0
- package/dist/trading/kelly.js.map +1 -0
- package/dist/trading/logger.d.ts +163 -0
- package/dist/trading/logger.js +424 -0
- package/dist/trading/logger.js.map +1 -0
- package/dist/trading/market-making/engine.d.ts +44 -0
- package/dist/trading/market-making/engine.js +165 -0
- package/dist/trading/market-making/engine.js.map +1 -0
- package/dist/trading/market-making/index.d.ts +10 -0
- package/dist/trading/market-making/index.js +29 -0
- package/dist/trading/market-making/index.js.map +1 -0
- package/dist/trading/market-making/strategy.d.ts +25 -0
- package/dist/trading/market-making/strategy.js +250 -0
- package/dist/trading/market-making/strategy.js.map +1 -0
- package/dist/trading/market-making/types.d.ts +92 -0
- package/dist/trading/market-making/types.js +6 -0
- package/dist/trading/market-making/types.js.map +1 -0
- package/dist/trading/ml-signals.d.ts +175 -0
- package/dist/trading/ml-signals.js +548 -0
- package/dist/trading/ml-signals.js.map +1 -0
- package/dist/trading/orchestrator.d.ts +59 -0
- package/dist/trading/orchestrator.js +199 -0
- package/dist/trading/orchestrator.js.map +1 -0
- package/dist/trading/position-bridge.d.ts +41 -0
- package/dist/trading/position-bridge.js +178 -0
- package/dist/trading/position-bridge.js.map +1 -0
- package/dist/trading/resilience.d.ts +81 -0
- package/dist/trading/resilience.js +257 -0
- package/dist/trading/resilience.js.map +1 -0
- package/dist/trading/risk.d.ts +18 -0
- package/dist/trading/risk.js +91 -0
- package/dist/trading/risk.js.map +1 -0
- package/dist/trading/safety.d.ts +114 -0
- package/dist/trading/safety.js +372 -0
- package/dist/trading/safety.js.map +1 -0
- package/dist/trading/secrets.d.ts +48 -0
- package/dist/trading/secrets.js +243 -0
- package/dist/trading/secrets.js.map +1 -0
- package/dist/trading/state.d.ts +88 -0
- package/dist/trading/state.js +221 -0
- package/dist/trading/state.js.map +1 -0
- package/dist/trading/stream.d.ts +121 -0
- package/dist/trading/stream.js +396 -0
- package/dist/trading/stream.js.map +1 -0
- package/dist/trading/tracking.d.ts +136 -0
- package/dist/trading/tracking.js +512 -0
- package/dist/trading/tracking.js.map +1 -0
- package/dist/tts/index.d.ts +28 -0
- package/dist/tts/index.js +64 -0
- package/dist/tts/index.js.map +1 -0
- package/dist/tui/index.d.ts +159 -0
- package/dist/tui/index.js +580 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/types.d.ts +1373 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/usage/index.d.ts +57 -0
- package/dist/usage/index.js +191 -0
- package/dist/usage/index.js.map +1 -0
- package/dist/utils/attachments.d.ts +12 -0
- package/dist/utils/attachments.js +104 -0
- package/dist/utils/attachments.js.map +1 -0
- package/dist/utils/config.d.ts +14 -0
- package/dist/utils/config.js +474 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/http.d.ts +22 -0
- package/dist/utils/http.js +191 -0
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/id.d.ts +21 -0
- package/dist/utils/id.js +41 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/json-utils.d.ts +201 -0
- package/dist/utils/json-utils.js +151 -0
- package/dist/utils/json-utils.js.map +1 -0
- package/dist/utils/kalshi-auth.d.ts +10 -0
- package/dist/utils/kalshi-auth.js +48 -0
- package/dist/utils/kalshi-auth.js.map +1 -0
- package/dist/utils/kelly.d.ts +153 -0
- package/dist/utils/kelly.js +322 -0
- package/dist/utils/kelly.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.js +26 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/opinion-auth.d.ts +17 -0
- package/dist/utils/opinion-auth.js +25 -0
- package/dist/utils/opinion-auth.js.map +1 -0
- package/dist/utils/polymarket-auth.d.ts +11 -0
- package/dist/utils/polymarket-auth.js +32 -0
- package/dist/utils/polymarket-auth.js.map +1 -0
- package/dist/utils/polymarket-order-signer.d.ts +118 -0
- package/dist/utils/polymarket-order-signer.js +329 -0
- package/dist/utils/polymarket-order-signer.js.map +1 -0
- package/dist/utils/polymarket-setup.d.ts +70 -0
- package/dist/utils/polymarket-setup.js +288 -0
- package/dist/utils/polymarket-setup.js.map +1 -0
- package/dist/utils/production.d.ts +112 -0
- package/dist/utils/production.js +294 -0
- package/dist/utils/production.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +77 -0
- package/dist/utils/rate-limiter.js +271 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/webhook-security.d.ts +63 -0
- package/dist/utils/webhook-security.js +183 -0
- package/dist/utils/webhook-security.js.map +1 -0
- package/dist/voice/index.d.ts +125 -0
- package/dist/voice/index.js +557 -0
- package/dist/voice/index.js.map +1 -0
- package/dist/weather/edge.d.ts +70 -0
- package/dist/weather/edge.js +281 -0
- package/dist/weather/edge.js.map +1 -0
- package/dist/weather/index.d.ts +6 -0
- package/dist/weather/index.js +23 -0
- package/dist/weather/index.js.map +1 -0
- package/dist/weather/markets.d.ts +84 -0
- package/dist/weather/markets.js +320 -0
- package/dist/weather/markets.js.map +1 -0
- package/dist/weather/noaa.d.ts +113 -0
- package/dist/weather/noaa.js +287 -0
- package/dist/weather/noaa.js.map +1 -0
- package/dist/web/index.d.ts +112 -0
- package/dist/web/index.js +639 -0
- package/dist/web/index.js.map +1 -0
- package/dist/wizard/index.d.ts +27 -0
- package/dist/wizard/index.js +186 -0
- package/dist/wizard/index.js.map +1 -0
- package/dist/workspace/index.d.ts +73 -0
- package/dist/workspace/index.js +403 -0
- package/dist/workspace/index.js.map +1 -0
- package/package.json +168 -0
|
@@ -0,0 +1,2321 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Gateway Module - Clawdbot-style WebSocket gateway protocol
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - WebSocket server for remote connections
|
|
7
|
+
* - Binary and JSON message support
|
|
8
|
+
* - Connection authentication
|
|
9
|
+
* - Heartbeat/keepalive
|
|
10
|
+
* - Message routing
|
|
11
|
+
* - Session management
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
47
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.GatewayServer = exports.GatewayOpcodes = void 0;
|
|
51
|
+
exports.createGatewayServer = createGatewayServer;
|
|
52
|
+
exports.createGateway = createGateway;
|
|
53
|
+
const ws_1 = require("ws");
|
|
54
|
+
const http = __importStar(require("http"));
|
|
55
|
+
const https = __importStar(require("https"));
|
|
56
|
+
const events_1 = require("events");
|
|
57
|
+
const crypto_1 = require("crypto");
|
|
58
|
+
const logger_1 = require("../utils/logger");
|
|
59
|
+
const security_1 = require("../security");
|
|
60
|
+
const server_1 = require("./server");
|
|
61
|
+
const x402_1 = require("../payments/x402");
|
|
62
|
+
const db_1 = require("../db");
|
|
63
|
+
const migrations_1 = require("../db/migrations");
|
|
64
|
+
const acp_1 = require("../acp");
|
|
65
|
+
const order_persistence_1 = require("../execution/order-persistence");
|
|
66
|
+
const dca_persistence_1 = require("../execution/dca-persistence");
|
|
67
|
+
const feeds_1 = require("../feeds");
|
|
68
|
+
const sessions_1 = require("../sessions");
|
|
69
|
+
const agents_1 = require("../agents");
|
|
70
|
+
const channels_1 = require("../channels");
|
|
71
|
+
const pairing_1 = require("../pairing");
|
|
72
|
+
const memory_1 = require("../memory");
|
|
73
|
+
const cron_1 = require("../cron");
|
|
74
|
+
const credentials_1 = require("../credentials");
|
|
75
|
+
const registry_1 = require("../commands/registry");
|
|
76
|
+
const automation_1 = require("../automation");
|
|
77
|
+
const webhooks_1 = require("../tools/webhooks");
|
|
78
|
+
const providers_1 = require("../providers");
|
|
79
|
+
const monitoring_1 = require("../monitoring");
|
|
80
|
+
const embeddings_1 = require("../embeddings");
|
|
81
|
+
const market_index_1 = require("../market-index");
|
|
82
|
+
const opportunity_1 = require("../opportunity");
|
|
83
|
+
const whale_tracker_1 = require("../feeds/polymarket/whale-tracker");
|
|
84
|
+
const copy_trading_1 = require("../trading/copy-trading");
|
|
85
|
+
const smart_router_1 = require("../execution/smart-router");
|
|
86
|
+
const execution_1 = require("../execution");
|
|
87
|
+
const alerts_1 = require("../alerts");
|
|
88
|
+
const executor_1 = require("../opportunity/executor");
|
|
89
|
+
const tick_recorder_1 = require("../services/tick-recorder");
|
|
90
|
+
const tick_streamer_1 = require("../services/tick-streamer");
|
|
91
|
+
const bittensor_1 = require("../bittensor");
|
|
92
|
+
const server_2 = require("../bittensor/server");
|
|
93
|
+
const bittensor_2 = require("../agents/handlers/bittensor");
|
|
94
|
+
const feature_engineering_1 = require("../services/feature-engineering");
|
|
95
|
+
const alt_data_1 = require("../services/alt-data");
|
|
96
|
+
const signal_router_1 = require("../signal-router");
|
|
97
|
+
const ml_pipeline_1 = require("../ml-pipeline");
|
|
98
|
+
const jobs_1 = require("../queue/jobs");
|
|
99
|
+
const chokidar_1 = __importDefault(require("chokidar"));
|
|
100
|
+
const path_1 = __importDefault(require("path"));
|
|
101
|
+
const config_1 = require("../utils/config");
|
|
102
|
+
const http_1 = require("../utils/http");
|
|
103
|
+
const unified_1 = require("../messages/unified");
|
|
104
|
+
const production_1 = require("../utils/production");
|
|
105
|
+
const signal_bus_1 = require("./signal-bus");
|
|
106
|
+
const orchestrator_1 = require("../trading/orchestrator");
|
|
107
|
+
const safety_1 = require("../trading/safety");
|
|
108
|
+
const circuit_breaker_1 = require("../execution/circuit-breaker");
|
|
109
|
+
const api_routes_1 = require("./api-routes");
|
|
110
|
+
const position_manager_1 = require("../execution/position-manager");
|
|
111
|
+
const position_bridge_1 = require("../trading/position-bridge");
|
|
112
|
+
const backtest_1 = require("../trading/backtest");
|
|
113
|
+
const bots_1 = require("../trading/bots");
|
|
114
|
+
const builder_1 = require("../trading/builder");
|
|
115
|
+
const logger_2 = require("../trading/logger");
|
|
116
|
+
const market_making_1 = require("../trading/market-making");
|
|
117
|
+
exports.GatewayOpcodes = {
|
|
118
|
+
DISPATCH: 0,
|
|
119
|
+
HEARTBEAT: 1,
|
|
120
|
+
IDENTIFY: 2,
|
|
121
|
+
RESUME: 3,
|
|
122
|
+
RECONNECT: 7,
|
|
123
|
+
INVALID_SESSION: 9,
|
|
124
|
+
HELLO: 10,
|
|
125
|
+
HEARTBEAT_ACK: 11,
|
|
126
|
+
};
|
|
127
|
+
// =============================================================================
|
|
128
|
+
// GATEWAY SERVER
|
|
129
|
+
// =============================================================================
|
|
130
|
+
class GatewayServer extends events_1.EventEmitter {
|
|
131
|
+
config;
|
|
132
|
+
server = null;
|
|
133
|
+
wss = null;
|
|
134
|
+
clients = new Map();
|
|
135
|
+
heartbeatChecker = null;
|
|
136
|
+
sequence = 0;
|
|
137
|
+
constructor(config = {}) {
|
|
138
|
+
super();
|
|
139
|
+
this.config = {
|
|
140
|
+
port: config.port ?? 8080,
|
|
141
|
+
host: config.host ?? '0.0.0.0',
|
|
142
|
+
path: config.path ?? '/gateway',
|
|
143
|
+
heartbeatInterval: config.heartbeatInterval ?? 45000,
|
|
144
|
+
maxClients: config.maxClients ?? 1000,
|
|
145
|
+
auth: config.auth ?? { type: 'none' },
|
|
146
|
+
...config,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/** Start the gateway server */
|
|
150
|
+
async start() {
|
|
151
|
+
return new Promise((resolve) => {
|
|
152
|
+
// Create HTTP(S) server
|
|
153
|
+
if (this.config.ssl) {
|
|
154
|
+
const fs = require('fs');
|
|
155
|
+
this.server = https.createServer({
|
|
156
|
+
cert: fs.readFileSync(this.config.ssl.cert),
|
|
157
|
+
key: fs.readFileSync(this.config.ssl.key),
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
this.server = http.createServer();
|
|
162
|
+
}
|
|
163
|
+
// Create WebSocket server
|
|
164
|
+
this.wss = new ws_1.WebSocketServer({
|
|
165
|
+
server: this.server,
|
|
166
|
+
path: this.config.path,
|
|
167
|
+
});
|
|
168
|
+
this.wss.on('connection', (socket, request) => {
|
|
169
|
+
this.handleConnection(socket, request);
|
|
170
|
+
});
|
|
171
|
+
// Start heartbeat checker
|
|
172
|
+
this.heartbeatChecker = setInterval(() => {
|
|
173
|
+
this.checkHeartbeats();
|
|
174
|
+
}, this.config.heartbeatInterval);
|
|
175
|
+
// Start listening
|
|
176
|
+
this.server.listen(this.config.port, this.config.host, () => {
|
|
177
|
+
const protocol = this.config.ssl ? 'wss' : 'ws';
|
|
178
|
+
logger_1.logger.info({
|
|
179
|
+
url: `${protocol}://${this.config.host}:${this.config.port}${this.config.path}`,
|
|
180
|
+
}, 'Gateway server started');
|
|
181
|
+
resolve();
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
/** Stop the gateway server */
|
|
186
|
+
async stop() {
|
|
187
|
+
if (this.heartbeatChecker) {
|
|
188
|
+
clearInterval(this.heartbeatChecker);
|
|
189
|
+
this.heartbeatChecker = null;
|
|
190
|
+
}
|
|
191
|
+
for (const client of this.clients.values()) {
|
|
192
|
+
this.send(client, { op: exports.GatewayOpcodes.RECONNECT });
|
|
193
|
+
client.socket.close(1001, 'Server shutting down');
|
|
194
|
+
}
|
|
195
|
+
this.clients.clear();
|
|
196
|
+
return new Promise((resolve) => {
|
|
197
|
+
if (this.wss) {
|
|
198
|
+
this.wss.close(() => {
|
|
199
|
+
if (this.server) {
|
|
200
|
+
this.server.close(() => {
|
|
201
|
+
logger_1.logger.info('Gateway server stopped');
|
|
202
|
+
resolve();
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
resolve();
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
resolve();
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
/** Send message to a client */
|
|
216
|
+
send(client, message) {
|
|
217
|
+
if (client.socket.readyState === ws_1.WebSocket.OPEN) {
|
|
218
|
+
client.socket.send(JSON.stringify(message));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/** Broadcast to all authenticated clients */
|
|
222
|
+
broadcast(message, filter) {
|
|
223
|
+
for (const client of this.clients.values()) {
|
|
224
|
+
if (client.authenticated && (!filter || filter(client))) {
|
|
225
|
+
this.send(client, message);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/** Dispatch an event to all clients */
|
|
230
|
+
dispatch(event, data) {
|
|
231
|
+
this.sequence++;
|
|
232
|
+
this.broadcast({
|
|
233
|
+
op: exports.GatewayOpcodes.DISPATCH,
|
|
234
|
+
t: event,
|
|
235
|
+
d: data,
|
|
236
|
+
s: this.sequence,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
/** Get connected clients */
|
|
240
|
+
getClients() {
|
|
241
|
+
return Array.from(this.clients.values());
|
|
242
|
+
}
|
|
243
|
+
/** Get client by ID */
|
|
244
|
+
getClient(id) {
|
|
245
|
+
return this.clients.get(id);
|
|
246
|
+
}
|
|
247
|
+
/** Disconnect a client */
|
|
248
|
+
disconnect(id, code = 1000, reason = '') {
|
|
249
|
+
const client = this.clients.get(id);
|
|
250
|
+
if (client) {
|
|
251
|
+
client.socket.close(code, reason);
|
|
252
|
+
this.clients.delete(id);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
handleConnection(socket, request) {
|
|
256
|
+
if (this.clients.size >= this.config.maxClients) {
|
|
257
|
+
socket.close(1013, 'Server at capacity');
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
const clientId = this.generateClientId();
|
|
261
|
+
const client = {
|
|
262
|
+
id: clientId,
|
|
263
|
+
socket,
|
|
264
|
+
authenticated: this.config.auth?.type === 'none',
|
|
265
|
+
metadata: {},
|
|
266
|
+
connectedAt: new Date(),
|
|
267
|
+
lastHeartbeat: new Date(),
|
|
268
|
+
};
|
|
269
|
+
this.clients.set(clientId, client);
|
|
270
|
+
logger_1.logger.debug({ clientId }, 'Gateway client connected');
|
|
271
|
+
this.send(client, {
|
|
272
|
+
op: exports.GatewayOpcodes.HELLO,
|
|
273
|
+
d: {
|
|
274
|
+
heartbeat_interval: this.config.heartbeatInterval,
|
|
275
|
+
session_id: clientId,
|
|
276
|
+
},
|
|
277
|
+
});
|
|
278
|
+
socket.on('message', (data) => {
|
|
279
|
+
this.handleMessage(client, data);
|
|
280
|
+
});
|
|
281
|
+
socket.on('close', (code, reason) => {
|
|
282
|
+
this.clients.delete(clientId);
|
|
283
|
+
this.emit('disconnect', { clientId, code, reason: reason.toString() });
|
|
284
|
+
logger_1.logger.debug({ clientId, code }, 'Gateway client disconnected');
|
|
285
|
+
});
|
|
286
|
+
socket.on('error', (error) => {
|
|
287
|
+
logger_1.logger.error({ clientId, error }, 'Gateway client error');
|
|
288
|
+
});
|
|
289
|
+
this.emit('connection', client);
|
|
290
|
+
}
|
|
291
|
+
handleMessage(client, data) {
|
|
292
|
+
try {
|
|
293
|
+
const message = JSON.parse(data.toString());
|
|
294
|
+
switch (message.op) {
|
|
295
|
+
case exports.GatewayOpcodes.HEARTBEAT:
|
|
296
|
+
client.lastHeartbeat = new Date();
|
|
297
|
+
this.send(client, { op: exports.GatewayOpcodes.HEARTBEAT_ACK });
|
|
298
|
+
break;
|
|
299
|
+
case exports.GatewayOpcodes.IDENTIFY:
|
|
300
|
+
this.handleIdentify(client, message.d);
|
|
301
|
+
break;
|
|
302
|
+
case exports.GatewayOpcodes.RESUME:
|
|
303
|
+
client.authenticated = true;
|
|
304
|
+
this.emit('resume', { client, data: message.d });
|
|
305
|
+
break;
|
|
306
|
+
case exports.GatewayOpcodes.DISPATCH:
|
|
307
|
+
if (client.authenticated) {
|
|
308
|
+
this.emit('message', {
|
|
309
|
+
client,
|
|
310
|
+
event: message.t,
|
|
311
|
+
data: message.d,
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
logger_1.logger.warn({ clientId: client.id, error }, 'Invalid gateway message');
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
handleIdentify(client, data = {}) {
|
|
322
|
+
let authenticated = false;
|
|
323
|
+
switch (this.config.auth?.type) {
|
|
324
|
+
case 'none':
|
|
325
|
+
authenticated = true;
|
|
326
|
+
break;
|
|
327
|
+
case 'token':
|
|
328
|
+
authenticated = this.config.auth.tokens?.includes(data.token || '') ?? false;
|
|
329
|
+
break;
|
|
330
|
+
case 'basic':
|
|
331
|
+
if (data.username && data.password) {
|
|
332
|
+
authenticated = this.config.auth.users?.[data.username] === data.password;
|
|
333
|
+
}
|
|
334
|
+
break;
|
|
335
|
+
}
|
|
336
|
+
if (authenticated) {
|
|
337
|
+
client.authenticated = true;
|
|
338
|
+
client.metadata = { ...data, password: undefined };
|
|
339
|
+
this.emit('identify', client);
|
|
340
|
+
this.dispatch('READY', { session_id: client.id });
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
this.send(client, { op: exports.GatewayOpcodes.INVALID_SESSION, d: false });
|
|
344
|
+
client.socket.close(4001, 'Authentication failed');
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
checkHeartbeats() {
|
|
348
|
+
const timeout = this.config.heartbeatInterval * 2;
|
|
349
|
+
const now = Date.now();
|
|
350
|
+
for (const [id, client] of this.clients) {
|
|
351
|
+
if (now - client.lastHeartbeat.getTime() > timeout) {
|
|
352
|
+
logger_1.logger.debug({ clientId: id }, 'Client heartbeat timeout');
|
|
353
|
+
client.socket.close(4009, 'Heartbeat timeout');
|
|
354
|
+
this.clients.delete(id);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
generateClientId() {
|
|
359
|
+
return (0, crypto_1.randomBytes)(16).toString('hex');
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
exports.GatewayServer = GatewayServer;
|
|
363
|
+
// =============================================================================
|
|
364
|
+
// FACTORY
|
|
365
|
+
// =============================================================================
|
|
366
|
+
function createGatewayServer(config) {
|
|
367
|
+
return new GatewayServer(config);
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Create the full application gateway (HTTP + channels + agent).
|
|
371
|
+
*
|
|
372
|
+
* This wires together:
|
|
373
|
+
* - HTTP/WebSocket server (for webchat + health)
|
|
374
|
+
* - Channel manager (Telegram/Slack/etc)
|
|
375
|
+
* - Sessions, feeds, DB, memory
|
|
376
|
+
* - Command registry and command handling
|
|
377
|
+
* - Agent manager for non-command messages
|
|
378
|
+
*/
|
|
379
|
+
async function createGateway(config) {
|
|
380
|
+
let currentConfig = config;
|
|
381
|
+
(0, http_1.configureHttpClient)(currentConfig.http);
|
|
382
|
+
const configPath = process.env.CLODDS_CONFIG_PATH || config_1.CONFIG_FILE;
|
|
383
|
+
const db = await (0, db_1.initDatabase)();
|
|
384
|
+
try {
|
|
385
|
+
const runner = (0, migrations_1.createMigrationRunner)(db);
|
|
386
|
+
runner.migrate();
|
|
387
|
+
}
|
|
388
|
+
catch (error) {
|
|
389
|
+
logger_1.logger.error({ error }, 'Database migration failed');
|
|
390
|
+
throw error;
|
|
391
|
+
}
|
|
392
|
+
// Initialize ACP (Agent Commerce Protocol) with database
|
|
393
|
+
(0, acp_1.initACP)(db);
|
|
394
|
+
// Initialize order persistence for TWAP and bracket orders
|
|
395
|
+
(0, order_persistence_1.initOrderPersistence)(db);
|
|
396
|
+
(0, dca_persistence_1.initDCAPersistence)(db);
|
|
397
|
+
let feeds = await (0, feeds_1.createFeedManager)(config.feeds);
|
|
398
|
+
const sessions = (0, sessions_1.createSessionManager)(db, config.session);
|
|
399
|
+
const memory = (0, memory_1.createMemoryService)(db);
|
|
400
|
+
const pairing = (0, pairing_1.createPairingService)(db);
|
|
401
|
+
const webhookManager = (0, automation_1.createWebhookManager)();
|
|
402
|
+
const providerManager = (0, providers_1.createProviders)({
|
|
403
|
+
anthropicKey: process.env.ANTHROPIC_API_KEY,
|
|
404
|
+
openaiKey: process.env.OPENAI_API_KEY,
|
|
405
|
+
ollamaUrl: process.env.OLLAMA_URL,
|
|
406
|
+
groqKey: process.env.GROQ_API_KEY,
|
|
407
|
+
togetherKey: process.env.TOGETHER_API_KEY,
|
|
408
|
+
fireworksKey: process.env.FIREWORKS_API_KEY,
|
|
409
|
+
geminiKey: process.env.GEMINI_API_KEY,
|
|
410
|
+
});
|
|
411
|
+
const providerHealth = providerManager.list().length > 0
|
|
412
|
+
? (0, providers_1.createProviderHealthMonitor)(providerManager)
|
|
413
|
+
: null;
|
|
414
|
+
let monitoring = null;
|
|
415
|
+
const commands = (0, registry_1.createCommandRegistry)();
|
|
416
|
+
commands.registerMany((0, registry_1.createDefaultCommands)());
|
|
417
|
+
const httpGateway = (0, server_1.createServer)({ ...config.gateway, x402: config.x402 }, webhookManager, db);
|
|
418
|
+
let channels = null;
|
|
419
|
+
const watchers = [];
|
|
420
|
+
let started = false;
|
|
421
|
+
let reloadInFlight = null;
|
|
422
|
+
let pendingReload = false;
|
|
423
|
+
let channelRateLimitCleanupInterval = null;
|
|
424
|
+
let positionPriceUpdateInterval = null;
|
|
425
|
+
let marketCacheCleanupInterval = null;
|
|
426
|
+
let marketIndexSyncInterval = null;
|
|
427
|
+
const channelRateLimiters = new Map();
|
|
428
|
+
const embeddings = (0, embeddings_1.createEmbeddingsService)(db);
|
|
429
|
+
const marketIndex = (0, market_index_1.createMarketIndexService)(db, embeddings, {
|
|
430
|
+
platformWeights: config.marketIndex?.platformWeights,
|
|
431
|
+
});
|
|
432
|
+
const cronCredentials = (0, credentials_1.createCredentialsManager)(db);
|
|
433
|
+
let cronService = null;
|
|
434
|
+
// Create opportunity finder for cross-platform arbitrage detection
|
|
435
|
+
const opportunityFinder = config.opportunityFinder?.enabled !== false
|
|
436
|
+
? (0, opportunity_1.createOpportunityFinder)(db, feeds, embeddings, {
|
|
437
|
+
minEdge: config.opportunityFinder?.minEdge ?? 0.5,
|
|
438
|
+
minLiquidity: config.opportunityFinder?.minLiquidity ?? 100,
|
|
439
|
+
platforms: config.opportunityFinder?.platforms,
|
|
440
|
+
realtime: config.opportunityFinder?.realtime ?? false,
|
|
441
|
+
scanIntervalMs: config.opportunityFinder?.scanIntervalMs ?? 10000,
|
|
442
|
+
semanticMatching: config.opportunityFinder?.semanticMatching ?? true,
|
|
443
|
+
similarityThreshold: config.opportunityFinder?.similarityThreshold ?? 0.85,
|
|
444
|
+
includeInternal: config.opportunityFinder?.includeInternal ?? true,
|
|
445
|
+
includeCross: config.opportunityFinder?.includeCross ?? true,
|
|
446
|
+
includeEdge: config.opportunityFinder?.includeEdge ?? true,
|
|
447
|
+
})
|
|
448
|
+
: null;
|
|
449
|
+
// Create whale tracker for monitoring large trades
|
|
450
|
+
let whaleTracker = config.whaleTracking?.enabled
|
|
451
|
+
? (0, whale_tracker_1.createWhaleTracker)({
|
|
452
|
+
minTradeSize: config.whaleTracking?.minTradeSize ?? 10000,
|
|
453
|
+
minPositionSize: config.whaleTracking?.minPositionSize ?? 50000,
|
|
454
|
+
enableRealtime: config.whaleTracking?.realtime ?? true,
|
|
455
|
+
})
|
|
456
|
+
: null;
|
|
457
|
+
// Create Bittensor mining service if enabled
|
|
458
|
+
let bittensorService = null;
|
|
459
|
+
if (config.bittensor?.enabled) {
|
|
460
|
+
const btConfig = {
|
|
461
|
+
enabled: true,
|
|
462
|
+
network: config.bittensor.network ?? 'mainnet',
|
|
463
|
+
subtensorUrl: config.bittensor.subtensorUrl,
|
|
464
|
+
coldkeyPath: config.bittensor.coldkeyPath,
|
|
465
|
+
coldkeyPassword: config.bittensor.coldkeyPassword,
|
|
466
|
+
pythonPath: config.bittensor.pythonPath,
|
|
467
|
+
subnets: config.bittensor.subnets,
|
|
468
|
+
earningsPollIntervalMs: config.bittensor.earningsPollIntervalMs,
|
|
469
|
+
taoPriceUsd: config.bittensor.taoPriceUsd,
|
|
470
|
+
};
|
|
471
|
+
bittensorService = (0, bittensor_1.createBittensorService)(btConfig, db);
|
|
472
|
+
(0, bittensor_2.setBittensorService)(bittensorService);
|
|
473
|
+
const bittensorRouter = (0, server_2.createBittensorRouter)(bittensorService);
|
|
474
|
+
httpGateway.setBittensorRouter(bittensorRouter);
|
|
475
|
+
logger_1.logger.info({ network: btConfig.network }, 'Bittensor service created');
|
|
476
|
+
}
|
|
477
|
+
// Create Percolator on-chain perps service if enabled
|
|
478
|
+
let percolatorService = null;
|
|
479
|
+
if (config.feeds?.percolator?.enabled) {
|
|
480
|
+
const { createPercolatorService } = await Promise.resolve().then(() => __importStar(require('../percolator/index.js')));
|
|
481
|
+
percolatorService = createPercolatorService(config.feeds.percolator);
|
|
482
|
+
// Wire Percolator HTTP API router
|
|
483
|
+
const { createPercolatorRouter } = await Promise.resolve().then(() => __importStar(require('./percolator-routes.js')));
|
|
484
|
+
httpGateway.setPercolatorRouter(createPercolatorRouter(percolatorService));
|
|
485
|
+
logger_1.logger.info({ slab: config.feeds.percolator.slabAddress }, 'Percolator service created');
|
|
486
|
+
}
|
|
487
|
+
// Wire Shield HTTP API router (always available — no credentials needed)
|
|
488
|
+
{
|
|
489
|
+
const { createShieldRouter } = await Promise.resolve().then(() => __importStar(require('./shield-routes.js')));
|
|
490
|
+
httpGateway.setShieldRouter(createShieldRouter());
|
|
491
|
+
}
|
|
492
|
+
// Wire Token Audit HTTP API router (always available — GoPlus is free)
|
|
493
|
+
{
|
|
494
|
+
const { createAuditRouter } = await Promise.resolve().then(() => __importStar(require('./audit-routes.js')));
|
|
495
|
+
httpGateway.setAuditRouter(createAuditRouter());
|
|
496
|
+
}
|
|
497
|
+
// Wire DCA HTTP API router (DCA persistence already initialized above)
|
|
498
|
+
{
|
|
499
|
+
const { createDCARouter } = await Promise.resolve().then(() => __importStar(require('./dca-routes.js')));
|
|
500
|
+
httpGateway.setDCARouter(createDCARouter());
|
|
501
|
+
}
|
|
502
|
+
// Create alt-data sentiment pipeline if enabled
|
|
503
|
+
let altDataService = null;
|
|
504
|
+
// Create execution service for real trading
|
|
505
|
+
let executionService = null;
|
|
506
|
+
if (config.trading?.enabled) {
|
|
507
|
+
const poly = config.trading.polymarket;
|
|
508
|
+
const kalshi = config.trading.kalshi;
|
|
509
|
+
const opinionCfg = config.trading.opinion;
|
|
510
|
+
const hasPolymarketCreds = poly?.address && poly?.apiKey && poly?.apiSecret && poly?.apiPassphrase;
|
|
511
|
+
const hasKalshiCreds = kalshi?.apiKeyId && kalshi?.privateKeyPem;
|
|
512
|
+
const hasOpinionCreds = opinionCfg?.apiKey && opinionCfg?.privateKey && opinionCfg?.vaultAddress;
|
|
513
|
+
const predictfunCfg = config.trading?.predictfun;
|
|
514
|
+
const hasPredictFunCreds = !!predictfunCfg?.privateKey;
|
|
515
|
+
if (hasPolymarketCreds || hasKalshiCreds || hasOpinionCreds || hasPredictFunCreds) {
|
|
516
|
+
executionService = (0, execution_1.createExecutionService)({
|
|
517
|
+
polymarket: hasPolymarketCreds ? {
|
|
518
|
+
address: poly.address,
|
|
519
|
+
apiKey: poly.apiKey,
|
|
520
|
+
apiSecret: poly.apiSecret,
|
|
521
|
+
apiPassphrase: poly.apiPassphrase,
|
|
522
|
+
privateKey: poly.privateKey,
|
|
523
|
+
funderAddress: poly?.funderAddress || poly.address,
|
|
524
|
+
signatureType: poly?.signatureType,
|
|
525
|
+
} : undefined,
|
|
526
|
+
kalshi: hasKalshiCreds ? {
|
|
527
|
+
apiKeyId: kalshi.apiKeyId,
|
|
528
|
+
privateKeyPem: kalshi.privateKeyPem,
|
|
529
|
+
} : undefined,
|
|
530
|
+
opinion: hasOpinionCreds ? {
|
|
531
|
+
apiKey: opinionCfg.apiKey,
|
|
532
|
+
privateKey: opinionCfg.privateKey,
|
|
533
|
+
multiSigAddress: opinionCfg.vaultAddress,
|
|
534
|
+
rpcUrl: opinionCfg.rpcUrl,
|
|
535
|
+
} : undefined,
|
|
536
|
+
predictfun: hasPredictFunCreds ? {
|
|
537
|
+
privateKey: predictfunCfg.privateKey,
|
|
538
|
+
predictAccount: predictfunCfg.predictAccount,
|
|
539
|
+
rpcUrl: predictfunCfg.rpcUrl,
|
|
540
|
+
apiKey: predictfunCfg.apiKey,
|
|
541
|
+
} : undefined,
|
|
542
|
+
maxOrderSize: config.trading.maxOrderSize ?? 1000,
|
|
543
|
+
dryRun: config.trading.dryRun ?? false,
|
|
544
|
+
});
|
|
545
|
+
logger_1.logger.info({
|
|
546
|
+
dryRun: config.trading.dryRun ?? false,
|
|
547
|
+
polymarket: !!hasPolymarketCreds,
|
|
548
|
+
kalshi: !!hasKalshiCreds,
|
|
549
|
+
opinion: !!hasOpinionCreds,
|
|
550
|
+
predictfun: !!hasPredictFunCreds,
|
|
551
|
+
}, 'Execution service initialized');
|
|
552
|
+
}
|
|
553
|
+
else {
|
|
554
|
+
logger_1.logger.warn('Trading enabled but no platform credentials configured');
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
// Wire safety + circuit breaker + orchestrator around execution service.
|
|
558
|
+
// By reassigning executionService, all downstream consumers (signal router,
|
|
559
|
+
// copy trading, arbitrage executor) automatically get safety-checked execution.
|
|
560
|
+
let orchestrator = null;
|
|
561
|
+
let safetyManager = null;
|
|
562
|
+
if (executionService) {
|
|
563
|
+
// Circuit breaker: execution-level error rate + loss tracking
|
|
564
|
+
const circuitBreaker = (0, circuit_breaker_1.createCircuitBreaker)({
|
|
565
|
+
maxLossUsd: config.trading?.maxDailyLoss ?? 1000,
|
|
566
|
+
maxConsecutiveLosses: 5,
|
|
567
|
+
maxErrorRate: 0.5,
|
|
568
|
+
resetTimeoutMs: 3600_000,
|
|
569
|
+
});
|
|
570
|
+
executionService.setCircuitBreaker(circuitBreaker);
|
|
571
|
+
// Safety manager: daily loss limits, drawdown, concentration checks
|
|
572
|
+
safetyManager = (0, safety_1.createSafetyManager)(db, {
|
|
573
|
+
dailyLossLimit: config.trading?.maxDailyLoss ?? 500,
|
|
574
|
+
maxDrawdownPct: 20,
|
|
575
|
+
maxConcentrationPct: 25,
|
|
576
|
+
maxSameDirectionPositions: 5,
|
|
577
|
+
});
|
|
578
|
+
// Orchestrator wraps execution with pre-trade safety validation
|
|
579
|
+
orchestrator = (0, orchestrator_1.createTradingOrchestrator)({
|
|
580
|
+
execution: executionService,
|
|
581
|
+
safety: safetyManager,
|
|
582
|
+
db,
|
|
583
|
+
});
|
|
584
|
+
// Replace raw execution with guarded version for all downstream consumers
|
|
585
|
+
executionService = orchestrator.execution;
|
|
586
|
+
logger_1.logger.info('Trading orchestrator wired: safety manager + circuit breaker active');
|
|
587
|
+
}
|
|
588
|
+
// Position manager + bridge: automated TP/SL/trailing stop exits.
|
|
589
|
+
// executeClose callback is created first, then passed to the PM config,
|
|
590
|
+
// so triggers fire close orders through the (guarded) execution service.
|
|
591
|
+
let positionManager = null;
|
|
592
|
+
let positionBridge = null;
|
|
593
|
+
if (executionService) {
|
|
594
|
+
const executeClose = (0, position_bridge_1.createPositionCloseCallback)(executionService);
|
|
595
|
+
positionManager = (0, position_manager_1.createPositionManager)({ executeClose });
|
|
596
|
+
logger_1.logger.info('Position manager created with auto-close callback');
|
|
597
|
+
}
|
|
598
|
+
// Execution queue setup — reads from config.queue or env vars.
|
|
599
|
+
// Decouples gateway from execution: orders go through BullMQ.
|
|
600
|
+
// Only agent tool handlers use the queued wrapper; other services
|
|
601
|
+
// (copy trading, arbitrage executor) keep using the direct service
|
|
602
|
+
// since they need the full ExecutionService interface.
|
|
603
|
+
let executionProducer = null;
|
|
604
|
+
let queuedExecutionRef = null;
|
|
605
|
+
const queueRedisHost = config.queue?.redis?.host || process.env.REDIS_HOST;
|
|
606
|
+
const queueEnabled = config.queue?.enabled ?? !!queueRedisHost;
|
|
607
|
+
if (queueEnabled && queueRedisHost && executionService) {
|
|
608
|
+
try {
|
|
609
|
+
const queueRedisPort = config.queue?.redis?.port
|
|
610
|
+
?? parseInt(process.env.REDIS_PORT || '6379', 10);
|
|
611
|
+
const queueRedisPassword = config.queue?.redis?.password
|
|
612
|
+
|| process.env.REDIS_PASSWORD || undefined;
|
|
613
|
+
const queueTimeoutMs = config.queue?.timeoutMs
|
|
614
|
+
?? parseInt(process.env.EXECUTION_QUEUE_TIMEOUT_MS || '30000', 10);
|
|
615
|
+
executionProducer = (0, jobs_1.createExecutionProducer)({
|
|
616
|
+
redis: {
|
|
617
|
+
host: queueRedisHost,
|
|
618
|
+
port: queueRedisPort,
|
|
619
|
+
password: queueRedisPassword,
|
|
620
|
+
maxRetriesPerRequest: null,
|
|
621
|
+
},
|
|
622
|
+
defaultTimeoutMs: queueTimeoutMs,
|
|
623
|
+
});
|
|
624
|
+
// Create queue-based wrapper for agent tool handlers only
|
|
625
|
+
queuedExecutionRef = (0, jobs_1.createQueuedExecutionService)(executionProducer);
|
|
626
|
+
logger_1.logger.info({ redisHost: queueRedisHost, redisPort: queueRedisPort }, 'Execution queue enabled - agent orders will be processed via BullMQ worker');
|
|
627
|
+
}
|
|
628
|
+
catch (error) {
|
|
629
|
+
logger_1.logger.warn({ error }, 'Failed to create execution queue producer - falling back to direct execution');
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
// Create copy trading service
|
|
633
|
+
let copyTrading = null;
|
|
634
|
+
if (config.copyTrading?.enabled && whaleTracker) {
|
|
635
|
+
copyTrading = (0, copy_trading_1.createCopyTradingService)(whaleTracker, executionService, {
|
|
636
|
+
followedAddresses: config.copyTrading?.followedAddresses ?? [],
|
|
637
|
+
sizingMode: config.copyTrading?.sizingMode ?? 'fixed',
|
|
638
|
+
fixedSize: config.copyTrading?.fixedSize ?? 100,
|
|
639
|
+
proportionMultiplier: config.copyTrading?.proportionalMultiplier ?? 0.1,
|
|
640
|
+
portfolioPercentage: config.copyTrading?.portfolioPercentage ?? 1,
|
|
641
|
+
maxPositionSize: config.copyTrading?.maxPositionSize ?? 500,
|
|
642
|
+
copyDelayMs: config.copyTrading?.copyDelayMs ?? 5000,
|
|
643
|
+
dryRun: executionService ? (config.copyTrading?.dryRun ?? false) : true,
|
|
644
|
+
});
|
|
645
|
+
}
|
|
646
|
+
// Create smart router for order routing
|
|
647
|
+
const smartRouter = config.smartRouting?.enabled !== false
|
|
648
|
+
? (0, smart_router_1.createSmartRouter)(feeds, {
|
|
649
|
+
mode: config.smartRouting?.mode ?? 'balanced',
|
|
650
|
+
enabledPlatforms: config.smartRouting?.platforms ?? ['polymarket', 'kalshi'],
|
|
651
|
+
maxSlippage: config.smartRouting?.maxSlippage ?? 1,
|
|
652
|
+
preferMaker: config.smartRouting?.preferMaker ?? true,
|
|
653
|
+
allowSplitting: config.smartRouting?.allowSplitting ?? false,
|
|
654
|
+
})
|
|
655
|
+
: null;
|
|
656
|
+
// Wire TWAP + Bracket + Trigger order routers (require executionService)
|
|
657
|
+
if (executionService) {
|
|
658
|
+
const { createTwapRouter } = await Promise.resolve().then(() => __importStar(require('./twap-routes.js')));
|
|
659
|
+
httpGateway.setTwapRouter(createTwapRouter({ execution: executionService }));
|
|
660
|
+
const { createBracketRouter } = await Promise.resolve().then(() => __importStar(require('./bracket-routes.js')));
|
|
661
|
+
httpGateway.setBracketRouter(createBracketRouter({ execution: executionService }));
|
|
662
|
+
const { createTriggerOrderManager } = await Promise.resolve().then(() => __importStar(require('../execution/trigger-orders.js')));
|
|
663
|
+
const triggerManager = createTriggerOrderManager(executionService, feeds);
|
|
664
|
+
const { createTriggerRouter } = await Promise.resolve().then(() => __importStar(require('./trigger-routes.js')));
|
|
665
|
+
httpGateway.setTriggerRouter(createTriggerRouter({ manager: triggerManager }));
|
|
666
|
+
triggerManager.start();
|
|
667
|
+
logger_1.logger.info('TWAP, Bracket, Trigger order APIs wired');
|
|
668
|
+
}
|
|
669
|
+
// Wire Copy Trading router (requires copyTrading service)
|
|
670
|
+
if (copyTrading) {
|
|
671
|
+
const { createCopyTradingRouter } = await Promise.resolve().then(() => __importStar(require('./copy-trading-routes.js')));
|
|
672
|
+
httpGateway.setCopyTradingRouter(createCopyTradingRouter({ service: copyTrading }));
|
|
673
|
+
logger_1.logger.info('Copy Trading API wired');
|
|
674
|
+
}
|
|
675
|
+
// Wire Opportunity Finder router
|
|
676
|
+
if (opportunityFinder) {
|
|
677
|
+
const { createOpportunityRouter } = await Promise.resolve().then(() => __importStar(require('./opportunity-routes.js')));
|
|
678
|
+
httpGateway.setOpportunityRouter(createOpportunityRouter({ finder: opportunityFinder }));
|
|
679
|
+
logger_1.logger.info('Opportunity Finder API wired');
|
|
680
|
+
}
|
|
681
|
+
// Wire Whale Tracker router
|
|
682
|
+
if (whaleTracker) {
|
|
683
|
+
const { createWhaleRouter } = await Promise.resolve().then(() => __importStar(require('./whale-routes.js')));
|
|
684
|
+
httpGateway.setWhaleRouter(createWhaleRouter({ tracker: whaleTracker }));
|
|
685
|
+
logger_1.logger.info('Whale Tracker API wired');
|
|
686
|
+
}
|
|
687
|
+
// Wire Risk Engine router (requires safetyManager for risk context)
|
|
688
|
+
if (executionService && safetyManager) {
|
|
689
|
+
const { createRiskEngine } = await Promise.resolve().then(() => __importStar(require('../risk/engine.js')));
|
|
690
|
+
const riskContext = {
|
|
691
|
+
tradingContext: { maxOrderSize: config.trading?.maxOrderSize ?? 1000 },
|
|
692
|
+
db: {
|
|
693
|
+
getUser: (userId) => db.getUser(userId),
|
|
694
|
+
getPositions: (userId) => db.getPositions(userId),
|
|
695
|
+
},
|
|
696
|
+
};
|
|
697
|
+
const riskEngine = createRiskEngine({ initialBankroll: 10000 }, { riskContext, safetyManager });
|
|
698
|
+
const { createRiskRouter } = await Promise.resolve().then(() => __importStar(require('./risk-routes.js')));
|
|
699
|
+
httpGateway.setRiskRouter(createRiskRouter({ engine: riskEngine }));
|
|
700
|
+
logger_1.logger.info('Risk Engine API wired');
|
|
701
|
+
}
|
|
702
|
+
// Wire Smart Router API (requires smartRouter)
|
|
703
|
+
if (smartRouter) {
|
|
704
|
+
const { createRoutingRouter } = await Promise.resolve().then(() => __importStar(require('./routing-routes.js')));
|
|
705
|
+
httpGateway.setRoutingRouter(createRoutingRouter({ router: smartRouter }));
|
|
706
|
+
logger_1.logger.info('Smart Router API wired');
|
|
707
|
+
}
|
|
708
|
+
// Wire Feeds Manager API (always available)
|
|
709
|
+
{
|
|
710
|
+
const { createFeedsRouter } = await Promise.resolve().then(() => __importStar(require('./feeds-routes.js')));
|
|
711
|
+
httpGateway.setFeedsRouter(createFeedsRouter({ feeds: feeds }));
|
|
712
|
+
logger_1.logger.info('Feeds Manager API wired');
|
|
713
|
+
}
|
|
714
|
+
// Wire Monitoring API (providerHealth may be null)
|
|
715
|
+
{
|
|
716
|
+
const { createMonitoringRouter } = await Promise.resolve().then(() => __importStar(require('./monitoring-routes.js')));
|
|
717
|
+
httpGateway.setMonitoringRouter(createMonitoringRouter({ providerHealth }));
|
|
718
|
+
logger_1.logger.info('Monitoring API wired');
|
|
719
|
+
}
|
|
720
|
+
// Wire Alt Data API (lazy — altDataService created later in start())
|
|
721
|
+
{
|
|
722
|
+
const { createAltDataRouter } = await Promise.resolve().then(() => __importStar(require('./alt-data-routes.js')));
|
|
723
|
+
httpGateway.setAltDataRouter(createAltDataRouter({ getService: () => altDataService }));
|
|
724
|
+
logger_1.logger.info('Alt Data API wired');
|
|
725
|
+
}
|
|
726
|
+
// Wire Alerts API (lazy — alertService may not be instantiated)
|
|
727
|
+
{
|
|
728
|
+
const { createAlertsRouter } = await Promise.resolve().then(() => __importStar(require('./alerts-routes.js')));
|
|
729
|
+
httpGateway.setAlertsRouter(createAlertsRouter({ getService: () => null }));
|
|
730
|
+
logger_1.logger.info('Alerts API wired (service injected when available)');
|
|
731
|
+
}
|
|
732
|
+
// Wire Execution Queue API (requires Redis / executionProducer)
|
|
733
|
+
if (executionProducer) {
|
|
734
|
+
const { createQueueRouter } = await Promise.resolve().then(() => __importStar(require('./queue-routes.js')));
|
|
735
|
+
httpGateway.setQueueRouter(createQueueRouter({ producer: executionProducer }));
|
|
736
|
+
logger_1.logger.info('Execution Queue API wired');
|
|
737
|
+
}
|
|
738
|
+
// Wire Webhooks API
|
|
739
|
+
{
|
|
740
|
+
const { createWebhooksRouter } = await Promise.resolve().then(() => __importStar(require('./webhooks-routes.js')));
|
|
741
|
+
httpGateway.setWebhooksRouter(createWebhooksRouter({ manager: webhookManager }));
|
|
742
|
+
logger_1.logger.info('Webhooks API wired');
|
|
743
|
+
}
|
|
744
|
+
// Wire Payments/x402 API (lazy — x402Client created later)
|
|
745
|
+
{
|
|
746
|
+
const { createPaymentsRouter } = await Promise.resolve().then(() => __importStar(require('./payments-routes.js')));
|
|
747
|
+
httpGateway.setPaymentsRouter(createPaymentsRouter({ getClient: () => x402Client }));
|
|
748
|
+
logger_1.logger.info('Payments API wired');
|
|
749
|
+
}
|
|
750
|
+
// Wire Embeddings API (always available)
|
|
751
|
+
{
|
|
752
|
+
const { createEmbeddingsRouter } = await Promise.resolve().then(() => __importStar(require('./embeddings-routes.js')));
|
|
753
|
+
httpGateway.setEmbeddingsRouter(createEmbeddingsRouter({ embeddings }));
|
|
754
|
+
logger_1.logger.info('Embeddings API wired');
|
|
755
|
+
}
|
|
756
|
+
// Wire Cron Service API (lazy — cronService created in startCronService())
|
|
757
|
+
{
|
|
758
|
+
const { createCronRouter } = await Promise.resolve().then(() => __importStar(require('./cron-routes.js')));
|
|
759
|
+
httpGateway.setCronRouter(createCronRouter({ getService: () => cronService }));
|
|
760
|
+
logger_1.logger.info('Cron Service API wired');
|
|
761
|
+
}
|
|
762
|
+
// Realtime alerts service (created after sendMessage is defined)
|
|
763
|
+
let realtimeAlerts = null;
|
|
764
|
+
let whaleTrackerCleanup = null;
|
|
765
|
+
let opportunityFinderCleanup = null;
|
|
766
|
+
// Auto-arbitrage executor
|
|
767
|
+
let arbitrageExecutor = null;
|
|
768
|
+
// Signal router — routes signals to execution
|
|
769
|
+
let signalRouter = null;
|
|
770
|
+
// ML training pipeline — learn from signal outcomes
|
|
771
|
+
let mlPipeline = null;
|
|
772
|
+
// Tick recorder for historical data
|
|
773
|
+
let tickRecorder = null;
|
|
774
|
+
// Tick streamer for real-time WebSocket streaming
|
|
775
|
+
let tickStreamer = null;
|
|
776
|
+
// Feature engineering for computing trading indicators
|
|
777
|
+
let featureEngine = null;
|
|
778
|
+
// Bot manager — strategy lifecycle (start/stop/pause/resume)
|
|
779
|
+
let botManager = null;
|
|
780
|
+
// Trade logger — records fills and PnL
|
|
781
|
+
let tradeLogger = null;
|
|
782
|
+
// Strategy builder — template-based + NL strategy creation
|
|
783
|
+
let strategyBuilder = null;
|
|
784
|
+
const sendMessage = async (message) => {
|
|
785
|
+
if (!channels) {
|
|
786
|
+
logger_1.logger.warn({ platform: message.platform }, 'Channel manager not ready; dropping message');
|
|
787
|
+
return null;
|
|
788
|
+
}
|
|
789
|
+
return channels.send(message);
|
|
790
|
+
};
|
|
791
|
+
const editMessage = async (message) => {
|
|
792
|
+
if (!channels) {
|
|
793
|
+
logger_1.logger.warn({ platform: message.platform }, 'Channel manager not ready; dropping edit');
|
|
794
|
+
return;
|
|
795
|
+
}
|
|
796
|
+
await channels.edit(message);
|
|
797
|
+
};
|
|
798
|
+
const deleteMessage = async (message) => {
|
|
799
|
+
if (!channels) {
|
|
800
|
+
logger_1.logger.warn({ platform: message.platform }, 'Channel manager not ready; dropping delete');
|
|
801
|
+
return;
|
|
802
|
+
}
|
|
803
|
+
await channels.delete(message);
|
|
804
|
+
};
|
|
805
|
+
const reactMessage = async (message) => {
|
|
806
|
+
if (!channels) {
|
|
807
|
+
logger_1.logger.warn({ platform: message.platform }, 'Channel manager not ready; dropping reaction');
|
|
808
|
+
return;
|
|
809
|
+
}
|
|
810
|
+
await channels.react(message);
|
|
811
|
+
};
|
|
812
|
+
const createPoll = async (message) => {
|
|
813
|
+
if (!channels) {
|
|
814
|
+
logger_1.logger.warn({ platform: message.platform }, 'Channel manager not ready; dropping poll');
|
|
815
|
+
return null;
|
|
816
|
+
}
|
|
817
|
+
return channels.sendPoll(message);
|
|
818
|
+
};
|
|
819
|
+
// Initialize realtime alerts if enabled
|
|
820
|
+
if (config.realtimeAlerts?.enabled) {
|
|
821
|
+
realtimeAlerts = (0, alerts_1.createRealtimeAlertsService)(sendMessage, {
|
|
822
|
+
enabled: true,
|
|
823
|
+
targets: config.realtimeAlerts.targets?.map(t => ({
|
|
824
|
+
platform: t.platform,
|
|
825
|
+
chatId: t.chatId,
|
|
826
|
+
accountId: t.accountId,
|
|
827
|
+
})),
|
|
828
|
+
whaleTrades: config.realtimeAlerts.whaleTrades,
|
|
829
|
+
arbitrage: config.realtimeAlerts.arbitrage,
|
|
830
|
+
priceMovement: config.realtimeAlerts.priceMovement,
|
|
831
|
+
copyTrading: config.realtimeAlerts.copyTrading,
|
|
832
|
+
});
|
|
833
|
+
// Connect to whale tracker if available
|
|
834
|
+
if (whaleTracker) {
|
|
835
|
+
whaleTrackerCleanup = (0, alerts_1.connectWhaleTracker)(realtimeAlerts, whaleTracker);
|
|
836
|
+
}
|
|
837
|
+
// Connect to opportunity finder if available
|
|
838
|
+
if (opportunityFinder) {
|
|
839
|
+
opportunityFinderCleanup = (0, alerts_1.connectOpportunityFinder)(realtimeAlerts, opportunityFinder);
|
|
840
|
+
}
|
|
841
|
+
logger_1.logger.info({ targets: config.realtimeAlerts.targets?.length ?? 0 }, 'Realtime alerts service initialized');
|
|
842
|
+
}
|
|
843
|
+
// Initialize auto-arbitrage executor if enabled
|
|
844
|
+
if (config.arbitrageExecution?.enabled && opportunityFinder) {
|
|
845
|
+
const wantsDryRun = config.arbitrageExecution?.dryRun ?? false;
|
|
846
|
+
const effectiveDryRun = executionService ? wantsDryRun : true;
|
|
847
|
+
if (!executionService && !wantsDryRun) {
|
|
848
|
+
logger_1.logger.warn('arbitrageExecution.dryRun=false but no execution service available - forcing dry run');
|
|
849
|
+
}
|
|
850
|
+
arbitrageExecutor = (0, executor_1.createOpportunityExecutor)(opportunityFinder, executionService, {
|
|
851
|
+
dryRun: effectiveDryRun,
|
|
852
|
+
minEdge: config.arbitrageExecution?.minEdge ?? 1.0,
|
|
853
|
+
minLiquidity: config.arbitrageExecution?.minLiquidity ?? 500,
|
|
854
|
+
maxPositionSize: config.arbitrageExecution?.maxPositionSize ?? 100,
|
|
855
|
+
maxDailyLoss: config.arbitrageExecution?.maxDailyLoss ?? 500,
|
|
856
|
+
maxConcurrentPositions: config.arbitrageExecution?.maxConcurrentPositions ?? 3,
|
|
857
|
+
enabledPlatforms: config.arbitrageExecution?.platforms ?? ['polymarket', 'kalshi'],
|
|
858
|
+
preferMakerOrders: config.arbitrageExecution?.preferMakerOrders ?? true,
|
|
859
|
+
confirmationDelayMs: config.arbitrageExecution?.confirmationDelayMs ?? 0,
|
|
860
|
+
}, smartRouter);
|
|
861
|
+
logger_1.logger.info({ dryRun: effectiveDryRun, hasExecutionService: !!executionService }, 'Arbitrage executor initialized');
|
|
862
|
+
}
|
|
863
|
+
// Initialize ML pipeline if enabled (before signal router so model is available)
|
|
864
|
+
if (config.mlPipeline?.enabled) {
|
|
865
|
+
mlPipeline = (0, ml_pipeline_1.createMLPipeline)(db, config.mlPipeline);
|
|
866
|
+
logger_1.logger.info('ML training pipeline initialized');
|
|
867
|
+
}
|
|
868
|
+
// Initialize signal router if enabled
|
|
869
|
+
const signalRouterCfg = config.signalRouter;
|
|
870
|
+
if (signalRouterCfg?.enabled) {
|
|
871
|
+
const mlModel = (config.mlPipeline?.useMLConfidence !== false && mlPipeline)
|
|
872
|
+
? mlPipeline.getModel()
|
|
873
|
+
: null;
|
|
874
|
+
signalRouter = (0, signal_router_1.createSignalRouter)(executionService, signalRouterCfg, smartRouter, mlModel);
|
|
875
|
+
logger_1.logger.info({ dryRun: signalRouterCfg.dryRun ?? true, mlEnabled: !!mlModel }, 'Signal router initialized');
|
|
876
|
+
}
|
|
877
|
+
// Initialize tick recorder if enabled
|
|
878
|
+
if (config.tickRecorder?.enabled && config.tickRecorder.connectionString) {
|
|
879
|
+
tickRecorder = (0, tick_recorder_1.createTickRecorder)({
|
|
880
|
+
enabled: true,
|
|
881
|
+
connectionString: config.tickRecorder.connectionString,
|
|
882
|
+
batchSize: config.tickRecorder.batchSize,
|
|
883
|
+
flushIntervalMs: config.tickRecorder.flushIntervalMs,
|
|
884
|
+
retentionDays: config.tickRecorder.retentionDays,
|
|
885
|
+
platforms: config.tickRecorder.platforms,
|
|
886
|
+
});
|
|
887
|
+
logger_1.logger.info({ platforms: config.tickRecorder.platforms ?? 'all' }, 'Tick recorder initialized (will start with gateway)');
|
|
888
|
+
}
|
|
889
|
+
// Initialize tick streamer for real-time WebSocket streaming
|
|
890
|
+
tickStreamer = (0, tick_streamer_1.createTickStreamer)({
|
|
891
|
+
maxSubscriptionsPerClient: 100,
|
|
892
|
+
pingIntervalMs: 30000,
|
|
893
|
+
connectionTimeoutMs: 60000,
|
|
894
|
+
});
|
|
895
|
+
// Initialize feature engineering for computing trading indicators
|
|
896
|
+
featureEngine = (0, feature_engineering_1.createFeatureEngineering)({
|
|
897
|
+
tickWindowSize: 100,
|
|
898
|
+
orderbookWindowSize: 50,
|
|
899
|
+
momentumLookback: 20,
|
|
900
|
+
volatilityLookback: 50,
|
|
901
|
+
});
|
|
902
|
+
// Make feature engine available globally for other services
|
|
903
|
+
(0, feature_engineering_1.setFeatureEngine)(featureEngine);
|
|
904
|
+
// ── Signal Bus: single subscription point for all feed consumers ──────────
|
|
905
|
+
const signalBus = (0, signal_bus_1.createSignalBus)();
|
|
906
|
+
// Tick consumers (error-isolated via signal bus)
|
|
907
|
+
signalBus.onTick((update) => tickRecorder?.recordTick(update));
|
|
908
|
+
signalBus.onTick((update) => {
|
|
909
|
+
if (tickStreamer && update.outcomeId) {
|
|
910
|
+
tickStreamer.broadcastTick({
|
|
911
|
+
platform: update.platform,
|
|
912
|
+
marketId: update.marketId,
|
|
913
|
+
outcomeId: update.outcomeId,
|
|
914
|
+
price: update.price,
|
|
915
|
+
prevPrice: update.prevPrice ?? null,
|
|
916
|
+
timestamp: update.timestamp,
|
|
917
|
+
});
|
|
918
|
+
}
|
|
919
|
+
});
|
|
920
|
+
signalBus.onTick((update) => {
|
|
921
|
+
if (featureEngine && update.outcomeId) {
|
|
922
|
+
featureEngine.processTick({
|
|
923
|
+
platform: update.platform,
|
|
924
|
+
marketId: update.marketId,
|
|
925
|
+
outcomeId: update.outcomeId,
|
|
926
|
+
price: update.price,
|
|
927
|
+
prevPrice: update.prevPrice ?? null,
|
|
928
|
+
timestamp: update.timestamp,
|
|
929
|
+
});
|
|
930
|
+
}
|
|
931
|
+
});
|
|
932
|
+
// Orderbook consumers
|
|
933
|
+
signalBus.onOrderbook((update) => tickRecorder?.recordOrderbook(update));
|
|
934
|
+
signalBus.onOrderbook((update) => {
|
|
935
|
+
if (tickStreamer) {
|
|
936
|
+
tickStreamer.broadcastOrderbook({
|
|
937
|
+
platform: update.platform,
|
|
938
|
+
marketId: update.marketId,
|
|
939
|
+
outcomeId: update.outcomeId,
|
|
940
|
+
bids: update.bids,
|
|
941
|
+
asks: update.asks,
|
|
942
|
+
spread: update.spread ?? null,
|
|
943
|
+
midPrice: update.midPrice ?? null,
|
|
944
|
+
timestamp: update.timestamp,
|
|
945
|
+
});
|
|
946
|
+
}
|
|
947
|
+
});
|
|
948
|
+
signalBus.onOrderbook((update) => {
|
|
949
|
+
if (featureEngine) {
|
|
950
|
+
featureEngine.processOrderbook({
|
|
951
|
+
platform: update.platform,
|
|
952
|
+
marketId: update.marketId,
|
|
953
|
+
outcomeId: update.outcomeId,
|
|
954
|
+
bids: update.bids,
|
|
955
|
+
asks: update.asks,
|
|
956
|
+
timestamp: update.timestamp,
|
|
957
|
+
});
|
|
958
|
+
}
|
|
959
|
+
});
|
|
960
|
+
// Log feature signals for observability (consumers can subscribe via signalBus.onSignal)
|
|
961
|
+
signalBus.onSignal((signal) => {
|
|
962
|
+
logger_1.logger.debug({ type: signal.type, platform: signal.platform, market: signal.marketId, strength: signal.strength, direction: signal.direction }, 'Trading signal emitted');
|
|
963
|
+
});
|
|
964
|
+
// Connect feature engine signal output → signal bus
|
|
965
|
+
featureEngine.setEmitter(signalBus);
|
|
966
|
+
// Connect feeds → signal bus (single subscription point)
|
|
967
|
+
signalBus.connectFeeds(feeds);
|
|
968
|
+
logger_1.logger.info('Signal bus wired: feeds → tick/orderbook/signal consumers');
|
|
969
|
+
// Create position bridge (wires signal bus ticks → PM price updates,
|
|
970
|
+
// signal router fills → PM position tracking, PM close events → cleanup)
|
|
971
|
+
if (positionManager) {
|
|
972
|
+
positionBridge = (0, position_bridge_1.createPositionBridge)({
|
|
973
|
+
positionManager,
|
|
974
|
+
signalBus,
|
|
975
|
+
signalRouter,
|
|
976
|
+
});
|
|
977
|
+
logger_1.logger.info('Position bridge created');
|
|
978
|
+
}
|
|
979
|
+
// Initialize x402 client for outbound payments (agent-to-agent)
|
|
980
|
+
let x402Client = null;
|
|
981
|
+
if (config.x402?.enabled && (config.x402.evmPrivateKey || config.x402.solanaPrivateKey)) {
|
|
982
|
+
x402Client = (0, x402_1.createX402Client)({
|
|
983
|
+
network: config.x402.network,
|
|
984
|
+
evmPrivateKey: config.x402.evmPrivateKey,
|
|
985
|
+
solanaPrivateKey: config.x402.solanaPrivateKey,
|
|
986
|
+
autoApproveLimit: config.x402.autoApproveLimit,
|
|
987
|
+
dryRun: config.x402.dryRun,
|
|
988
|
+
});
|
|
989
|
+
logger_1.logger.info('x402 client initialized for outbound payments');
|
|
990
|
+
}
|
|
991
|
+
const startMonitoring = () => {
|
|
992
|
+
monitoring?.stop();
|
|
993
|
+
monitoring = (0, monitoring_1.createMonitoringService)({
|
|
994
|
+
config: currentConfig.monitoring,
|
|
995
|
+
providerHealth,
|
|
996
|
+
sendMessage,
|
|
997
|
+
resolveAccountId: (target) => {
|
|
998
|
+
if (target.accountId)
|
|
999
|
+
return target.accountId;
|
|
1000
|
+
if (!target.platform || !target.chatId)
|
|
1001
|
+
return undefined;
|
|
1002
|
+
const session = db.getLatestSessionForChat(target.platform, target.chatId);
|
|
1003
|
+
return session?.accountId;
|
|
1004
|
+
},
|
|
1005
|
+
});
|
|
1006
|
+
monitoring.start();
|
|
1007
|
+
};
|
|
1008
|
+
async function startCronService() {
|
|
1009
|
+
const cronEnabled = currentConfig.cron?.enabled !== false;
|
|
1010
|
+
if (!cronEnabled) {
|
|
1011
|
+
cronService?.stop();
|
|
1012
|
+
cronService = null;
|
|
1013
|
+
logger_1.logger.info('Cron service disabled');
|
|
1014
|
+
return;
|
|
1015
|
+
}
|
|
1016
|
+
cronService?.stop();
|
|
1017
|
+
cronService = (0, cron_1.createCronService)({
|
|
1018
|
+
db,
|
|
1019
|
+
feeds,
|
|
1020
|
+
sendMessage,
|
|
1021
|
+
credentials: cronCredentials,
|
|
1022
|
+
config: currentConfig,
|
|
1023
|
+
});
|
|
1024
|
+
await cronService.start();
|
|
1025
|
+
}
|
|
1026
|
+
async function updatePositionPrices() {
|
|
1027
|
+
const positions = db.listPositionsForPricing();
|
|
1028
|
+
if (positions.length === 0)
|
|
1029
|
+
return;
|
|
1030
|
+
const grouped = new Map();
|
|
1031
|
+
for (const position of positions) {
|
|
1032
|
+
const key = `${position.platform}:${position.marketId}`;
|
|
1033
|
+
const list = grouped.get(key) || [];
|
|
1034
|
+
list.push(position);
|
|
1035
|
+
grouped.set(key, list);
|
|
1036
|
+
}
|
|
1037
|
+
for (const [key, entries] of grouped.entries()) {
|
|
1038
|
+
const [platform, marketId] = key.split(':');
|
|
1039
|
+
try {
|
|
1040
|
+
const market = await feeds.getMarket(marketId, platform);
|
|
1041
|
+
if (!market)
|
|
1042
|
+
continue;
|
|
1043
|
+
for (const position of entries) {
|
|
1044
|
+
const outcome = market.outcomes.find((o) => o.id === position.outcomeId ||
|
|
1045
|
+
o.name.toLowerCase() === position.outcome.toLowerCase());
|
|
1046
|
+
if (!outcome)
|
|
1047
|
+
continue;
|
|
1048
|
+
if (Number.isFinite(outcome.price)) {
|
|
1049
|
+
db.updatePositionPrice(position.id, outcome.price);
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
}
|
|
1053
|
+
catch (error) {
|
|
1054
|
+
logger_1.logger.warn({ error, platform, marketId }, 'Failed to update position prices for market');
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
const positionConfig = currentConfig.positions ?? {};
|
|
1058
|
+
if (positionConfig.pnlSnapshotsEnabled !== false) {
|
|
1059
|
+
const userIds = new Set(positions.map((pos) => pos.userId));
|
|
1060
|
+
for (const userId of userIds) {
|
|
1061
|
+
const userPositions = db.getPositions(userId);
|
|
1062
|
+
if (userPositions.length === 0)
|
|
1063
|
+
continue;
|
|
1064
|
+
let totalValue = 0;
|
|
1065
|
+
let totalPnl = 0;
|
|
1066
|
+
let totalCostBasis = 0;
|
|
1067
|
+
const byPlatform = {};
|
|
1068
|
+
for (const pos of userPositions) {
|
|
1069
|
+
const value = pos.shares * pos.currentPrice;
|
|
1070
|
+
const costBasis = pos.shares * pos.avgPrice;
|
|
1071
|
+
const pnl = value - costBasis;
|
|
1072
|
+
totalValue += value;
|
|
1073
|
+
totalPnl += pnl;
|
|
1074
|
+
totalCostBasis += costBasis;
|
|
1075
|
+
const agg = byPlatform[pos.platform] || { value: 0, pnl: 0 };
|
|
1076
|
+
agg.value += value;
|
|
1077
|
+
agg.pnl += pnl;
|
|
1078
|
+
byPlatform[pos.platform] = agg;
|
|
1079
|
+
}
|
|
1080
|
+
const totalPnlPct = totalCostBasis > 0 ? totalPnl / totalCostBasis : 0;
|
|
1081
|
+
db.createPortfolioSnapshot({
|
|
1082
|
+
userId,
|
|
1083
|
+
totalValue,
|
|
1084
|
+
totalPnl,
|
|
1085
|
+
totalPnlPct,
|
|
1086
|
+
totalCostBasis,
|
|
1087
|
+
positionsCount: userPositions.length,
|
|
1088
|
+
byPlatform,
|
|
1089
|
+
});
|
|
1090
|
+
}
|
|
1091
|
+
const historyDays = positionConfig.pnlHistoryDays ?? 90;
|
|
1092
|
+
if (historyDays > 0) {
|
|
1093
|
+
const cutoffMs = Date.now() - historyDays * 24 * 60 * 60 * 1000;
|
|
1094
|
+
db.deletePortfolioSnapshotsBefore(cutoffMs);
|
|
1095
|
+
}
|
|
1096
|
+
}
|
|
1097
|
+
}
|
|
1098
|
+
function startMarketCacheCleanup() {
|
|
1099
|
+
const cacheConfig = currentConfig.marketCache ?? {};
|
|
1100
|
+
if (cacheConfig.enabled === false)
|
|
1101
|
+
return;
|
|
1102
|
+
const ttlMs = cacheConfig.ttlMs ?? 30 * 60 * 1000;
|
|
1103
|
+
const intervalMs = cacheConfig.cleanupIntervalMs ?? 15 * 60 * 1000;
|
|
1104
|
+
const runCleanup = () => {
|
|
1105
|
+
const cutoff = Date.now() - ttlMs;
|
|
1106
|
+
const removed = db.pruneMarketCache(cutoff);
|
|
1107
|
+
if (removed > 0) {
|
|
1108
|
+
logger_1.logger.info({ removed, cutoff }, 'Market cache cleanup completed');
|
|
1109
|
+
}
|
|
1110
|
+
};
|
|
1111
|
+
runCleanup();
|
|
1112
|
+
if (!marketCacheCleanupInterval) {
|
|
1113
|
+
marketCacheCleanupInterval = setInterval(() => {
|
|
1114
|
+
runCleanup();
|
|
1115
|
+
}, intervalMs);
|
|
1116
|
+
logger_1.logger.info({ ttlMs, intervalMs }, 'Market cache cleanup started');
|
|
1117
|
+
}
|
|
1118
|
+
}
|
|
1119
|
+
function startMarketIndexSync() {
|
|
1120
|
+
const indexConfig = currentConfig.marketIndex ?? {};
|
|
1121
|
+
if (indexConfig.enabled === false)
|
|
1122
|
+
return;
|
|
1123
|
+
const intervalMs = indexConfig.syncIntervalMs ?? 6 * 60 * 60 * 1000;
|
|
1124
|
+
const staleAfterMs = indexConfig.staleAfterMs ?? 7 * 24 * 60 * 60 * 1000;
|
|
1125
|
+
const limitPerPlatform = indexConfig.limitPerPlatform ?? 300;
|
|
1126
|
+
const status = indexConfig.status ?? 'open';
|
|
1127
|
+
const excludeSports = indexConfig.excludeSports ?? true;
|
|
1128
|
+
const platforms = indexConfig.platforms ?? ['polymarket', 'kalshi', 'manifold', 'metaculus'];
|
|
1129
|
+
const minVolume24h = indexConfig.minVolume24h ?? 0;
|
|
1130
|
+
const minLiquidity = indexConfig.minLiquidity ?? 0;
|
|
1131
|
+
const minOpenInterest = indexConfig.minOpenInterest ?? 0;
|
|
1132
|
+
const minPredictions = indexConfig.minPredictions ?? 0;
|
|
1133
|
+
const excludeResolved = indexConfig.excludeResolved ?? false;
|
|
1134
|
+
const runSync = async () => {
|
|
1135
|
+
try {
|
|
1136
|
+
const result = await marketIndex.sync({
|
|
1137
|
+
platforms,
|
|
1138
|
+
limitPerPlatform,
|
|
1139
|
+
status,
|
|
1140
|
+
excludeSports,
|
|
1141
|
+
minVolume24h,
|
|
1142
|
+
minLiquidity,
|
|
1143
|
+
minOpenInterest,
|
|
1144
|
+
minPredictions,
|
|
1145
|
+
excludeResolved,
|
|
1146
|
+
prune: true,
|
|
1147
|
+
staleAfterMs,
|
|
1148
|
+
});
|
|
1149
|
+
logger_1.logger.info({ result }, 'Market index sync completed');
|
|
1150
|
+
}
|
|
1151
|
+
catch (error) {
|
|
1152
|
+
logger_1.logger.warn({ error }, 'Market index sync failed');
|
|
1153
|
+
}
|
|
1154
|
+
};
|
|
1155
|
+
void runSync();
|
|
1156
|
+
if (!marketIndexSyncInterval) {
|
|
1157
|
+
marketIndexSyncInterval = setInterval(() => {
|
|
1158
|
+
void runSync();
|
|
1159
|
+
}, intervalMs);
|
|
1160
|
+
logger_1.logger.info({
|
|
1161
|
+
intervalMs,
|
|
1162
|
+
platforms,
|
|
1163
|
+
limitPerPlatform,
|
|
1164
|
+
status,
|
|
1165
|
+
minVolume24h,
|
|
1166
|
+
minLiquidity,
|
|
1167
|
+
minOpenInterest,
|
|
1168
|
+
minPredictions,
|
|
1169
|
+
staleAfterMs,
|
|
1170
|
+
}, 'Market index sync scheduled');
|
|
1171
|
+
}
|
|
1172
|
+
}
|
|
1173
|
+
const getConfig = () => currentConfig;
|
|
1174
|
+
let webhookTool;
|
|
1175
|
+
// Pass queued wrapper to agents when available; fall back to direct service
|
|
1176
|
+
let agents = await (0, agents_1.createAgentManager)(currentConfig, feeds, db, sessions, sendMessage, editMessage, deleteMessage, reactMessage, createPoll, memory, getConfig, () => webhookTool, queuedExecutionRef ?? executionService);
|
|
1177
|
+
// Wire command palette for webchat — merges registry commands + skill commands
|
|
1178
|
+
httpGateway.setCommandListHandler(() => {
|
|
1179
|
+
const registryCommands = commands.listAll();
|
|
1180
|
+
const registryNames = new Set(registryCommands.map(c => c.name));
|
|
1181
|
+
const skillEntries = [];
|
|
1182
|
+
for (const s of agents.getSkillCommands()) {
|
|
1183
|
+
const normalized = s.name.toLowerCase().replace(/\s+/g, '-');
|
|
1184
|
+
if (registryNames.has(`/${normalized}`))
|
|
1185
|
+
continue;
|
|
1186
|
+
const cats = registry_1.COMMAND_CATEGORIES[s.name] || registry_1.COMMAND_CATEGORIES[normalized] || 'Other';
|
|
1187
|
+
const catList = Array.isArray(cats) ? cats : [cats];
|
|
1188
|
+
for (const category of catList) {
|
|
1189
|
+
skillEntries.push({
|
|
1190
|
+
name: `/${normalized}`,
|
|
1191
|
+
description: s.description,
|
|
1192
|
+
category,
|
|
1193
|
+
subcommands: s.subcommands || [],
|
|
1194
|
+
});
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1197
|
+
return [...registryCommands, ...skillEntries]
|
|
1198
|
+
.sort((a, b) => a.category.localeCompare(b.category) || a.name.localeCompare(b.name));
|
|
1199
|
+
});
|
|
1200
|
+
webhookTool = (0, webhooks_1.createWebhookTool)({
|
|
1201
|
+
manager: webhookManager,
|
|
1202
|
+
gatewayPort: currentConfig.gateway.port,
|
|
1203
|
+
sessions,
|
|
1204
|
+
commands,
|
|
1205
|
+
feeds,
|
|
1206
|
+
db,
|
|
1207
|
+
memory,
|
|
1208
|
+
sendMessage,
|
|
1209
|
+
handleAgentMessage: (message, session) => agents.handleMessage(message, session),
|
|
1210
|
+
});
|
|
1211
|
+
let skillWatcher = null;
|
|
1212
|
+
let skillReloadTimer = null;
|
|
1213
|
+
let configReloadTimer = null;
|
|
1214
|
+
function getSkillWatchPaths(cfg) {
|
|
1215
|
+
const bundledDir = path_1.default.join(__dirname, '..', 'skills', 'bundled');
|
|
1216
|
+
const managedDir = path_1.default.join(process.cwd(), '.clodds', 'skills');
|
|
1217
|
+
const workspaceDir = path_1.default.join(cfg.agents.defaults.workspace, 'skills');
|
|
1218
|
+
return [bundledDir, managedDir, workspaceDir];
|
|
1219
|
+
}
|
|
1220
|
+
function scheduleSkillReload(trigger) {
|
|
1221
|
+
if (skillReloadTimer) {
|
|
1222
|
+
clearTimeout(skillReloadTimer);
|
|
1223
|
+
}
|
|
1224
|
+
skillReloadTimer = setTimeout(() => {
|
|
1225
|
+
logger_1.logger.info({ trigger }, 'Reloading skills');
|
|
1226
|
+
agents.reloadSkills();
|
|
1227
|
+
}, 150);
|
|
1228
|
+
}
|
|
1229
|
+
function setupSkillWatcher() {
|
|
1230
|
+
if (skillWatcher) {
|
|
1231
|
+
skillWatcher.close().catch((err) => {
|
|
1232
|
+
logger_1.logger.debug({ err }, 'Error closing skill watcher during reset');
|
|
1233
|
+
});
|
|
1234
|
+
}
|
|
1235
|
+
const paths = getSkillWatchPaths(currentConfig);
|
|
1236
|
+
skillWatcher = chokidar_1.default.watch(paths, {
|
|
1237
|
+
ignoreInitial: true,
|
|
1238
|
+
awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 },
|
|
1239
|
+
});
|
|
1240
|
+
skillWatcher.on('add', () => scheduleSkillReload('add'));
|
|
1241
|
+
skillWatcher.on('change', () => scheduleSkillReload('change'));
|
|
1242
|
+
skillWatcher.on('unlink', () => scheduleSkillReload('unlink'));
|
|
1243
|
+
watchers.push(skillWatcher);
|
|
1244
|
+
logger_1.logger.info({ paths }, 'Skill hot-reload watcher started');
|
|
1245
|
+
}
|
|
1246
|
+
async function rebuildRuntime(reason, workspaceChanged) {
|
|
1247
|
+
if (!started)
|
|
1248
|
+
return;
|
|
1249
|
+
if (reloadInFlight) {
|
|
1250
|
+
pendingReload = true;
|
|
1251
|
+
logger_1.logger.info({ reason }, 'Reload already in progress; queued follow-up reload');
|
|
1252
|
+
await reloadInFlight;
|
|
1253
|
+
return;
|
|
1254
|
+
}
|
|
1255
|
+
reloadInFlight = (async () => {
|
|
1256
|
+
logger_1.logger.info({ reason }, 'Rebuilding feeds/channels/agent from updated config');
|
|
1257
|
+
const oldChannels = channels;
|
|
1258
|
+
const oldFeeds = feeds;
|
|
1259
|
+
const oldAgents = agents;
|
|
1260
|
+
monitoring?.stop();
|
|
1261
|
+
monitoring = null;
|
|
1262
|
+
try {
|
|
1263
|
+
await oldChannels?.stop();
|
|
1264
|
+
}
|
|
1265
|
+
catch (error) {
|
|
1266
|
+
logger_1.logger.warn({ error }, 'Failed to stop old channels during reload');
|
|
1267
|
+
}
|
|
1268
|
+
// Stop alt-data service before rebuilding feeds
|
|
1269
|
+
if (altDataService) {
|
|
1270
|
+
altDataService.stop();
|
|
1271
|
+
altDataService = null;
|
|
1272
|
+
}
|
|
1273
|
+
// Stop percolator before rebuild (recreated after if still enabled)
|
|
1274
|
+
if (percolatorService) {
|
|
1275
|
+
if (percolatorService.keeper)
|
|
1276
|
+
percolatorService.keeper.stop();
|
|
1277
|
+
percolatorService.feed.disconnect();
|
|
1278
|
+
percolatorService = null;
|
|
1279
|
+
}
|
|
1280
|
+
try {
|
|
1281
|
+
await oldFeeds.stop();
|
|
1282
|
+
}
|
|
1283
|
+
catch (error) {
|
|
1284
|
+
logger_1.logger.warn({ error }, 'Failed to stop old feeds during reload');
|
|
1285
|
+
}
|
|
1286
|
+
try {
|
|
1287
|
+
oldAgents.dispose();
|
|
1288
|
+
}
|
|
1289
|
+
catch (error) {
|
|
1290
|
+
logger_1.logger.warn({ error }, 'Failed to dispose old agent during reload');
|
|
1291
|
+
}
|
|
1292
|
+
feeds = await (0, feeds_1.createFeedManager)(currentConfig.feeds);
|
|
1293
|
+
// Reconnect signal bus to new feeds (consumers keep their state)
|
|
1294
|
+
signalBus.disconnectFeeds();
|
|
1295
|
+
signalBus.connectFeeds(feeds);
|
|
1296
|
+
agents = await (0, agents_1.createAgentManager)(currentConfig, feeds, db, sessions, sendMessage, editMessage, deleteMessage, reactMessage, createPoll, memory, getConfig, () => webhookTool, queuedExecutionRef ?? executionService);
|
|
1297
|
+
channels = await (0, channels_1.createChannelManager)(currentConfig.channels, {
|
|
1298
|
+
onMessage: handleIncomingMessage,
|
|
1299
|
+
pairing,
|
|
1300
|
+
commands,
|
|
1301
|
+
}, { offlineQueue: currentConfig.messages?.offlineQueue });
|
|
1302
|
+
httpGateway.setChannelWebhookHandler(async (platform, event, req) => {
|
|
1303
|
+
if (!channels) {
|
|
1304
|
+
logger_1.logger.warn({ platform }, 'Channel webhook received before channels initialized');
|
|
1305
|
+
return null;
|
|
1306
|
+
}
|
|
1307
|
+
const adapter = channels.getAdapters()[platform];
|
|
1308
|
+
if (!adapter?.handleEvent) {
|
|
1309
|
+
logger_1.logger.warn({ platform }, 'Channel webhook handler not registered');
|
|
1310
|
+
return null;
|
|
1311
|
+
}
|
|
1312
|
+
return adapter.handleEvent(event, req);
|
|
1313
|
+
});
|
|
1314
|
+
const wss = httpGateway.getWebSocketServer();
|
|
1315
|
+
if (wss) {
|
|
1316
|
+
channels.attachWebSocket(wss);
|
|
1317
|
+
}
|
|
1318
|
+
await feeds.start();
|
|
1319
|
+
await channels.start();
|
|
1320
|
+
await startCronService();
|
|
1321
|
+
startMonitoring();
|
|
1322
|
+
// Recreate percolator service if still enabled
|
|
1323
|
+
if (currentConfig.feeds?.percolator?.enabled) {
|
|
1324
|
+
const { createPercolatorService } = await Promise.resolve().then(() => __importStar(require('../percolator/index.js')));
|
|
1325
|
+
percolatorService = createPercolatorService(currentConfig.feeds.percolator);
|
|
1326
|
+
await percolatorService.feed.connect();
|
|
1327
|
+
if (percolatorService.keeper)
|
|
1328
|
+
percolatorService.keeper.start();
|
|
1329
|
+
}
|
|
1330
|
+
// Recreate alt-data service with fresh feeds
|
|
1331
|
+
const rebuildAltDataCfg = currentConfig.altData;
|
|
1332
|
+
if (rebuildAltDataCfg?.enabled !== false) {
|
|
1333
|
+
altDataService = (0, alt_data_1.createAltDataService)({
|
|
1334
|
+
config: rebuildAltDataCfg ?? {},
|
|
1335
|
+
signalBus,
|
|
1336
|
+
feeds: feeds,
|
|
1337
|
+
embeddings: embeddings,
|
|
1338
|
+
});
|
|
1339
|
+
await altDataService.start();
|
|
1340
|
+
}
|
|
1341
|
+
// Recreate ML pipeline with current config
|
|
1342
|
+
if (currentConfig.mlPipeline?.enabled) {
|
|
1343
|
+
mlPipeline = (0, ml_pipeline_1.createMLPipeline)(db, currentConfig.mlPipeline);
|
|
1344
|
+
}
|
|
1345
|
+
// Recreate signal router with current config
|
|
1346
|
+
const rebuildSignalRouterCfg = currentConfig.signalRouter;
|
|
1347
|
+
if (rebuildSignalRouterCfg?.enabled) {
|
|
1348
|
+
const mlModel = (currentConfig.mlPipeline?.useMLConfidence !== false && mlPipeline)
|
|
1349
|
+
? mlPipeline.getModel()
|
|
1350
|
+
: null;
|
|
1351
|
+
signalRouter = (0, signal_router_1.createSignalRouter)(executionService, rebuildSignalRouterCfg, smartRouter, mlModel);
|
|
1352
|
+
signalRouter.start(signalBus);
|
|
1353
|
+
// Start ML pipeline after signal router
|
|
1354
|
+
if (mlPipeline) {
|
|
1355
|
+
mlPipeline.start(signalRouter, null);
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
// Reconnect position bridge to new signal router
|
|
1359
|
+
if (positionBridge) {
|
|
1360
|
+
positionBridge.stop();
|
|
1361
|
+
}
|
|
1362
|
+
if (positionManager) {
|
|
1363
|
+
positionBridge = (0, position_bridge_1.createPositionBridge)({
|
|
1364
|
+
positionManager,
|
|
1365
|
+
signalBus,
|
|
1366
|
+
signalRouter,
|
|
1367
|
+
});
|
|
1368
|
+
positionBridge.start();
|
|
1369
|
+
}
|
|
1370
|
+
if (workspaceChanged) {
|
|
1371
|
+
setupSkillWatcher();
|
|
1372
|
+
}
|
|
1373
|
+
else {
|
|
1374
|
+
scheduleSkillReload('config');
|
|
1375
|
+
}
|
|
1376
|
+
logger_1.logger.info('Runtime rebuild complete');
|
|
1377
|
+
})()
|
|
1378
|
+
.catch((error) => {
|
|
1379
|
+
logger_1.logger.error({ error }, 'Runtime rebuild failed');
|
|
1380
|
+
})
|
|
1381
|
+
.finally(async () => {
|
|
1382
|
+
reloadInFlight = null;
|
|
1383
|
+
if (pendingReload) {
|
|
1384
|
+
pendingReload = false;
|
|
1385
|
+
await rebuildRuntime('pending reload', true);
|
|
1386
|
+
}
|
|
1387
|
+
});
|
|
1388
|
+
await reloadInFlight;
|
|
1389
|
+
}
|
|
1390
|
+
function setupConfigWatcher() {
|
|
1391
|
+
const watcher = chokidar_1.default.watch(configPath, {
|
|
1392
|
+
ignoreInitial: true,
|
|
1393
|
+
awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 },
|
|
1394
|
+
});
|
|
1395
|
+
const scheduleConfigReload = () => {
|
|
1396
|
+
if (configReloadTimer) {
|
|
1397
|
+
clearTimeout(configReloadTimer);
|
|
1398
|
+
}
|
|
1399
|
+
configReloadTimer = setTimeout(async () => {
|
|
1400
|
+
try {
|
|
1401
|
+
const previousWorkspace = currentConfig.agents.defaults.workspace;
|
|
1402
|
+
const next = await (0, config_1.loadConfig)(configPath);
|
|
1403
|
+
currentConfig = next;
|
|
1404
|
+
(0, http_1.configureHttpClient)(currentConfig.http);
|
|
1405
|
+
const workspaceChanged = next.agents.defaults.workspace !== previousWorkspace;
|
|
1406
|
+
agents.reloadConfig(next);
|
|
1407
|
+
await rebuildRuntime('config change', workspaceChanged);
|
|
1408
|
+
logger_1.logger.info({ configPath }, 'Config hot-reloaded');
|
|
1409
|
+
}
|
|
1410
|
+
catch (error) {
|
|
1411
|
+
logger_1.logger.error({ error, configPath }, 'Failed to hot-reload config');
|
|
1412
|
+
}
|
|
1413
|
+
}, 250);
|
|
1414
|
+
};
|
|
1415
|
+
watcher.on('add', scheduleConfigReload);
|
|
1416
|
+
watcher.on('change', scheduleConfigReload);
|
|
1417
|
+
watcher.on('unlink', scheduleConfigReload);
|
|
1418
|
+
watchers.push(watcher);
|
|
1419
|
+
logger_1.logger.info({ configPath }, 'Config hot-reload watcher started');
|
|
1420
|
+
}
|
|
1421
|
+
function getChannelRateLimitConfig(platform) {
|
|
1422
|
+
const channelConfig = currentConfig.channels?.[platform];
|
|
1423
|
+
if (!channelConfig?.rateLimit)
|
|
1424
|
+
return null;
|
|
1425
|
+
return channelConfig.rateLimit;
|
|
1426
|
+
}
|
|
1427
|
+
function getChannelRateLimiter(platform, config) {
|
|
1428
|
+
const existing = channelRateLimiters.get(platform);
|
|
1429
|
+
if (existing &&
|
|
1430
|
+
existing.config.maxRequests === config.maxRequests &&
|
|
1431
|
+
existing.config.windowMs === config.windowMs &&
|
|
1432
|
+
existing.config.perUser === config.perUser) {
|
|
1433
|
+
return existing;
|
|
1434
|
+
}
|
|
1435
|
+
const limiter = new security_1.RateLimiter(config);
|
|
1436
|
+
const entry = { config, limiter };
|
|
1437
|
+
channelRateLimiters.set(platform, entry);
|
|
1438
|
+
return entry;
|
|
1439
|
+
}
|
|
1440
|
+
const handleIncomingMessage = async (message) => {
|
|
1441
|
+
const normalized = (0, unified_1.normalizeIncomingMessage)(message);
|
|
1442
|
+
const channelRateLimit = getChannelRateLimitConfig(normalized.platform);
|
|
1443
|
+
if (channelRateLimit) {
|
|
1444
|
+
const limiterEntry = getChannelRateLimiter(normalized.platform, channelRateLimit);
|
|
1445
|
+
const rateLimitKey = channelRateLimit.perUser
|
|
1446
|
+
? `${normalized.platform}:${normalized.userId}`
|
|
1447
|
+
: `${normalized.platform}:global`;
|
|
1448
|
+
const rateLimitResult = limiterEntry.limiter.check(rateLimitKey);
|
|
1449
|
+
if (!rateLimitResult.allowed) {
|
|
1450
|
+
const resetInSeconds = Math.ceil(rateLimitResult.resetIn / 1000);
|
|
1451
|
+
logger_1.logger.warn({ platform: normalized.platform, userId: normalized.userId, resetInSeconds }, 'Channel rate limit exceeded');
|
|
1452
|
+
await sendMessage({
|
|
1453
|
+
platform: normalized.platform,
|
|
1454
|
+
chatId: normalized.chatId,
|
|
1455
|
+
text: `Rate limit exceeded for ${normalized.platform}. Try again in ${resetInSeconds}s.`,
|
|
1456
|
+
parseMode: 'Markdown',
|
|
1457
|
+
thread: normalized.thread,
|
|
1458
|
+
});
|
|
1459
|
+
return;
|
|
1460
|
+
}
|
|
1461
|
+
}
|
|
1462
|
+
const session = await sessions.getOrCreateSession(normalized);
|
|
1463
|
+
const commandResponse = await commands.handle(normalized, {
|
|
1464
|
+
session,
|
|
1465
|
+
sessions,
|
|
1466
|
+
feeds,
|
|
1467
|
+
db,
|
|
1468
|
+
memory,
|
|
1469
|
+
opportunityFinder: opportunityFinder ?? undefined,
|
|
1470
|
+
bittensorService: bittensorService ?? undefined,
|
|
1471
|
+
send: sendMessage,
|
|
1472
|
+
});
|
|
1473
|
+
if (commandResponse) {
|
|
1474
|
+
await sendMessage({
|
|
1475
|
+
platform: normalized.platform,
|
|
1476
|
+
chatId: normalized.chatId,
|
|
1477
|
+
text: commandResponse,
|
|
1478
|
+
parseMode: 'Markdown',
|
|
1479
|
+
thread: normalized.thread,
|
|
1480
|
+
});
|
|
1481
|
+
return;
|
|
1482
|
+
}
|
|
1483
|
+
const responseText = await agents.handleMessage(normalized, session);
|
|
1484
|
+
if (responseText !== null) {
|
|
1485
|
+
await sendMessage({
|
|
1486
|
+
platform: normalized.platform,
|
|
1487
|
+
chatId: normalized.chatId,
|
|
1488
|
+
text: responseText,
|
|
1489
|
+
parseMode: 'Markdown',
|
|
1490
|
+
thread: normalized.thread,
|
|
1491
|
+
});
|
|
1492
|
+
}
|
|
1493
|
+
};
|
|
1494
|
+
channels = await (0, channels_1.createChannelManager)(config.channels, {
|
|
1495
|
+
onMessage: handleIncomingMessage,
|
|
1496
|
+
pairing,
|
|
1497
|
+
commands,
|
|
1498
|
+
}, { offlineQueue: config.messages?.offlineQueue });
|
|
1499
|
+
httpGateway.setChannelWebhookHandler(async (platform, event, req) => {
|
|
1500
|
+
if (!channels) {
|
|
1501
|
+
logger_1.logger.warn({ platform }, 'Channel webhook received before channels initialized');
|
|
1502
|
+
return null;
|
|
1503
|
+
}
|
|
1504
|
+
const adapter = channels.getAdapters()[platform];
|
|
1505
|
+
if (!adapter?.handleEvent) {
|
|
1506
|
+
logger_1.logger.warn({ platform }, 'Channel webhook handler not registered');
|
|
1507
|
+
return null;
|
|
1508
|
+
}
|
|
1509
|
+
return adapter.handleEvent(event, req);
|
|
1510
|
+
});
|
|
1511
|
+
httpGateway.setMarketIndexHandler(async (req) => {
|
|
1512
|
+
if (!currentConfig.marketIndex || currentConfig.marketIndex.enabled === false) {
|
|
1513
|
+
return { error: 'Market index disabled', status: 503 };
|
|
1514
|
+
}
|
|
1515
|
+
const query = typeof req.query.q === 'string' ? req.query.q.trim() : '';
|
|
1516
|
+
if (!query) {
|
|
1517
|
+
return { error: 'Missing query parameter: q', status: 400 };
|
|
1518
|
+
}
|
|
1519
|
+
const platform = typeof req.query.platform === 'string' ? req.query.platform : undefined;
|
|
1520
|
+
const limit = req.query.limit ? Number.parseInt(String(req.query.limit), 10) : undefined;
|
|
1521
|
+
const maxCandidates = req.query.maxCandidates
|
|
1522
|
+
? Number.parseInt(String(req.query.maxCandidates), 10)
|
|
1523
|
+
: undefined;
|
|
1524
|
+
const minScore = req.query.minScore ? Number.parseFloat(String(req.query.minScore)) : undefined;
|
|
1525
|
+
let platformWeights;
|
|
1526
|
+
if (typeof req.query.platformWeights === 'string') {
|
|
1527
|
+
try {
|
|
1528
|
+
platformWeights = JSON.parse(req.query.platformWeights);
|
|
1529
|
+
}
|
|
1530
|
+
catch {
|
|
1531
|
+
return { error: 'Invalid platformWeights JSON', status: 400 };
|
|
1532
|
+
}
|
|
1533
|
+
}
|
|
1534
|
+
const results = await marketIndex.search({
|
|
1535
|
+
query,
|
|
1536
|
+
platform: platform,
|
|
1537
|
+
limit,
|
|
1538
|
+
maxCandidates,
|
|
1539
|
+
minScore,
|
|
1540
|
+
platformWeights: platformWeights,
|
|
1541
|
+
});
|
|
1542
|
+
return {
|
|
1543
|
+
results: results.map((r) => ({
|
|
1544
|
+
score: Number(r.score.toFixed(4)),
|
|
1545
|
+
market: {
|
|
1546
|
+
platform: r.item.platform,
|
|
1547
|
+
id: r.item.marketId,
|
|
1548
|
+
slug: r.item.slug,
|
|
1549
|
+
question: r.item.question,
|
|
1550
|
+
description: r.item.description,
|
|
1551
|
+
url: r.item.url,
|
|
1552
|
+
status: r.item.status,
|
|
1553
|
+
endDate: r.item.endDate,
|
|
1554
|
+
resolved: r.item.resolved,
|
|
1555
|
+
volume24h: r.item.volume24h,
|
|
1556
|
+
liquidity: r.item.liquidity,
|
|
1557
|
+
openInterest: r.item.openInterest,
|
|
1558
|
+
predictions: r.item.predictions,
|
|
1559
|
+
},
|
|
1560
|
+
})),
|
|
1561
|
+
};
|
|
1562
|
+
});
|
|
1563
|
+
httpGateway.setMarketIndexStatsHandler(async (req) => {
|
|
1564
|
+
if (!currentConfig.marketIndex || currentConfig.marketIndex.enabled === false) {
|
|
1565
|
+
return { error: 'Market index disabled', status: 503 };
|
|
1566
|
+
}
|
|
1567
|
+
const platforms = typeof req.query.platforms === 'string'
|
|
1568
|
+
? req.query.platforms.split(',').map((p) => p.trim()).filter(Boolean)
|
|
1569
|
+
: undefined;
|
|
1570
|
+
const stats = marketIndex.stats(platforms);
|
|
1571
|
+
return { stats };
|
|
1572
|
+
});
|
|
1573
|
+
httpGateway.setMarketIndexSyncHandler(async (req) => {
|
|
1574
|
+
if (!currentConfig.marketIndex || currentConfig.marketIndex.enabled === false) {
|
|
1575
|
+
return { error: 'Market index disabled', status: 503 };
|
|
1576
|
+
}
|
|
1577
|
+
const body = (req.body || {});
|
|
1578
|
+
const platforms = Array.isArray(body.platforms)
|
|
1579
|
+
? body.platforms
|
|
1580
|
+
: typeof body.platforms === 'string'
|
|
1581
|
+
? body.platforms.split(',').map((p) => p.trim()).filter(Boolean)
|
|
1582
|
+
: undefined;
|
|
1583
|
+
const limitPerPlatform = typeof body.limitPerPlatform === 'number' ? body.limitPerPlatform : undefined;
|
|
1584
|
+
const status = typeof body.status === 'string' ? body.status : undefined;
|
|
1585
|
+
const excludeSports = typeof body.excludeSports === 'boolean' ? body.excludeSports : undefined;
|
|
1586
|
+
const minVolume24h = typeof body.minVolume24h === 'number' ? body.minVolume24h : undefined;
|
|
1587
|
+
const minLiquidity = typeof body.minLiquidity === 'number' ? body.minLiquidity : undefined;
|
|
1588
|
+
const minOpenInterest = typeof body.minOpenInterest === 'number' ? body.minOpenInterest : undefined;
|
|
1589
|
+
const minPredictions = typeof body.minPredictions === 'number' ? body.minPredictions : undefined;
|
|
1590
|
+
const excludeResolved = typeof body.excludeResolved === 'boolean' ? body.excludeResolved : undefined;
|
|
1591
|
+
const prune = typeof body.prune === 'boolean' ? body.prune : undefined;
|
|
1592
|
+
const staleAfterMs = typeof body.staleAfterMs === 'number' ? body.staleAfterMs : undefined;
|
|
1593
|
+
const result = await marketIndex.sync({
|
|
1594
|
+
platforms: platforms,
|
|
1595
|
+
limitPerPlatform,
|
|
1596
|
+
status: status,
|
|
1597
|
+
excludeSports,
|
|
1598
|
+
minVolume24h,
|
|
1599
|
+
minLiquidity,
|
|
1600
|
+
minOpenInterest,
|
|
1601
|
+
minPredictions,
|
|
1602
|
+
excludeResolved,
|
|
1603
|
+
prune,
|
|
1604
|
+
staleAfterMs,
|
|
1605
|
+
});
|
|
1606
|
+
return { result };
|
|
1607
|
+
});
|
|
1608
|
+
// Performance dashboard handler
|
|
1609
|
+
httpGateway.setPerformanceDashboardHandler(async (_req) => {
|
|
1610
|
+
// Get trade statistics from database
|
|
1611
|
+
const trades = db.query(`
|
|
1612
|
+
SELECT
|
|
1613
|
+
id,
|
|
1614
|
+
created_at as timestamp,
|
|
1615
|
+
COALESCE(market_question, market_id) as market,
|
|
1616
|
+
side,
|
|
1617
|
+
size,
|
|
1618
|
+
entry_price as entryPrice,
|
|
1619
|
+
exit_price as exitPrice,
|
|
1620
|
+
pnl,
|
|
1621
|
+
pnl_pct as pnlPct,
|
|
1622
|
+
status,
|
|
1623
|
+
strategy
|
|
1624
|
+
FROM trades
|
|
1625
|
+
ORDER BY created_at DESC
|
|
1626
|
+
LIMIT 100
|
|
1627
|
+
`);
|
|
1628
|
+
// Calculate stats
|
|
1629
|
+
const closedTrades = trades.filter(t => t.status === 'closed' && t.pnl != null);
|
|
1630
|
+
const winningTrades = closedTrades.filter(t => (t.pnl ?? 0) > 0);
|
|
1631
|
+
const totalPnl = closedTrades.reduce((sum, t) => sum + (t.pnl ?? 0), 0);
|
|
1632
|
+
const avgPnlPct = closedTrades.length > 0
|
|
1633
|
+
? closedTrades.reduce((sum, t) => sum + (t.pnlPct ?? 0), 0) / closedTrades.length
|
|
1634
|
+
: 0;
|
|
1635
|
+
// Calculate Sharpe ratio (simplified - daily returns)
|
|
1636
|
+
const dailyPnl = {};
|
|
1637
|
+
for (const t of closedTrades) {
|
|
1638
|
+
const date = t.timestamp.split('T')[0];
|
|
1639
|
+
dailyPnl[date] = (dailyPnl[date] ?? 0) + (t.pnl ?? 0);
|
|
1640
|
+
}
|
|
1641
|
+
const dailyReturns = Object.values(dailyPnl);
|
|
1642
|
+
const avgReturn = dailyReturns.length > 0
|
|
1643
|
+
? dailyReturns.reduce((a, b) => a + b, 0) / dailyReturns.length
|
|
1644
|
+
: 0;
|
|
1645
|
+
const stdDev = dailyReturns.length > 1
|
|
1646
|
+
? Math.sqrt(dailyReturns.reduce((sum, r) => sum + Math.pow(r - avgReturn, 2), 0) / (dailyReturns.length - 1))
|
|
1647
|
+
: 1;
|
|
1648
|
+
const sharpeRatio = stdDev > 0 ? (avgReturn / stdDev) * Math.sqrt(252) : 0;
|
|
1649
|
+
// Calculate max drawdown
|
|
1650
|
+
let peak = 0;
|
|
1651
|
+
let maxDrawdown = 0;
|
|
1652
|
+
let cumulative = 0;
|
|
1653
|
+
const dailyData = [];
|
|
1654
|
+
const sortedDates = Object.keys(dailyPnl).sort();
|
|
1655
|
+
for (const date of sortedDates) {
|
|
1656
|
+
cumulative += dailyPnl[date];
|
|
1657
|
+
peak = Math.max(peak, cumulative);
|
|
1658
|
+
const drawdown = peak > 0 ? (peak - cumulative) / peak : 0;
|
|
1659
|
+
maxDrawdown = Math.max(maxDrawdown, drawdown);
|
|
1660
|
+
dailyData.push({ date, pnl: dailyPnl[date], cumulative });
|
|
1661
|
+
}
|
|
1662
|
+
// Group by strategy
|
|
1663
|
+
const strategyMap = {};
|
|
1664
|
+
for (const t of closedTrades) {
|
|
1665
|
+
const strat = t.strategy ?? 'Unknown';
|
|
1666
|
+
if (!strategyMap[strat]) {
|
|
1667
|
+
strategyMap[strat] = { trades: 0, wins: 0, pnl: 0 };
|
|
1668
|
+
}
|
|
1669
|
+
strategyMap[strat].trades++;
|
|
1670
|
+
if ((t.pnl ?? 0) > 0)
|
|
1671
|
+
strategyMap[strat].wins++;
|
|
1672
|
+
strategyMap[strat].pnl += t.pnl ?? 0;
|
|
1673
|
+
}
|
|
1674
|
+
const byStrategy = Object.entries(strategyMap).map(([strategy, data]) => ({
|
|
1675
|
+
strategy,
|
|
1676
|
+
trades: data.trades,
|
|
1677
|
+
winRate: data.trades > 0 ? (data.wins / data.trades) * 100 : 0,
|
|
1678
|
+
pnl: data.pnl,
|
|
1679
|
+
}));
|
|
1680
|
+
// Format recent trades
|
|
1681
|
+
const recentTrades = trades.slice(0, 20).map(t => ({
|
|
1682
|
+
id: t.id,
|
|
1683
|
+
timestamp: t.timestamp,
|
|
1684
|
+
market: t.market,
|
|
1685
|
+
side: t.side,
|
|
1686
|
+
size: t.size,
|
|
1687
|
+
entryPrice: t.entryPrice,
|
|
1688
|
+
exitPrice: t.exitPrice ?? undefined,
|
|
1689
|
+
pnl: t.pnl ?? undefined,
|
|
1690
|
+
pnlPct: t.pnlPct ?? undefined,
|
|
1691
|
+
status: t.status === 'closed'
|
|
1692
|
+
? ((t.pnl ?? 0) > 0 ? 'win' : 'loss')
|
|
1693
|
+
: t.status,
|
|
1694
|
+
}));
|
|
1695
|
+
return {
|
|
1696
|
+
stats: {
|
|
1697
|
+
totalTrades: trades.length,
|
|
1698
|
+
winRate: closedTrades.length > 0 ? (winningTrades.length / closedTrades.length) * 100 : 0,
|
|
1699
|
+
totalPnl,
|
|
1700
|
+
avgPnlPct,
|
|
1701
|
+
sharpeRatio,
|
|
1702
|
+
maxDrawdown: maxDrawdown * 100,
|
|
1703
|
+
},
|
|
1704
|
+
recentTrades,
|
|
1705
|
+
dailyPnl: dailyData,
|
|
1706
|
+
byStrategy,
|
|
1707
|
+
};
|
|
1708
|
+
});
|
|
1709
|
+
// Backtest handler - runs backtest on historical trade data
|
|
1710
|
+
httpGateway.setBacktestHandler(async (req) => {
|
|
1711
|
+
const body = req.body;
|
|
1712
|
+
// Get historical trades for analysis
|
|
1713
|
+
const startDate = body.startDate ? new Date(body.startDate) : new Date(Date.now() - 30 * 24 * 60 * 60 * 1000);
|
|
1714
|
+
const endDate = body.endDate ? new Date(body.endDate) : new Date();
|
|
1715
|
+
const initialCapital = body.initialCapital ?? 10000;
|
|
1716
|
+
// Query historical trades
|
|
1717
|
+
const trades = db.query(`
|
|
1718
|
+
SELECT created_at, side, size, entry_price, exit_price, pnl, pnl_pct, status
|
|
1719
|
+
FROM trades
|
|
1720
|
+
WHERE created_at >= ? AND created_at <= ?
|
|
1721
|
+
${body.platform ? 'AND platform = ?' : ''}
|
|
1722
|
+
${body.marketId ? 'AND market_id = ?' : ''}
|
|
1723
|
+
ORDER BY created_at
|
|
1724
|
+
`, [
|
|
1725
|
+
startDate.toISOString(),
|
|
1726
|
+
endDate.toISOString(),
|
|
1727
|
+
...(body.platform ? [body.platform] : []),
|
|
1728
|
+
...(body.marketId ? [body.marketId] : []),
|
|
1729
|
+
]);
|
|
1730
|
+
// Build equity curve from trades
|
|
1731
|
+
let equity = initialCapital;
|
|
1732
|
+
const equityCurve = [
|
|
1733
|
+
{ timestamp: startDate.toISOString(), equity: initialCapital }
|
|
1734
|
+
];
|
|
1735
|
+
const dailyPnl = {};
|
|
1736
|
+
const closedTrades = trades.filter(t => t.status === 'closed' && t.pnl != null);
|
|
1737
|
+
for (const trade of closedTrades) {
|
|
1738
|
+
equity += trade.pnl ?? 0;
|
|
1739
|
+
equityCurve.push({ timestamp: trade.created_at, equity });
|
|
1740
|
+
const date = trade.created_at.split('T')[0];
|
|
1741
|
+
dailyPnl[date] = (dailyPnl[date] ?? 0) + (trade.pnl ?? 0);
|
|
1742
|
+
}
|
|
1743
|
+
// Calculate metrics
|
|
1744
|
+
const wins = closedTrades.filter(t => (t.pnl ?? 0) > 0);
|
|
1745
|
+
const losses = closedTrades.filter(t => (t.pnl ?? 0) < 0);
|
|
1746
|
+
const totalPnl = closedTrades.reduce((sum, t) => sum + (t.pnl ?? 0), 0);
|
|
1747
|
+
const totalReturnPct = (totalPnl / initialCapital) * 100;
|
|
1748
|
+
const days = (endDate.getTime() - startDate.getTime()) / (24 * 60 * 60 * 1000);
|
|
1749
|
+
const annualizedReturnPct = totalReturnPct * (365 / Math.max(1, days));
|
|
1750
|
+
// Sharpe & Sortino
|
|
1751
|
+
const dailyReturns = Object.values(dailyPnl).map(pnl => pnl / initialCapital);
|
|
1752
|
+
const avgReturn = dailyReturns.length > 0 ? dailyReturns.reduce((a, b) => a + b, 0) / dailyReturns.length : 0;
|
|
1753
|
+
const stdDev = dailyReturns.length > 1 ? Math.sqrt(dailyReturns.reduce((sum, r) => sum + Math.pow(r - avgReturn, 2), 0) / (dailyReturns.length - 1)) : 1;
|
|
1754
|
+
const sharpeRatio = stdDev > 0 ? (avgReturn / stdDev) * Math.sqrt(252) : 0;
|
|
1755
|
+
const negReturns = dailyReturns.filter(r => r < 0);
|
|
1756
|
+
const downsideDev = negReturns.length > 0 ? Math.sqrt(negReturns.reduce((sum, r) => sum + r * r, 0) / negReturns.length) : 1;
|
|
1757
|
+
const sortinoRatio = downsideDev > 0 ? (avgReturn / downsideDev) * Math.sqrt(252) : 0;
|
|
1758
|
+
// Max drawdown
|
|
1759
|
+
let peak = initialCapital;
|
|
1760
|
+
let maxDrawdownPct = 0;
|
|
1761
|
+
for (const point of equityCurve) {
|
|
1762
|
+
if (point.equity > peak)
|
|
1763
|
+
peak = point.equity;
|
|
1764
|
+
const dd = ((peak - point.equity) / peak) * 100;
|
|
1765
|
+
if (dd > maxDrawdownPct)
|
|
1766
|
+
maxDrawdownPct = dd;
|
|
1767
|
+
}
|
|
1768
|
+
// Profit factor
|
|
1769
|
+
const grossProfit = wins.reduce((sum, t) => sum + (t.pnl ?? 0), 0);
|
|
1770
|
+
const grossLoss = Math.abs(losses.reduce((sum, t) => sum + (t.pnl ?? 0), 0));
|
|
1771
|
+
const profitFactor = grossLoss > 0 ? grossProfit / grossLoss : grossProfit > 0 ? Infinity : 0;
|
|
1772
|
+
return {
|
|
1773
|
+
result: {
|
|
1774
|
+
strategyId: body.strategyId || 'historical',
|
|
1775
|
+
metrics: {
|
|
1776
|
+
totalReturnPct,
|
|
1777
|
+
annualizedReturnPct,
|
|
1778
|
+
totalTrades: trades.length,
|
|
1779
|
+
winRate: closedTrades.length > 0 ? (wins.length / closedTrades.length) * 100 : 0,
|
|
1780
|
+
sharpeRatio,
|
|
1781
|
+
sortinoRatio,
|
|
1782
|
+
maxDrawdownPct,
|
|
1783
|
+
profitFactor: profitFactor === Infinity ? 999 : profitFactor,
|
|
1784
|
+
},
|
|
1785
|
+
trades: trades.slice(0, 50).map(t => ({
|
|
1786
|
+
timestamp: t.created_at,
|
|
1787
|
+
side: t.side,
|
|
1788
|
+
size: t.size,
|
|
1789
|
+
entryPrice: t.entry_price,
|
|
1790
|
+
exitPrice: t.exit_price,
|
|
1791
|
+
pnl: t.pnl,
|
|
1792
|
+
})),
|
|
1793
|
+
equityCurve,
|
|
1794
|
+
dailyReturns: Object.entries(dailyPnl).map(([date, pnl]) => ({ date, return: pnl / initialCapital })),
|
|
1795
|
+
},
|
|
1796
|
+
};
|
|
1797
|
+
});
|
|
1798
|
+
// Tick recorder handlers
|
|
1799
|
+
httpGateway.setTicksHandler(async (req) => {
|
|
1800
|
+
if (!tickRecorder) {
|
|
1801
|
+
return { error: 'Tick recorder not enabled', status: 503 };
|
|
1802
|
+
}
|
|
1803
|
+
const platform = req.params.platform;
|
|
1804
|
+
const marketId = req.params.marketId;
|
|
1805
|
+
const outcomeId = typeof req.query.outcomeId === 'string' ? req.query.outcomeId : undefined;
|
|
1806
|
+
const startTime = req.query.startTime ? Number(req.query.startTime) : Date.now() - 24 * 60 * 60 * 1000;
|
|
1807
|
+
const endTime = req.query.endTime ? Number(req.query.endTime) : Date.now();
|
|
1808
|
+
const limit = req.query.limit ? Number(req.query.limit) : 1000;
|
|
1809
|
+
const ticks = await tickRecorder.getTicks({
|
|
1810
|
+
platform,
|
|
1811
|
+
marketId,
|
|
1812
|
+
outcomeId,
|
|
1813
|
+
startTime,
|
|
1814
|
+
endTime,
|
|
1815
|
+
limit,
|
|
1816
|
+
});
|
|
1817
|
+
return {
|
|
1818
|
+
ticks: ticks.map((t) => ({
|
|
1819
|
+
time: t.time.toISOString(),
|
|
1820
|
+
platform: t.platform,
|
|
1821
|
+
marketId: t.marketId,
|
|
1822
|
+
outcomeId: t.outcomeId,
|
|
1823
|
+
price: t.price,
|
|
1824
|
+
prevPrice: t.prevPrice,
|
|
1825
|
+
})),
|
|
1826
|
+
};
|
|
1827
|
+
});
|
|
1828
|
+
httpGateway.setOHLCHandler(async (req) => {
|
|
1829
|
+
if (!tickRecorder) {
|
|
1830
|
+
return { error: 'Tick recorder not enabled', status: 503 };
|
|
1831
|
+
}
|
|
1832
|
+
const platform = req.params.platform;
|
|
1833
|
+
const marketId = req.params.marketId;
|
|
1834
|
+
const outcomeId = typeof req.query.outcomeId === 'string' ? req.query.outcomeId : undefined;
|
|
1835
|
+
const interval = (typeof req.query.interval === 'string' ? req.query.interval : '1h');
|
|
1836
|
+
const startTime = req.query.startTime ? Number(req.query.startTime) : Date.now() - 7 * 24 * 60 * 60 * 1000;
|
|
1837
|
+
const endTime = req.query.endTime ? Number(req.query.endTime) : Date.now();
|
|
1838
|
+
if (!outcomeId) {
|
|
1839
|
+
return { error: 'Missing required query parameter: outcomeId', status: 400 };
|
|
1840
|
+
}
|
|
1841
|
+
const candles = await tickRecorder.getOHLC({
|
|
1842
|
+
platform,
|
|
1843
|
+
marketId,
|
|
1844
|
+
outcomeId,
|
|
1845
|
+
interval,
|
|
1846
|
+
startTime,
|
|
1847
|
+
endTime,
|
|
1848
|
+
});
|
|
1849
|
+
return { candles };
|
|
1850
|
+
});
|
|
1851
|
+
httpGateway.setOrderbookHistoryHandler(async (req) => {
|
|
1852
|
+
if (!tickRecorder) {
|
|
1853
|
+
return { error: 'Tick recorder not enabled', status: 503 };
|
|
1854
|
+
}
|
|
1855
|
+
const platform = req.params.platform;
|
|
1856
|
+
const marketId = req.params.marketId;
|
|
1857
|
+
const outcomeId = typeof req.query.outcomeId === 'string' ? req.query.outcomeId : undefined;
|
|
1858
|
+
const startTime = req.query.startTime ? Number(req.query.startTime) : Date.now() - 60 * 60 * 1000;
|
|
1859
|
+
const endTime = req.query.endTime ? Number(req.query.endTime) : Date.now();
|
|
1860
|
+
const limit = req.query.limit ? Number(req.query.limit) : 100;
|
|
1861
|
+
const snapshots = await tickRecorder.getOrderbookSnapshots({
|
|
1862
|
+
platform,
|
|
1863
|
+
marketId,
|
|
1864
|
+
outcomeId,
|
|
1865
|
+
startTime,
|
|
1866
|
+
endTime,
|
|
1867
|
+
limit,
|
|
1868
|
+
});
|
|
1869
|
+
return {
|
|
1870
|
+
snapshots: snapshots.map((s) => ({
|
|
1871
|
+
time: s.time.toISOString(),
|
|
1872
|
+
platform: s.platform,
|
|
1873
|
+
marketId: s.marketId,
|
|
1874
|
+
outcomeId: s.outcomeId,
|
|
1875
|
+
bids: s.bids,
|
|
1876
|
+
asks: s.asks,
|
|
1877
|
+
spread: s.spread,
|
|
1878
|
+
midPrice: s.midPrice,
|
|
1879
|
+
})),
|
|
1880
|
+
};
|
|
1881
|
+
});
|
|
1882
|
+
httpGateway.setTickRecorderStatsHandler(async (_req) => {
|
|
1883
|
+
if (!tickRecorder) {
|
|
1884
|
+
return { error: 'Tick recorder not enabled', status: 503 };
|
|
1885
|
+
}
|
|
1886
|
+
const stats = tickRecorder.getStats();
|
|
1887
|
+
return { stats };
|
|
1888
|
+
});
|
|
1889
|
+
// Set tick streamer for WebSocket streaming endpoint
|
|
1890
|
+
httpGateway.setTickStreamer(tickStreamer);
|
|
1891
|
+
// Set feature engineering for REST API
|
|
1892
|
+
httpGateway.setFeatureEngineering(featureEngine);
|
|
1893
|
+
// Create trade logger first (shared with bot manager)
|
|
1894
|
+
tradeLogger = (0, logger_2.createTradeLogger)(db);
|
|
1895
|
+
// Create bot manager with execution callbacks
|
|
1896
|
+
botManager = (0, bots_1.createBotManager)(db, {
|
|
1897
|
+
tradeLogger,
|
|
1898
|
+
executeOrder: executionService
|
|
1899
|
+
? async (signal, strategyId) => {
|
|
1900
|
+
const side = signal.type === 'buy' ? 'buy' : 'sell';
|
|
1901
|
+
const orderReq = {
|
|
1902
|
+
platform: signal.platform,
|
|
1903
|
+
marketId: signal.marketId,
|
|
1904
|
+
outcome: signal.outcome,
|
|
1905
|
+
price: signal.price || 0.5,
|
|
1906
|
+
size: signal.size || 100,
|
|
1907
|
+
};
|
|
1908
|
+
const result = side === 'buy'
|
|
1909
|
+
? await executionService.buyLimit(orderReq)
|
|
1910
|
+
: await executionService.sellLimit(orderReq);
|
|
1911
|
+
if (!result.success)
|
|
1912
|
+
return null;
|
|
1913
|
+
return tradeLogger.logTrade({
|
|
1914
|
+
platform: signal.platform,
|
|
1915
|
+
marketId: signal.marketId,
|
|
1916
|
+
outcome: signal.outcome,
|
|
1917
|
+
side,
|
|
1918
|
+
orderType: 'limit',
|
|
1919
|
+
price: result.avgFillPrice ?? signal.price ?? 0.5,
|
|
1920
|
+
size: result.filledSize ?? signal.size ?? 100,
|
|
1921
|
+
filled: result.filledSize ?? 0,
|
|
1922
|
+
cost: (result.avgFillPrice ?? signal.price ?? 0.5) * (result.filledSize ?? signal.size ?? 100),
|
|
1923
|
+
status: result.filledSize ? 'filled' : 'pending',
|
|
1924
|
+
strategyId,
|
|
1925
|
+
orderId: result.orderId,
|
|
1926
|
+
});
|
|
1927
|
+
}
|
|
1928
|
+
: undefined,
|
|
1929
|
+
getPrice: async (platform, marketId) => {
|
|
1930
|
+
const market = await feeds.getMarket(marketId, platform);
|
|
1931
|
+
if (!market)
|
|
1932
|
+
return null;
|
|
1933
|
+
const outcome = market.outcomes[0];
|
|
1934
|
+
return outcome?.price ?? null;
|
|
1935
|
+
},
|
|
1936
|
+
getMarket: async (platform, marketId) => {
|
|
1937
|
+
return feeds.getMarket(marketId, platform);
|
|
1938
|
+
},
|
|
1939
|
+
getPortfolio: async () => {
|
|
1940
|
+
const positions = db.getPositions('default');
|
|
1941
|
+
let totalValue = 0;
|
|
1942
|
+
const mapped = positions.map((p) => {
|
|
1943
|
+
const value = p.shares * (p.currentPrice || p.avgPrice);
|
|
1944
|
+
totalValue += value;
|
|
1945
|
+
return { platform: p.platform, marketId: p.marketId, outcome: p.outcome, shares: p.shares, avgPrice: p.avgPrice, currentPrice: p.currentPrice || p.avgPrice };
|
|
1946
|
+
});
|
|
1947
|
+
return { value: totalValue, balance: totalValue * 0.2, positions: mapped };
|
|
1948
|
+
},
|
|
1949
|
+
});
|
|
1950
|
+
strategyBuilder = (0, builder_1.createStrategyBuilder)(db);
|
|
1951
|
+
// Register built-in strategies
|
|
1952
|
+
botManager.registerStrategy((0, bots_1.createMeanReversionStrategy)());
|
|
1953
|
+
botManager.registerStrategy((0, bots_1.createMomentumStrategy)());
|
|
1954
|
+
botManager.registerStrategy((0, bots_1.createArbitrageStrategy)());
|
|
1955
|
+
// Register MM strategy if configured
|
|
1956
|
+
if (config.trading?.marketMaking?.enabled && executionService) {
|
|
1957
|
+
const mmConfig = config.trading.marketMaking;
|
|
1958
|
+
const mmStrategy = (0, market_making_1.createMMStrategy)(mmConfig, {
|
|
1959
|
+
execution: executionService,
|
|
1960
|
+
feeds,
|
|
1961
|
+
});
|
|
1962
|
+
botManager.registerStrategy(mmStrategy);
|
|
1963
|
+
logger_1.logger.info('Market making strategy registered');
|
|
1964
|
+
}
|
|
1965
|
+
// Register crypto HFT adapter if configured
|
|
1966
|
+
if (config.trading?.cryptoHft?.enabled) {
|
|
1967
|
+
try {
|
|
1968
|
+
const { createCryptoFeed } = await Promise.resolve().then(() => __importStar(require('../feeds/crypto/index.js')));
|
|
1969
|
+
const { createCryptoHftAdapter } = await Promise.resolve().then(() => __importStar(require('../trading/adapters/index.js')));
|
|
1970
|
+
const cryptoFeed = createCryptoFeed();
|
|
1971
|
+
const hftStrategy = createCryptoHftAdapter({
|
|
1972
|
+
feed: cryptoFeed,
|
|
1973
|
+
execution: executionService,
|
|
1974
|
+
config: config.trading.cryptoHft,
|
|
1975
|
+
});
|
|
1976
|
+
botManager.registerStrategy(hftStrategy);
|
|
1977
|
+
logger_1.logger.info('Crypto HFT adapter registered');
|
|
1978
|
+
}
|
|
1979
|
+
catch (err) {
|
|
1980
|
+
logger_1.logger.warn({ err }, 'Failed to load crypto HFT adapter');
|
|
1981
|
+
}
|
|
1982
|
+
}
|
|
1983
|
+
// Register HFT divergence adapter if configured
|
|
1984
|
+
if (config.trading?.hftDivergence?.enabled) {
|
|
1985
|
+
try {
|
|
1986
|
+
const { createCryptoFeed } = await Promise.resolve().then(() => __importStar(require('../feeds/crypto/index.js')));
|
|
1987
|
+
const { createDivergenceAdapter } = await Promise.resolve().then(() => __importStar(require('../trading/adapters/index.js')));
|
|
1988
|
+
const cryptoFeed = createCryptoFeed();
|
|
1989
|
+
const divStrategy = createDivergenceAdapter({
|
|
1990
|
+
feed: cryptoFeed,
|
|
1991
|
+
execution: executionService,
|
|
1992
|
+
config: config.trading.hftDivergence,
|
|
1993
|
+
});
|
|
1994
|
+
botManager.registerStrategy(divStrategy);
|
|
1995
|
+
logger_1.logger.info('HFT divergence adapter registered');
|
|
1996
|
+
}
|
|
1997
|
+
catch (err) {
|
|
1998
|
+
logger_1.logger.warn({ err }, 'Failed to load HFT divergence adapter');
|
|
1999
|
+
}
|
|
2000
|
+
}
|
|
2001
|
+
logger_1.logger.info({ strategies: botManager.getStrategies().length }, 'Bot manager initialized with built-in strategies');
|
|
2002
|
+
// Wire trading API endpoints (positions, portfolio, orders, signals, orchestrator)
|
|
2003
|
+
const backtestEngine = (0, backtest_1.createBacktestEngine)(db);
|
|
2004
|
+
const tradingApiRouter = (0, api_routes_1.createTradingApiRouter)({
|
|
2005
|
+
db,
|
|
2006
|
+
execution: executionService,
|
|
2007
|
+
orchestrator,
|
|
2008
|
+
safety: safetyManager,
|
|
2009
|
+
signalRouter,
|
|
2010
|
+
botManager,
|
|
2011
|
+
tradeLogger,
|
|
2012
|
+
tickRecorder,
|
|
2013
|
+
backtestEngine,
|
|
2014
|
+
strategyBuilder,
|
|
2015
|
+
signalBus,
|
|
2016
|
+
featureEngine,
|
|
2017
|
+
positionManager,
|
|
2018
|
+
mlPipeline,
|
|
2019
|
+
});
|
|
2020
|
+
httpGateway.setTradingApiRouter(tradingApiRouter);
|
|
2021
|
+
return {
|
|
2022
|
+
async start() {
|
|
2023
|
+
logger_1.logger.info('Starting gateway services');
|
|
2024
|
+
// Setup graceful shutdown handlers
|
|
2025
|
+
(0, production_1.setupShutdownHandlers)();
|
|
2026
|
+
// Register shutdown cleanup
|
|
2027
|
+
(0, production_1.onShutdown)(async () => {
|
|
2028
|
+
logger_1.logger.info('Shutting down gateway services');
|
|
2029
|
+
if (executionProducer)
|
|
2030
|
+
await executionProducer.close();
|
|
2031
|
+
if (botManager) {
|
|
2032
|
+
for (const s of botManager.getAllBotStatuses()) {
|
|
2033
|
+
if (s.status === 'running' || s.status === 'paused') {
|
|
2034
|
+
await botManager.stopBot(s.id);
|
|
2035
|
+
}
|
|
2036
|
+
}
|
|
2037
|
+
}
|
|
2038
|
+
if (whaleTracker)
|
|
2039
|
+
whaleTracker.stop();
|
|
2040
|
+
if (copyTrading)
|
|
2041
|
+
copyTrading.stop();
|
|
2042
|
+
if (realtimeAlerts)
|
|
2043
|
+
realtimeAlerts.stop();
|
|
2044
|
+
if (arbitrageExecutor)
|
|
2045
|
+
arbitrageExecutor.stop();
|
|
2046
|
+
if (mlPipeline)
|
|
2047
|
+
mlPipeline.stop();
|
|
2048
|
+
if (positionBridge)
|
|
2049
|
+
positionBridge.stop();
|
|
2050
|
+
if (signalRouter)
|
|
2051
|
+
signalRouter.stop();
|
|
2052
|
+
// Stop event flow first, then flush pending writes
|
|
2053
|
+
signalBus.disconnectFeeds();
|
|
2054
|
+
if (tickRecorder)
|
|
2055
|
+
await tickRecorder.stop();
|
|
2056
|
+
if (tickStreamer)
|
|
2057
|
+
tickStreamer.stop();
|
|
2058
|
+
if (cronService)
|
|
2059
|
+
await cronService.stop();
|
|
2060
|
+
if (monitoring)
|
|
2061
|
+
monitoring.stop();
|
|
2062
|
+
providerHealth?.stop();
|
|
2063
|
+
await feeds.stop();
|
|
2064
|
+
if (channels)
|
|
2065
|
+
await channels.stop();
|
|
2066
|
+
await httpGateway.stop();
|
|
2067
|
+
db.close();
|
|
2068
|
+
});
|
|
2069
|
+
await httpGateway.start();
|
|
2070
|
+
const wss = httpGateway.getWebSocketServer();
|
|
2071
|
+
if (wss) {
|
|
2072
|
+
channels.attachWebSocket(wss);
|
|
2073
|
+
}
|
|
2074
|
+
await feeds.start();
|
|
2075
|
+
await channels.start();
|
|
2076
|
+
providerHealth?.start();
|
|
2077
|
+
await startCronService();
|
|
2078
|
+
startMonitoring();
|
|
2079
|
+
// Start whale tracker if enabled
|
|
2080
|
+
if (whaleTracker) {
|
|
2081
|
+
await whaleTracker.start();
|
|
2082
|
+
logger_1.logger.info('Whale tracker started');
|
|
2083
|
+
}
|
|
2084
|
+
// Start copy trading if enabled
|
|
2085
|
+
if (copyTrading) {
|
|
2086
|
+
copyTrading.start();
|
|
2087
|
+
logger_1.logger.info('Copy trading service started');
|
|
2088
|
+
}
|
|
2089
|
+
// Start realtime alerts if enabled
|
|
2090
|
+
if (realtimeAlerts) {
|
|
2091
|
+
realtimeAlerts.start();
|
|
2092
|
+
logger_1.logger.info('Realtime alerts service started');
|
|
2093
|
+
}
|
|
2094
|
+
// Start arbitrage executor if enabled
|
|
2095
|
+
if (arbitrageExecutor) {
|
|
2096
|
+
arbitrageExecutor.start();
|
|
2097
|
+
logger_1.logger.info('Arbitrage executor started');
|
|
2098
|
+
}
|
|
2099
|
+
// Start signal router if enabled
|
|
2100
|
+
if (signalRouter) {
|
|
2101
|
+
signalRouter.start(signalBus);
|
|
2102
|
+
logger_1.logger.info('Signal router started');
|
|
2103
|
+
}
|
|
2104
|
+
// Start ML pipeline if enabled (after signal router so it can subscribe)
|
|
2105
|
+
if (mlPipeline && signalRouter) {
|
|
2106
|
+
mlPipeline.start(signalRouter, null);
|
|
2107
|
+
logger_1.logger.info('ML training pipeline started');
|
|
2108
|
+
}
|
|
2109
|
+
// Start position bridge (subscribes to ticks, fills, and close events)
|
|
2110
|
+
if (positionBridge) {
|
|
2111
|
+
positionBridge.start();
|
|
2112
|
+
logger_1.logger.info('Position bridge started');
|
|
2113
|
+
}
|
|
2114
|
+
// Start tick recorder if enabled
|
|
2115
|
+
if (tickRecorder) {
|
|
2116
|
+
await tickRecorder.start();
|
|
2117
|
+
logger_1.logger.info('Tick recorder started');
|
|
2118
|
+
}
|
|
2119
|
+
// Start Percolator feed + keeper if enabled
|
|
2120
|
+
if (percolatorService) {
|
|
2121
|
+
await percolatorService.feed.connect();
|
|
2122
|
+
if (percolatorService.keeper) {
|
|
2123
|
+
percolatorService.keeper.start();
|
|
2124
|
+
}
|
|
2125
|
+
logger_1.logger.info('Percolator service started');
|
|
2126
|
+
}
|
|
2127
|
+
// Start Bittensor mining service if enabled
|
|
2128
|
+
if (bittensorService) {
|
|
2129
|
+
await bittensorService.start();
|
|
2130
|
+
logger_1.logger.info('Bittensor mining service started');
|
|
2131
|
+
}
|
|
2132
|
+
// Start alt-data sentiment pipeline if enabled
|
|
2133
|
+
const altDataCfg = currentConfig.altData;
|
|
2134
|
+
if (altDataCfg?.enabled !== false) {
|
|
2135
|
+
altDataService = (0, alt_data_1.createAltDataService)({
|
|
2136
|
+
config: altDataCfg ?? {},
|
|
2137
|
+
signalBus,
|
|
2138
|
+
feeds: feeds,
|
|
2139
|
+
embeddings: embeddings,
|
|
2140
|
+
});
|
|
2141
|
+
await altDataService.start();
|
|
2142
|
+
logger_1.logger.info({ feeds: altDataService.getStats().activeFeeds }, 'Alt-data service started');
|
|
2143
|
+
}
|
|
2144
|
+
started = true;
|
|
2145
|
+
if (!channelRateLimitCleanupInterval) {
|
|
2146
|
+
channelRateLimitCleanupInterval = setInterval(() => {
|
|
2147
|
+
for (const entry of channelRateLimiters.values()) {
|
|
2148
|
+
entry.limiter.cleanup();
|
|
2149
|
+
}
|
|
2150
|
+
}, 5 * 60 * 1000);
|
|
2151
|
+
}
|
|
2152
|
+
startMarketCacheCleanup();
|
|
2153
|
+
startMarketIndexSync();
|
|
2154
|
+
const positionConfig = currentConfig.positions ?? {};
|
|
2155
|
+
const positionUpdatesEnabled = positionConfig.enabled !== false;
|
|
2156
|
+
if (positionUpdatesEnabled) {
|
|
2157
|
+
const intervalMs = positionConfig.priceUpdateIntervalMs ?? 5 * 60 * 1000;
|
|
2158
|
+
if (!positionPriceUpdateInterval) {
|
|
2159
|
+
updatePositionPrices().catch((error) => {
|
|
2160
|
+
logger_1.logger.warn({ error }, 'Initial position price update failed');
|
|
2161
|
+
});
|
|
2162
|
+
positionPriceUpdateInterval = setInterval(() => {
|
|
2163
|
+
updatePositionPrices().catch((error) => {
|
|
2164
|
+
logger_1.logger.warn({ error }, 'Position price update failed');
|
|
2165
|
+
});
|
|
2166
|
+
}, intervalMs);
|
|
2167
|
+
logger_1.logger.info({ intervalMs }, 'Position price updater started');
|
|
2168
|
+
}
|
|
2169
|
+
}
|
|
2170
|
+
setupSkillWatcher();
|
|
2171
|
+
setupConfigWatcher();
|
|
2172
|
+
logger_1.logger.info({ port: currentConfig.gateway.port }, 'Gateway started');
|
|
2173
|
+
},
|
|
2174
|
+
async stop() {
|
|
2175
|
+
logger_1.logger.info('Stopping gateway services');
|
|
2176
|
+
if (cronService) {
|
|
2177
|
+
cronService.stop();
|
|
2178
|
+
cronService = null;
|
|
2179
|
+
}
|
|
2180
|
+
for (const watcher of watchers) {
|
|
2181
|
+
try {
|
|
2182
|
+
await watcher.close();
|
|
2183
|
+
}
|
|
2184
|
+
catch (error) {
|
|
2185
|
+
logger_1.logger.warn({ error }, 'Failed to close watcher cleanly');
|
|
2186
|
+
}
|
|
2187
|
+
}
|
|
2188
|
+
if (skillReloadTimer) {
|
|
2189
|
+
clearTimeout(skillReloadTimer);
|
|
2190
|
+
skillReloadTimer = null;
|
|
2191
|
+
}
|
|
2192
|
+
if (configReloadTimer) {
|
|
2193
|
+
clearTimeout(configReloadTimer);
|
|
2194
|
+
configReloadTimer = null;
|
|
2195
|
+
}
|
|
2196
|
+
if (reloadInFlight) {
|
|
2197
|
+
await reloadInFlight;
|
|
2198
|
+
}
|
|
2199
|
+
if (channelRateLimitCleanupInterval) {
|
|
2200
|
+
clearInterval(channelRateLimitCleanupInterval);
|
|
2201
|
+
channelRateLimitCleanupInterval = null;
|
|
2202
|
+
}
|
|
2203
|
+
if (positionPriceUpdateInterval) {
|
|
2204
|
+
clearInterval(positionPriceUpdateInterval);
|
|
2205
|
+
positionPriceUpdateInterval = null;
|
|
2206
|
+
}
|
|
2207
|
+
if (marketCacheCleanupInterval) {
|
|
2208
|
+
clearInterval(marketCacheCleanupInterval);
|
|
2209
|
+
marketCacheCleanupInterval = null;
|
|
2210
|
+
}
|
|
2211
|
+
if (marketIndexSyncInterval) {
|
|
2212
|
+
clearInterval(marketIndexSyncInterval);
|
|
2213
|
+
marketIndexSyncInterval = null;
|
|
2214
|
+
}
|
|
2215
|
+
agents.dispose();
|
|
2216
|
+
providerHealth?.stop();
|
|
2217
|
+
monitoring?.stop();
|
|
2218
|
+
monitoring = null;
|
|
2219
|
+
// Stop Percolator service
|
|
2220
|
+
if (percolatorService) {
|
|
2221
|
+
if (percolatorService.keeper)
|
|
2222
|
+
percolatorService.keeper.stop();
|
|
2223
|
+
percolatorService.feed.disconnect();
|
|
2224
|
+
percolatorService = null;
|
|
2225
|
+
}
|
|
2226
|
+
// Stop Bittensor mining service
|
|
2227
|
+
if (bittensorService) {
|
|
2228
|
+
await bittensorService.stop();
|
|
2229
|
+
(0, bittensor_2.setBittensorService)(null);
|
|
2230
|
+
bittensorService = null;
|
|
2231
|
+
}
|
|
2232
|
+
// Stop alt-data service
|
|
2233
|
+
if (altDataService) {
|
|
2234
|
+
altDataService.stop();
|
|
2235
|
+
altDataService = null;
|
|
2236
|
+
}
|
|
2237
|
+
// Stop arbitrage executor
|
|
2238
|
+
if (arbitrageExecutor) {
|
|
2239
|
+
arbitrageExecutor.stop();
|
|
2240
|
+
arbitrageExecutor = null;
|
|
2241
|
+
}
|
|
2242
|
+
// Stop bot manager (stops all running bots)
|
|
2243
|
+
if (botManager) {
|
|
2244
|
+
for (const s of botManager.getAllBotStatuses()) {
|
|
2245
|
+
if (s.status === 'running' || s.status === 'paused') {
|
|
2246
|
+
await botManager.stopBot(s.id);
|
|
2247
|
+
}
|
|
2248
|
+
}
|
|
2249
|
+
botManager = null;
|
|
2250
|
+
}
|
|
2251
|
+
tradeLogger = null;
|
|
2252
|
+
strategyBuilder = null;
|
|
2253
|
+
// Stop ML pipeline (before signal router, since it subscribes to router events)
|
|
2254
|
+
if (mlPipeline) {
|
|
2255
|
+
mlPipeline.stop();
|
|
2256
|
+
mlPipeline = null;
|
|
2257
|
+
}
|
|
2258
|
+
// Stop position bridge (before signal router, since it subscribes to router events)
|
|
2259
|
+
if (positionBridge) {
|
|
2260
|
+
positionBridge.stop();
|
|
2261
|
+
positionBridge = null;
|
|
2262
|
+
}
|
|
2263
|
+
// Stop signal router
|
|
2264
|
+
if (signalRouter) {
|
|
2265
|
+
signalRouter.stop();
|
|
2266
|
+
signalRouter = null;
|
|
2267
|
+
}
|
|
2268
|
+
// Stop event flow first, then flush pending writes
|
|
2269
|
+
signalBus.disconnectFeeds();
|
|
2270
|
+
if (tickRecorder) {
|
|
2271
|
+
await tickRecorder.stop();
|
|
2272
|
+
tickRecorder = null;
|
|
2273
|
+
}
|
|
2274
|
+
if (tickStreamer) {
|
|
2275
|
+
tickStreamer.stop();
|
|
2276
|
+
tickStreamer = null;
|
|
2277
|
+
}
|
|
2278
|
+
// Stop realtime alerts and cleanup subscriptions
|
|
2279
|
+
if (realtimeAlerts) {
|
|
2280
|
+
if (whaleTrackerCleanup) {
|
|
2281
|
+
whaleTrackerCleanup();
|
|
2282
|
+
whaleTrackerCleanup = null;
|
|
2283
|
+
}
|
|
2284
|
+
if (opportunityFinderCleanup) {
|
|
2285
|
+
opportunityFinderCleanup();
|
|
2286
|
+
opportunityFinderCleanup = null;
|
|
2287
|
+
}
|
|
2288
|
+
realtimeAlerts.stop();
|
|
2289
|
+
realtimeAlerts = null;
|
|
2290
|
+
}
|
|
2291
|
+
// Stop copy trading and whale tracker
|
|
2292
|
+
if (copyTrading) {
|
|
2293
|
+
copyTrading.stop();
|
|
2294
|
+
copyTrading = null;
|
|
2295
|
+
}
|
|
2296
|
+
if (whaleTracker) {
|
|
2297
|
+
whaleTracker.stop();
|
|
2298
|
+
whaleTracker = null;
|
|
2299
|
+
}
|
|
2300
|
+
// Close execution queue producer
|
|
2301
|
+
if (executionProducer) {
|
|
2302
|
+
await executionProducer.close();
|
|
2303
|
+
executionProducer = null;
|
|
2304
|
+
}
|
|
2305
|
+
await channels?.stop();
|
|
2306
|
+
await feeds.stop();
|
|
2307
|
+
await httpGateway.stop();
|
|
2308
|
+
sessions.dispose();
|
|
2309
|
+
started = false;
|
|
2310
|
+
// Close DB if it exposes a close method
|
|
2311
|
+
try {
|
|
2312
|
+
await db.close();
|
|
2313
|
+
}
|
|
2314
|
+
catch (error) {
|
|
2315
|
+
logger_1.logger.warn({ error }, 'Failed to close database cleanly');
|
|
2316
|
+
}
|
|
2317
|
+
logger_1.logger.info('Gateway stopped');
|
|
2318
|
+
},
|
|
2319
|
+
};
|
|
2320
|
+
}
|
|
2321
|
+
//# sourceMappingURL=index.js.map
|