clodds 1.6.10 → 1.6.11

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.
Files changed (147) hide show
  1. package/dist/agents/handlers/hyperliquid.js +5 -2
  2. package/dist/agents/handlers/hyperliquid.js.map +1 -1
  3. package/dist/agents/handlers/kalshi.js +25 -0
  4. package/dist/agents/handlers/kalshi.js.map +1 -1
  5. package/dist/agents/handlers/opinion.js +1 -1
  6. package/dist/agents/handlers/opinion.js.map +1 -1
  7. package/dist/agents/handlers/polymarket.js +8 -4
  8. package/dist/agents/handlers/polymarket.js.map +1 -1
  9. package/dist/agents/index.js +77 -11
  10. package/dist/agents/index.js.map +1 -1
  11. package/dist/agents/subagents.js +6 -1
  12. package/dist/agents/subagents.js.map +1 -1
  13. package/dist/auth/copilot.js +2 -2
  14. package/dist/channels/telegram/index.js +143 -133
  15. package/dist/channels/telegram/index.js.map +1 -1
  16. package/dist/channels/twitch/index.js +76 -66
  17. package/dist/channels/twitch/index.js.map +1 -1
  18. package/dist/channels/whatsapp/index.js +131 -126
  19. package/dist/channels/whatsapp/index.js.map +1 -1
  20. package/dist/cli/commands/repl.js +9 -2
  21. package/dist/cli/commands/repl.js.map +1 -1
  22. package/dist/config/index.js +3 -0
  23. package/dist/config/index.js.map +1 -1
  24. package/dist/cron/index.js +3 -0
  25. package/dist/cron/index.js.map +1 -1
  26. package/dist/db/index.js +3 -1
  27. package/dist/db/index.js.map +1 -1
  28. package/dist/execution/bracket-orders.js +102 -31
  29. package/dist/execution/bracket-orders.js.map +1 -1
  30. package/dist/execution/circuit-breaker.js +3 -4
  31. package/dist/execution/circuit-breaker.js.map +1 -1
  32. package/dist/execution/dca.js +46 -3
  33. package/dist/execution/dca.js.map +1 -1
  34. package/dist/execution/futures.js +8 -5
  35. package/dist/execution/futures.js.map +1 -1
  36. package/dist/execution/index.js +150 -44
  37. package/dist/execution/index.js.map +1 -1
  38. package/dist/execution/twap.js +35 -2
  39. package/dist/execution/twap.js.map +1 -1
  40. package/dist/extensions/task-runner/index.js +38 -0
  41. package/dist/extensions/task-runner/index.js.map +1 -1
  42. package/dist/feeds/betfair/index.js +8 -1
  43. package/dist/feeds/betfair/index.js.map +1 -1
  44. package/dist/feeds/crypto/whale-tracker.js +24 -5
  45. package/dist/feeds/crypto/whale-tracker.js.map +1 -1
  46. package/dist/feeds/hedgehog/index.js +12 -0
  47. package/dist/feeds/hedgehog/index.js.map +1 -1
  48. package/dist/feeds/kalshi/index.js +7 -7
  49. package/dist/feeds/kalshi/index.js.map +1 -1
  50. package/dist/feeds/manifold/index.js +12 -0
  51. package/dist/feeds/manifold/index.js.map +1 -1
  52. package/dist/feeds/polymarket/index.js +3 -2
  53. package/dist/feeds/polymarket/index.js.map +1 -1
  54. package/dist/feeds/polymarket/user-ws.js +32 -9
  55. package/dist/feeds/polymarket/user-ws.js.map +1 -1
  56. package/dist/feeds/smarkets/index.js +7 -1
  57. package/dist/feeds/smarkets/index.js.map +1 -1
  58. package/dist/gateway/api-routes.js +32 -2
  59. package/dist/gateway/api-routes.js.map +1 -1
  60. package/dist/gateway/dca-routes.d.ts +5 -1
  61. package/dist/gateway/dca-routes.js +32 -1
  62. package/dist/gateway/dca-routes.js.map +1 -1
  63. package/dist/gateway/index.js +6 -5
  64. package/dist/gateway/index.js.map +1 -1
  65. package/dist/gateway/payments-routes.js +1 -1
  66. package/dist/gateway/payments-routes.js.map +1 -1
  67. package/dist/gateway/percolator-routes.js +3 -3
  68. package/dist/gateway/percolator-routes.js.map +1 -1
  69. package/dist/gateway/risk-routes.js +2 -2
  70. package/dist/gateway/risk-routes.js.map +1 -1
  71. package/dist/gateway/server.js +12 -2
  72. package/dist/gateway/server.js.map +1 -1
  73. package/dist/gateway/signal-bus.js +23 -4
  74. package/dist/gateway/signal-bus.js.map +1 -1
  75. package/dist/index.js +14 -0
  76. package/dist/index.js.map +1 -1
  77. package/dist/infra/index.js +27 -22
  78. package/dist/infra/index.js.map +1 -1
  79. package/dist/link-understanding/index.js +7 -1
  80. package/dist/link-understanding/index.js.map +1 -1
  81. package/dist/monitoring/alerts.js +1 -1
  82. package/dist/monitoring/alerts.js.map +1 -1
  83. package/dist/monitoring/metrics.js +49 -0
  84. package/dist/monitoring/metrics.js.map +1 -1
  85. package/dist/opportunity/analytics.js +2 -2
  86. package/dist/opportunity/analytics.js.map +1 -1
  87. package/dist/opportunity/executor.js +2 -2
  88. package/dist/opportunity/executor.js.map +1 -1
  89. package/dist/opportunity/index.d.ts +2 -0
  90. package/dist/opportunity/index.js +18 -2
  91. package/dist/opportunity/index.js.map +1 -1
  92. package/dist/opportunity/scoring.d.ts +1 -0
  93. package/dist/opportunity/scoring.js.map +1 -1
  94. package/dist/providers/discovery.d.ts +1 -1
  95. package/dist/services/feature-engineering/rolling-window.js +7 -0
  96. package/dist/services/feature-engineering/rolling-window.js.map +1 -1
  97. package/dist/services/tick-streamer/index.js +4 -0
  98. package/dist/services/tick-streamer/index.js.map +1 -1
  99. package/dist/session/index.js +14 -0
  100. package/dist/session/index.js.map +1 -1
  101. package/dist/sessions/index.js +1 -1
  102. package/dist/sessions/index.js.map +1 -1
  103. package/dist/signal-router/router.js +7 -0
  104. package/dist/signal-router/router.js.map +1 -1
  105. package/dist/skills/bundled/dca/index.js +3 -1
  106. package/dist/skills/bundled/dca/index.js.map +1 -1
  107. package/dist/skills/bundled/hyperliquid/index.js +1 -1
  108. package/dist/skills/bundled/hyperliquid/index.js.map +1 -1
  109. package/dist/skills/bundled/qmd/index.js +1 -1
  110. package/dist/skills/bundled/qmd/index.js.map +1 -1
  111. package/dist/skills/bundled/ticks/index.js +1 -1
  112. package/dist/skills/bundled/ticks/index.js.map +1 -1
  113. package/dist/skills/index.js +1 -1
  114. package/dist/skills/index.js.map +1 -1
  115. package/dist/solana/pump-swarm.js +1 -1
  116. package/dist/solana/pump-swarm.js.map +1 -1
  117. package/dist/solana/swarm-builders.js +26 -0
  118. package/dist/solana/swarm-builders.js.map +1 -1
  119. package/dist/strategies/crypto-hft/index.js +7 -3
  120. package/dist/strategies/crypto-hft/index.js.map +1 -1
  121. package/dist/terminal/index.js +11 -5
  122. package/dist/terminal/index.js.map +1 -1
  123. package/dist/tools/browser.js +8 -1
  124. package/dist/tools/browser.js.map +1 -1
  125. package/dist/tools/sql.js +2 -1
  126. package/dist/tools/sql.js.map +1 -1
  127. package/dist/trading/backtest.js +1 -1
  128. package/dist/trading/backtest.js.map +1 -1
  129. package/dist/trading/copy-trading.js +7 -0
  130. package/dist/trading/copy-trading.js.map +1 -1
  131. package/dist/trading/futures/index.js +5 -5
  132. package/dist/trading/futures/index.js.map +1 -1
  133. package/dist/trading/index.js +7 -6
  134. package/dist/trading/index.js.map +1 -1
  135. package/dist/trading/kelly.js +21 -0
  136. package/dist/trading/kelly.js.map +1 -1
  137. package/dist/trading/logger.js +13 -1
  138. package/dist/trading/logger.js.map +1 -1
  139. package/dist/trading/ml-signals.js +15 -6
  140. package/dist/trading/ml-signals.js.map +1 -1
  141. package/dist/trading/orchestrator.js +25 -1
  142. package/dist/trading/orchestrator.js.map +1 -1
  143. package/dist/trading/safety.js +7 -9
  144. package/dist/trading/safety.js.map +1 -1
  145. package/dist/utils/config.js +3 -0
  146. package/dist/utils/config.js.map +1 -1
  147. package/package.json +1 -1
@@ -9079,9 +9079,10 @@ async function executeTool(toolName, toolInput, context) {
9079
9079
  return JSON.stringify({ error: 'Trading execution not available. Configure trading.enabled=true.' });
9080
9080
  }
9081
9081
  // Buy YES
9082
- const yesResult = await execSvc.buyLimit({ platform: 'polymarket', marketId: yesToken.token_id, tokenId: yesToken.token_id, price: yesAsk, size });
9082
+ const arbMarketId = marketData.condition_id || yesToken.token_id;
9083
+ const yesResult = await execSvc.buyLimit({ platform: 'polymarket', marketId: arbMarketId, tokenId: yesToken.token_id, price: yesAsk, size });
9083
9084
  // Buy NO
9084
- const noResult = await execSvc.buyLimit({ platform: 'polymarket', marketId: noToken.token_id, tokenId: noToken.token_id, price: noAsk, size });
9085
+ const noResult = await execSvc.buyLimit({ platform: 'polymarket', marketId: arbMarketId, tokenId: noToken.token_id, price: noAsk, size });
9085
9086
  await context.credentials.markSuccess(userId, 'polymarket');
9086
9087
  return JSON.stringify({
9087
9088
  result: {
@@ -9339,7 +9340,7 @@ async function executeTool(toolName, toolInput, context) {
9339
9340
  try {
9340
9341
  const result = await execSvc.buyLimit({
9341
9342
  platform: 'polymarket',
9342
- marketId: tokenId,
9343
+ marketId: toolInput.condition_id || tokenId,
9343
9344
  tokenId,
9344
9345
  price,
9345
9346
  size,
@@ -9378,13 +9379,25 @@ async function executeTool(toolName, toolInput, context) {
9378
9379
  const tokenId = toolInput.token_id;
9379
9380
  const size = toolInput.size;
9380
9381
  const price = toolInput.price || 0.01;
9382
+ const notional = price * size;
9383
+ const maxError = (0, risk_1.enforceMaxOrderSize)(context, notional, 'polymarket_sell');
9384
+ if (maxError)
9385
+ return maxError;
9386
+ const exposureError = (0, risk_1.enforceExposureLimits)(context, userId, {
9387
+ platform: 'polymarket',
9388
+ outcomeId: tokenId,
9389
+ notional,
9390
+ label: 'polymarket_sell',
9391
+ });
9392
+ if (exposureError)
9393
+ return exposureError;
9381
9394
  // Use TypeScript execution service if available
9382
9395
  const execSvc = context.tradingContext?.executionService;
9383
9396
  if (execSvc) {
9384
9397
  try {
9385
9398
  const result = await execSvc.sellLimit({
9386
9399
  platform: 'polymarket',
9387
- marketId: tokenId,
9400
+ marketId: toolInput.condition_id || tokenId,
9388
9401
  tokenId,
9389
9402
  price,
9390
9403
  size,
@@ -9631,13 +9644,24 @@ async function executeTool(toolName, toolInput, context) {
9631
9644
  case 'polymarket_market_sell': {
9632
9645
  const tokenId = toolInput.token_id;
9633
9646
  const size = toolInput.size;
9647
+ const maxError = (0, risk_1.enforceMaxOrderSize)(context, size, 'polymarket_market_sell');
9648
+ if (maxError)
9649
+ return maxError;
9650
+ const exposureError = (0, risk_1.enforceExposureLimits)(context, userId, {
9651
+ platform: 'polymarket',
9652
+ outcomeId: tokenId,
9653
+ notional: size,
9654
+ label: 'polymarket_market_sell',
9655
+ });
9656
+ if (exposureError)
9657
+ return exposureError;
9634
9658
  // Use TypeScript execution service if available
9635
9659
  const execSvc = context.tradingContext?.executionService;
9636
9660
  if (execSvc) {
9637
9661
  try {
9638
9662
  const result = await execSvc.marketSell({
9639
9663
  platform: 'polymarket',
9640
- marketId: tokenId,
9664
+ marketId: toolInput.condition_id || tokenId,
9641
9665
  tokenId,
9642
9666
  size,
9643
9667
  });
@@ -9689,11 +9713,28 @@ async function executeTool(toolName, toolInput, context) {
9689
9713
  const execSvc = context.tradingContext?.executionService;
9690
9714
  if (execSvc) {
9691
9715
  try {
9716
+ // Fetch current buy price to convert USD amount to shares.
9717
+ // Polymarket size = number of shares, not USD.
9718
+ let buyPrice = 0.99; // fallback: worst-case price
9719
+ try {
9720
+ const priceRes = await fetchPolymarketClob(context, `https://clob.polymarket.com/price?token_id=${tokenId}&side=buy`);
9721
+ const priceData = await priceRes.json();
9722
+ const parsed = Number(priceData.price);
9723
+ if (parsed > 0 && parsed <= 1)
9724
+ buyPrice = parsed;
9725
+ }
9726
+ catch {
9727
+ // Use fallback price if CLOB price fetch fails
9728
+ }
9729
+ const shares = Math.floor(amount / buyPrice);
9730
+ if (shares <= 0) {
9731
+ return JSON.stringify({ error: 'Market buy failed', details: `Amount $${amount} too small at price ${buyPrice}` });
9732
+ }
9692
9733
  const result = await execSvc.marketBuy({
9693
9734
  platform: 'polymarket',
9694
- marketId: tokenId,
9735
+ marketId: toolInput.condition_id || tokenId,
9695
9736
  tokenId,
9696
- size: amount,
9737
+ size: shares,
9697
9738
  });
9698
9739
  if (result.success) {
9699
9740
  await context.credentials.markSuccess(userId, 'polymarket');
@@ -9747,7 +9788,7 @@ async function executeTool(toolName, toolInput, context) {
9747
9788
  try {
9748
9789
  const result = await execSvc.makerBuy({
9749
9790
  platform: 'polymarket',
9750
- marketId: tokenId,
9791
+ marketId: toolInput.condition_id || tokenId,
9751
9792
  tokenId,
9752
9793
  price,
9753
9794
  size,
@@ -9786,13 +9827,25 @@ async function executeTool(toolName, toolInput, context) {
9786
9827
  const tokenId = toolInput.token_id;
9787
9828
  const price = toolInput.price;
9788
9829
  const size = toolInput.size;
9830
+ const notional = price * size;
9831
+ const maxError = (0, risk_1.enforceMaxOrderSize)(context, notional, 'polymarket_maker_sell');
9832
+ if (maxError)
9833
+ return maxError;
9834
+ const exposureError = (0, risk_1.enforceExposureLimits)(context, userId, {
9835
+ platform: 'polymarket',
9836
+ outcomeId: tokenId,
9837
+ notional,
9838
+ label: 'polymarket_maker_sell',
9839
+ });
9840
+ if (exposureError)
9841
+ return exposureError;
9789
9842
  // Use TypeScript execution service if available
9790
9843
  const execSvc = context.tradingContext?.executionService;
9791
9844
  if (execSvc) {
9792
9845
  try {
9793
9846
  const result = await execSvc.makerSell({
9794
9847
  platform: 'polymarket',
9795
- marketId: tokenId,
9848
+ marketId: toolInput.condition_id || tokenId,
9796
9849
  tokenId,
9797
9850
  price,
9798
9851
  size,
@@ -15970,8 +16023,21 @@ async function createAgentManager(config, feeds, db, sessionManager, sendMessage
15970
16023
  }
15971
16024
  const client = new sdk_1.default({ apiKey });
15972
16025
  const skills = (0, loader_1.createSkillManager)(config.agents.defaults.workspace);
15973
- const createCredentialsManager = await _loadCredentials();
15974
- const credentials = createCredentialsManager(db);
16026
+ let credentials;
16027
+ try {
16028
+ const createCredentialsManager = await _loadCredentials();
16029
+ credentials = createCredentialsManager(db);
16030
+ }
16031
+ catch (err) {
16032
+ logger_1.logger.warn({ err }, '[agents] Failed to load credentials module — credential tools disabled');
16033
+ credentials = {
16034
+ get: () => null,
16035
+ set: () => { },
16036
+ delete: () => { },
16037
+ list: () => [],
16038
+ has: () => false,
16039
+ };
16040
+ }
15975
16041
  const transcription = (0, transcription_1.createTranscriptionTool)(config.agents.defaults.workspace);
15976
16042
  const files = (0, files_1.createFileTool)(config.agents.defaults.workspace);
15977
16043
  const shellHistory = (0, shell_history_1.createShellHistoryTool)();