@continuumdao/ctm-mpc-defi 0.2.20 → 0.2.22

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 (93) hide show
  1. package/dist/agent/catalog.cjs +118 -37
  2. package/dist/agent/catalog.cjs.map +1 -1
  3. package/dist/agent/catalog.d.ts +310 -97
  4. package/dist/agent/catalog.js +117 -38
  5. package/dist/agent/catalog.js.map +1 -1
  6. package/dist/agent/skills/uniswap-v4/SKILL.md +58 -0
  7. package/dist/chains/evm/index.cjs +5 -1
  8. package/dist/chains/evm/index.cjs.map +1 -1
  9. package/dist/chains/evm/index.d.ts +4 -4
  10. package/dist/chains/evm/index.js +5 -1
  11. package/dist/chains/evm/index.js.map +1 -1
  12. package/dist/chains/near/index.d.ts +1 -1
  13. package/dist/chains/solana/index.d.ts +1 -1
  14. package/dist/core/index.cjs +25 -0
  15. package/dist/core/index.cjs.map +1 -1
  16. package/dist/core/index.d.ts +12 -5
  17. package/dist/core/index.js +23 -1
  18. package/dist/core/index.js.map +1 -1
  19. package/dist/{envelope-CpBUh9eP.d.ts → envelope-C_bfuKab.d.ts} +3 -1
  20. package/dist/index.cjs +27 -1
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.d.ts +5 -5
  23. package/dist/index.js +25 -2
  24. package/dist/index.js.map +1 -1
  25. package/dist/protocols/evm/aave-v4/index.cjs +5 -1
  26. package/dist/protocols/evm/aave-v4/index.cjs.map +1 -1
  27. package/dist/protocols/evm/aave-v4/index.d.ts +1 -1
  28. package/dist/protocols/evm/aave-v4/index.js +5 -1
  29. package/dist/protocols/evm/aave-v4/index.js.map +1 -1
  30. package/dist/protocols/evm/circle-cctp/index.cjs +5 -1
  31. package/dist/protocols/evm/circle-cctp/index.cjs.map +1 -1
  32. package/dist/protocols/evm/circle-cctp/index.d.ts +2 -2
  33. package/dist/protocols/evm/circle-cctp/index.js +5 -1
  34. package/dist/protocols/evm/circle-cctp/index.js.map +1 -1
  35. package/dist/protocols/evm/curve-dao/index.cjs +5 -1
  36. package/dist/protocols/evm/curve-dao/index.cjs.map +1 -1
  37. package/dist/protocols/evm/curve-dao/index.d.ts +2 -2
  38. package/dist/protocols/evm/curve-dao/index.js +5 -1
  39. package/dist/protocols/evm/curve-dao/index.js.map +1 -1
  40. package/dist/protocols/evm/ethena/index.cjs +5 -1
  41. package/dist/protocols/evm/ethena/index.cjs.map +1 -1
  42. package/dist/protocols/evm/ethena/index.d.ts +1 -1
  43. package/dist/protocols/evm/ethena/index.js +5 -1
  44. package/dist/protocols/evm/ethena/index.js.map +1 -1
  45. package/dist/protocols/evm/euler-v2/index.cjs +5 -1
  46. package/dist/protocols/evm/euler-v2/index.cjs.map +1 -1
  47. package/dist/protocols/evm/euler-v2/index.d.ts +1 -1
  48. package/dist/protocols/evm/euler-v2/index.js +5 -1
  49. package/dist/protocols/evm/euler-v2/index.js.map +1 -1
  50. package/dist/protocols/evm/gmx/index.cjs +5 -1
  51. package/dist/protocols/evm/gmx/index.cjs.map +1 -1
  52. package/dist/protocols/evm/gmx/index.d.ts +2 -2
  53. package/dist/protocols/evm/gmx/index.js +5 -1
  54. package/dist/protocols/evm/gmx/index.js.map +1 -1
  55. package/dist/protocols/evm/hyperliquid/index.cjs +6 -1
  56. package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
  57. package/dist/protocols/evm/hyperliquid/index.d.ts +2 -2
  58. package/dist/protocols/evm/hyperliquid/index.js +6 -1
  59. package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
  60. package/dist/protocols/evm/lido/index.cjs +5 -1
  61. package/dist/protocols/evm/lido/index.cjs.map +1 -1
  62. package/dist/protocols/evm/lido/index.d.ts +1 -1
  63. package/dist/protocols/evm/lido/index.js +5 -1
  64. package/dist/protocols/evm/lido/index.js.map +1 -1
  65. package/dist/protocols/evm/maple/index.cjs +5 -1
  66. package/dist/protocols/evm/maple/index.cjs.map +1 -1
  67. package/dist/protocols/evm/maple/index.d.ts +1 -1
  68. package/dist/protocols/evm/maple/index.js +5 -1
  69. package/dist/protocols/evm/maple/index.js.map +1 -1
  70. package/dist/protocols/evm/morpho/index.cjs +5 -1
  71. package/dist/protocols/evm/morpho/index.cjs.map +1 -1
  72. package/dist/protocols/evm/morpho/index.d.ts +1 -1
  73. package/dist/protocols/evm/morpho/index.js +5 -1
  74. package/dist/protocols/evm/morpho/index.js.map +1 -1
  75. package/dist/protocols/evm/permit2/index.cjs +4 -0
  76. package/dist/protocols/evm/permit2/index.cjs.map +1 -1
  77. package/dist/protocols/evm/permit2/index.d.ts +1 -1
  78. package/dist/protocols/evm/permit2/index.js +4 -0
  79. package/dist/protocols/evm/permit2/index.js.map +1 -1
  80. package/dist/protocols/evm/sky/index.cjs +5 -1
  81. package/dist/protocols/evm/sky/index.cjs.map +1 -1
  82. package/dist/protocols/evm/sky/index.d.ts +1 -1
  83. package/dist/protocols/evm/sky/index.js +5 -1
  84. package/dist/protocols/evm/sky/index.js.map +1 -1
  85. package/dist/protocols/evm/uniswap-v4/index.cjs +684 -1
  86. package/dist/protocols/evm/uniswap-v4/index.cjs.map +1 -1
  87. package/dist/protocols/evm/uniswap-v4/index.d.ts +180 -3
  88. package/dist/protocols/evm/uniswap-v4/index.js +662 -2
  89. package/dist/protocols/evm/uniswap-v4/index.js.map +1 -1
  90. package/dist/{registry-Bv5o37_w.d.ts → registry-DxDSPQ-p.d.ts} +1 -1
  91. package/dist/{types-BfjWdw1j.d.ts → types-PZrvtjv8.d.ts} +2 -0
  92. package/dist/{types-DUeNJLr9.d.ts → types-RZWOTm8c.d.ts} +1 -1
  93. package/package.json +2 -2
@@ -89,6 +89,41 @@ function isUniswapV4ChainSupported(chainId) {
89
89
  return typeof a === "string" && a.startsWith("0x");
90
90
  }
91
91
 
92
+ // src/core/defiProxy.ts
93
+ var aaveGraphqlProxyUrl;
94
+ var morphoGraphqlProxyUrl;
95
+ function getAaveGraphqlProxyUrl() {
96
+ return aaveGraphqlProxyUrl;
97
+ }
98
+ function getMorphoGraphqlProxyUrl() {
99
+ return morphoGraphqlProxyUrl;
100
+ }
101
+ async function postJsonViaOptionalProxy(args) {
102
+ const proxy = args.proxyUrl?.trim();
103
+ if (proxy) {
104
+ const r2 = await fetch(proxy, {
105
+ method: "POST",
106
+ headers: { "content-type": "application/json" },
107
+ body: JSON.stringify(args.proxyEnvelope ?? args.body)
108
+ });
109
+ if (!r2.ok) {
110
+ const t = await r2.text().catch(() => "");
111
+ throw new Error(t ? `Proxy HTTP ${r2.status}: ${t.slice(0, 200)}` : `Proxy HTTP ${r2.status}`);
112
+ }
113
+ return await r2.json();
114
+ }
115
+ const r = await fetch(args.directUrl, {
116
+ method: "POST",
117
+ headers: { "content-type": "application/json" },
118
+ body: JSON.stringify(args.body)
119
+ });
120
+ if (!r.ok) {
121
+ const t = await r.text().catch(() => "");
122
+ throw new Error(t ? `HTTP ${r.status}: ${t.slice(0, 200)}` : `HTTP ${r.status}`);
123
+ }
124
+ return await r.json();
125
+ }
126
+
92
127
  // src/protocols/evm/uniswap-v4/index.ts
93
128
  var UNISWAP_V4_PROTOCOL_ID = "uniswap-v4";
94
129
  var uniswapV4ProtocolModule = {
@@ -604,7 +639,10 @@ var evmMultisignCommonInputSchema = zod.z.object({
604
639
  rpcUrl: zod.z.string().min(1).optional().describe("Server-filled from chain registry when keyGenId is set. Agents must not pass rpcUrl."),
605
640
  executorAddress: evmAddressSchema.optional().describe("Server-filled MPC wallet from keyGenId. Agents must not pass executorAddress."),
606
641
  chainDetail: chainDetailSchema.optional().describe("Server-filled gas row from chain registry when keyGenId is set."),
607
- customGasChainDetails: zod.z.record(zod.z.unknown()).optional().describe("Snapshot written to extraJSON.customGasChainDetails when useCustomGas is true.")
642
+ customGasChainDetails: zod.z.record(zod.z.unknown()).optional().describe("Snapshot written to extraJSON.customGasChainDetails when useCustomGas is true."),
643
+ expiryDate: zod.z.number().int().positive().optional().describe(
644
+ "Optional Unix seconds (UTC) when the MPC sign request expires. Uniswap V4, GMX, Hyperliquid, and Curve DAO default to 30 minutes when omitted; other protocols use the node default (7 days)."
645
+ )
608
646
  });
609
647
  function withMultisignKeySourceRefine(schema) {
610
648
  return schema.refine(
@@ -1137,6 +1175,66 @@ var mcpUniswapV4BuildCollectFeesMultisignInputSchema = withMultisignKeySourceRef
1137
1175
  })
1138
1176
  )
1139
1177
  );
1178
+ var uniswapV4OhlcvIntervalSchema = zod.z.enum([
1179
+ "1m",
1180
+ "5m",
1181
+ "15m",
1182
+ "30m",
1183
+ "1h",
1184
+ "2h",
1185
+ "4h",
1186
+ "6h",
1187
+ "8h",
1188
+ "12h",
1189
+ "1d",
1190
+ "2d",
1191
+ "3d",
1192
+ "1w",
1193
+ "1M"
1194
+ ]);
1195
+ var uniswapV4OhlcvCandleSchema = zod.z.object({
1196
+ timestampMs: zod.z.number(),
1197
+ open: zod.z.string(),
1198
+ high: zod.z.string(),
1199
+ low: zod.z.string(),
1200
+ close: zod.z.string(),
1201
+ volume: zod.z.string().optional()
1202
+ });
1203
+ var uniswapV4ExistingPoolOhlcvSchema = zod.z.object({
1204
+ token0Address: evmAddressSchema,
1205
+ token1Address: evmAddressSchema,
1206
+ poolReference: zod.z.string().min(1).optional(),
1207
+ fee: agentCoercedOptionalIntSchema(zod.z.number().int().nonnegative()).optional(),
1208
+ tickSpacing: agentCoercedOptionalIntSchema(zod.z.number().int().positive()).optional(),
1209
+ hooks: evmAddressSchema.optional()
1210
+ });
1211
+ var mcpUniswapV4FetchOhlcvInputSchema = zod.z.object({
1212
+ chainId: agentEvmChainIdSchema,
1213
+ interval: uniswapV4OhlcvIntervalSchema.optional().describe("Default 1h. Sub-hour uses swaps; \u22651h uses subgraph."),
1214
+ poolPreset: zod.z.string().optional().describe("presetId from ctm_uniswap_v4_list_lp_pools"),
1215
+ poolReference: zod.z.string().optional().describe("bytes32 pool id"),
1216
+ existingPool: uniswapV4ExistingPoolOhlcvSchema.optional(),
1217
+ quoteToken: zod.z.enum(["token0", "token1"]).optional().describe("Default token0 per token1 (subgraph native)"),
1218
+ lookbackDays: agentCoercedOptionalIntSchema(zod.z.number().int().positive().max(365)),
1219
+ lookbackHours: agentCoercedOptionalIntSchema(zod.z.number().int().positive().max(365 * 24)),
1220
+ startTimeMs: agentCoercedOptionalIntSchema(zod.z.number().int().positive()),
1221
+ endTimeMs: agentCoercedOptionalIntSchema(zod.z.number().int().positive())
1222
+ }).strict();
1223
+ var mcpUniswapV4FetchOhlcvOutputSchema = zod.z.object({
1224
+ symbol: zod.z.string(),
1225
+ timeframe: uniswapV4OhlcvIntervalSchema,
1226
+ chainId: agentEvmChainIdSchema,
1227
+ poolReference: zod.z.string(),
1228
+ dataSource: zod.z.enum(["subgraph_native", "subgraph_aggregate", "swaps"]),
1229
+ baseSubgraphEntity: zod.z.enum(["hourly", "daily"]).optional(),
1230
+ priceQuote: zod.z.enum(["token0PerToken1", "token1PerToken0"]),
1231
+ startTimeMs: zod.z.number().int().positive().optional(),
1232
+ endTimeMs: zod.z.number().int().positive().optional(),
1233
+ candleCount: zod.z.number().int().nonnegative(),
1234
+ candles: zod.z.array(uniswapV4OhlcvCandleSchema),
1235
+ fetchedAtMs: zod.z.number(),
1236
+ warnings: zod.z.array(zod.z.string()).optional()
1237
+ }).strict();
1140
1238
  var mcpCurveDaoQuoteInputSchema = zod.z.object({
1141
1239
  chainId: agentEvmChainIdSchema.describe("EVM chain id (rpcUrl resolved from get_chain_registry rpcGateway)"),
1142
1240
  rpcUrl: zod.z.string().min(1).optional().describe("JSON-RPC URL; continuum-mcp-server injects from chain registry \u2014 do not pass a public RPC URL"),
@@ -2830,11 +2928,27 @@ var CORE_MCP_TOOL_DEFINITIONS = [
2830
2928
  chainCategory: "evm",
2831
2929
  description: "List standard Uniswap V4 LP pools for a chain (ETH/USDC and other main pairs at common fee tiers). Returns presetId, token addresses, fee, tickSpacing, and computed poolReference (bytes32 pool id). Use presetId as poolPreset on lp_create_position.",
2832
2930
  prerequisites: ["chainId"],
2833
- followUp: ["ctm_uniswap_v4_lp_create_position"],
2931
+ followUp: ["ctm_uniswap_v4_lp_create_position", "ctm_uniswap_v4_fetch_ohlcv"],
2834
2932
  handler: { importPath: "protocols/evm/uniswap-v4", exportName: "uniswapV4ListStandardLpPools" },
2835
2933
  inputZod: mcpUniswapV4LpListPoolsInputSchema,
2836
2934
  outputZod: mcpUniswapV4LpListPoolsOutputSchema
2837
2935
  }),
2936
+ defineMcpTool({
2937
+ name: "ctm_uniswap_v4_fetch_ohlcv",
2938
+ actionId: "uniswap-v4.fetch-ohlcv",
2939
+ protocolId: "uniswap-v4",
2940
+ chainCategory: "evm",
2941
+ description: "Pool OHLCV from Uniswap V4 subgraph: native 1h/1d, aggregated multiples (4h/1w/etc.), or swap bucketing for sub-hour (15m). Read-only; does not use Trade API key. Optional THE_GRAPH_API_KEY env for gateway rate limits.",
2942
+ prerequisites: [
2943
+ "chainId with pinned v4 subgraph",
2944
+ "poolPreset or poolReference or existingPool",
2945
+ "interval + lookbackDays or lookbackHours or startTimeMs"
2946
+ ],
2947
+ followUp: ["ctm_uniswap_v4_list_lp_pools", "continuum__prepare_chart_from_rows"],
2948
+ handler: { importPath: "protocols/evm/uniswap-v4", exportName: "uniswapV4FetchOhlcv" },
2949
+ inputZod: mcpUniswapV4FetchOhlcvInputSchema,
2950
+ outputZod: mcpUniswapV4FetchOhlcvOutputSchema
2951
+ }),
2838
2952
  defineMcpTool({
2839
2953
  name: "ctm_uniswap_v4_lp_create_position",
2840
2954
  actionId: "uniswap-v4.lp-create",
@@ -3575,41 +3689,6 @@ function isMapleSyrupSupportedChain(chainId) {
3575
3689
  return chainId === 1 || chainId === 11155111;
3576
3690
  }
3577
3691
 
3578
- // src/core/defiProxy.ts
3579
- var aaveGraphqlProxyUrl;
3580
- var morphoGraphqlProxyUrl;
3581
- function getAaveGraphqlProxyUrl() {
3582
- return aaveGraphqlProxyUrl;
3583
- }
3584
- function getMorphoGraphqlProxyUrl() {
3585
- return morphoGraphqlProxyUrl;
3586
- }
3587
- async function postJsonViaOptionalProxy(args) {
3588
- const proxy = args.proxyUrl?.trim();
3589
- if (proxy) {
3590
- const r2 = await fetch(proxy, {
3591
- method: "POST",
3592
- headers: { "content-type": "application/json" },
3593
- body: JSON.stringify(args.proxyEnvelope ?? args.body)
3594
- });
3595
- if (!r2.ok) {
3596
- const t = await r2.text().catch(() => "");
3597
- throw new Error(t ? `Proxy HTTP ${r2.status}: ${t.slice(0, 200)}` : `Proxy HTTP ${r2.status}`);
3598
- }
3599
- return await r2.json();
3600
- }
3601
- const r = await fetch(args.directUrl, {
3602
- method: "POST",
3603
- headers: { "content-type": "application/json" },
3604
- body: JSON.stringify(args.body)
3605
- });
3606
- if (!r.ok) {
3607
- const t = await r.text().catch(() => "");
3608
- throw new Error(t ? `HTTP ${r.status}: ${t.slice(0, 200)}` : `HTTP ${r.status}`);
3609
- }
3610
- return await r.json();
3611
- }
3612
-
3613
3692
  // src/protocols/evm/maple/index.ts
3614
3693
  var MAPLE_PROTOCOL_ID = "maple-syrup";
3615
3694
  var mapleProtocolModule = {
@@ -5042,6 +5121,8 @@ exports.mcpUniswapV4BuildMintLiquidityMultisignInputSchema = mcpUniswapV4BuildMi
5042
5121
  exports.mcpUniswapV4BuildSwapMultisignInputSchema = mcpUniswapV4BuildSwapMultisignInputSchema;
5043
5122
  exports.mcpUniswapV4CreateSwapInputSchema = mcpUniswapV4CreateSwapInputSchema;
5044
5123
  exports.mcpUniswapV4CreateSwapOutputSchema = mcpUniswapV4CreateSwapOutputSchema;
5124
+ exports.mcpUniswapV4FetchOhlcvInputSchema = mcpUniswapV4FetchOhlcvInputSchema;
5125
+ exports.mcpUniswapV4FetchOhlcvOutputSchema = mcpUniswapV4FetchOhlcvOutputSchema;
5045
5126
  exports.mcpUniswapV4LpClaimInputSchema = mcpUniswapV4LpClaimInputSchema;
5046
5127
  exports.mcpUniswapV4LpClaimOutputSchema = mcpUniswapV4LpClaimOutputSchema;
5047
5128
  exports.mcpUniswapV4LpCreatePositionInputSchema = mcpUniswapV4LpCreatePositionInputSchema;