@andrewkimjoseph/celina-sdk 0.4.12 → 0.5.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.
Files changed (80) hide show
  1. package/README.md +4 -0
  2. package/build/tools/catalog.d.ts +9 -0
  3. package/build/tools/catalog.js +36 -0
  4. package/build/tools/catalog.js.map +1 -0
  5. package/build/tools/domains/aave.d.ts +2 -0
  6. package/build/tools/domains/aave.js +89 -0
  7. package/build/tools/domains/aave.js.map +1 -0
  8. package/build/tools/domains/blockchain.d.ts +2 -0
  9. package/build/tools/domains/blockchain.js +85 -0
  10. package/build/tools/domains/blockchain.js.map +1 -0
  11. package/build/tools/domains/carbon.d.ts +2 -0
  12. package/build/tools/domains/carbon.js +187 -0
  13. package/build/tools/domains/carbon.js.map +1 -0
  14. package/build/tools/domains/celeste.d.ts +2 -0
  15. package/build/tools/domains/celeste.js +42 -0
  16. package/build/tools/domains/celeste.js.map +1 -0
  17. package/build/tools/domains/contract.d.ts +2 -0
  18. package/build/tools/domains/contract.js +67 -0
  19. package/build/tools/domains/contract.js.map +1 -0
  20. package/build/tools/domains/ens.d.ts +2 -0
  21. package/build/tools/domains/ens.js +16 -0
  22. package/build/tools/domains/ens.js.map +1 -0
  23. package/build/tools/domains/gooddollar.d.ts +2 -0
  24. package/build/tools/domains/gooddollar.js +73 -0
  25. package/build/tools/domains/gooddollar.js.map +1 -0
  26. package/build/tools/domains/governance.d.ts +2 -0
  27. package/build/tools/domains/governance.js +41 -0
  28. package/build/tools/domains/governance.js.map +1 -0
  29. package/build/tools/domains/index.d.ts +1 -0
  30. package/build/tools/domains/index.js +33 -0
  31. package/build/tools/domains/index.js.map +1 -0
  32. package/build/tools/domains/mento-fx.d.ts +2 -0
  33. package/build/tools/domains/mento-fx.js +72 -0
  34. package/build/tools/domains/mento-fx.js.map +1 -0
  35. package/build/tools/domains/nft.d.ts +2 -0
  36. package/build/tools/domains/nft.js +38 -0
  37. package/build/tools/domains/nft.js.map +1 -0
  38. package/build/tools/domains/self.d.ts +2 -0
  39. package/build/tools/domains/self.js +194 -0
  40. package/build/tools/domains/self.js.map +1 -0
  41. package/build/tools/domains/staking.d.ts +2 -0
  42. package/build/tools/domains/staking.js +74 -0
  43. package/build/tools/domains/staking.js.map +1 -0
  44. package/build/tools/domains/token.d.ts +2 -0
  45. package/build/tools/domains/token.js +73 -0
  46. package/build/tools/domains/token.js.map +1 -0
  47. package/build/tools/domains/transaction.d.ts +2 -0
  48. package/build/tools/domains/transaction.js +117 -0
  49. package/build/tools/domains/transaction.js.map +1 -0
  50. package/build/tools/domains/uniswap.d.ts +2 -0
  51. package/build/tools/domains/uniswap.js +72 -0
  52. package/build/tools/domains/uniswap.js.map +1 -0
  53. package/build/tools/filter.d.ts +2 -0
  54. package/build/tools/filter.js +28 -0
  55. package/build/tools/filter.js.map +1 -0
  56. package/build/tools/index.d.ts +7 -0
  57. package/build/tools/index.js +7 -0
  58. package/build/tools/index.js.map +1 -0
  59. package/build/tools/schemas/common.d.ts +110 -0
  60. package/build/tools/schemas/common.js +81 -0
  61. package/build/tools/schemas/common.js.map +1 -0
  62. package/build/tools/swap-routing.d.ts +24 -0
  63. package/build/tools/swap-routing.js +105 -0
  64. package/build/tools/swap-routing.js.map +1 -0
  65. package/build/tools/types.d.ts +134 -0
  66. package/build/tools/types.js +2 -0
  67. package/build/tools/types.js.map +1 -0
  68. package/build/tools/utils/carbon-prepare-handler.d.ts +6 -0
  69. package/build/tools/utils/carbon-prepare-handler.js +17 -0
  70. package/build/tools/utils/carbon-prepare-handler.js.map +1 -0
  71. package/build/tools/utils/normalize-token.d.ts +2 -0
  72. package/build/tools/utils/normalize-token.js +12 -0
  73. package/build/tools/utils/normalize-token.js.map +1 -0
  74. package/build/tools/utils/wallet.d.ts +2 -0
  75. package/build/tools/utils/wallet.js +4 -0
  76. package/build/tools/utils/wallet.js.map +1 -0
  77. package/package.json +7 -1
  78. package/tests/README.md +4 -0
  79. package/tests/catalog/operations.ts +11 -1
  80. package/tests/testing-entry.ts +5 -0
package/README.md CHANGED
@@ -1,3 +1,7 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/andrewkimjoseph/celina-sdk/main/assets/celina-banner.png" alt="Celina — Give your LLM a wallet on Celo">
3
+ </p>
4
+
1
5
  # Celina SDK
2
6
 
3
7
  Celo mainnet library for frontend apps and agents: **reads** and **unsigned transaction preparation** (no private keys).
@@ -0,0 +1,9 @@
1
+ import type { FilterToolsOptions, ToolDefinition, ToolFamily } from "./types.js";
2
+ export declare const ALL_TOOL_DEFINITIONS: ToolDefinition[];
3
+ export declare function getToolNames(options?: FilterToolsOptions): string[];
4
+ export declare function getMcpToolNames(options?: Omit<FilterToolsOptions, "surface">): string[];
5
+ export declare function getCelesteToolNames(options?: Omit<FilterToolsOptions, "surface">): string[];
6
+ export declare function getToolsByFamily(family: ToolFamily): ToolDefinition[];
7
+ export declare function getToolDefinition(name: string): ToolDefinition | undefined;
8
+ export declare function assertSnakeCaseInputKeys(definition: ToolDefinition): void;
9
+ export declare function validateToolCatalogSnakeCase(): void;
@@ -0,0 +1,36 @@
1
+ import { allDomainToolDefinitions } from "./domains/index.js";
2
+ import { filterToolDefinitions } from "./filter.js";
3
+ export const ALL_TOOL_DEFINITIONS = allDomainToolDefinitions;
4
+ export function getToolNames(options = {}) {
5
+ return filterToolDefinitions(ALL_TOOL_DEFINITIONS, options).map((d) => d.name);
6
+ }
7
+ export function getMcpToolNames(options = {}) {
8
+ return getToolNames({ ...options, surface: "mcp" });
9
+ }
10
+ export function getCelesteToolNames(options = {}) {
11
+ return getToolNames({ ...options, surface: "celeste" });
12
+ }
13
+ export function getToolsByFamily(family) {
14
+ return filterToolDefinitions(ALL_TOOL_DEFINITIONS, { families: [family] });
15
+ }
16
+ export function getToolDefinition(name) {
17
+ return ALL_TOOL_DEFINITIONS.find((d) => d.name === name);
18
+ }
19
+ export function assertSnakeCaseInputKeys(definition) {
20
+ const shape = definition.inputSchema;
21
+ if (!shape || typeof shape !== "object" || !("shape" in shape)) {
22
+ return;
23
+ }
24
+ const keys = Object.keys(shape.shape);
25
+ for (const key of keys) {
26
+ if (key !== key.toLowerCase() || key.includes("-")) {
27
+ throw new Error(`Tool "${definition.name}" input key "${key}" must be snake_case.`);
28
+ }
29
+ }
30
+ }
31
+ export function validateToolCatalogSnakeCase() {
32
+ for (const def of ALL_TOOL_DEFINITIONS) {
33
+ assertSnakeCaseInputKeys(def);
34
+ }
35
+ }
36
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/tools/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,CAAC,MAAM,oBAAoB,GAAqB,wBAAwB,CAAC;AAE/E,MAAM,UAAU,YAAY,CAAC,UAA8B,EAAE;IAC3D,OAAO,qBAAqB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,UAA+C,EAAE;IAEjD,OAAO,YAAY,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAA+C,EAAE;IAEjD,OAAO,YAAY,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAkB;IACjD,OAAO,qBAAqB,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,UAA0B;IACjE,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC;IACrC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC;QAC/D,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAE,KAA4C,CAAC,KAAK,CAAC,CAAC;IAC9E,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CACb,SAAS,UAAU,CAAC,IAAI,gBAAgB,GAAG,uBAAuB,CACnE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACvC,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ToolDefinition } from "../types.js";
2
+ export declare const aaveToolDefinitions: ToolDefinition[];
@@ -0,0 +1,89 @@
1
+ import { z } from "zod";
2
+ import { AAVE_SUPPORTED_SYMBOLS, resolveAaveAsset, } from "../../config/aave.js";
3
+ import { optionalWalletAddressSchema, tokenSymbolSchema } from "../schemas/common.js";
4
+ import { resolveWalletFromRuntime } from "../utils/wallet.js";
5
+ const supported = AAVE_SUPPORTED_SYMBOLS.join(", ");
6
+ const aaveTokenField = tokenSymbolSchema.describe(`Aave asset symbol on Celo (${supported}). Pass the symbol only.`);
7
+ export const aaveToolDefinitions = [
8
+ {
9
+ name: "supply_aave",
10
+ description: `Supply tokens to Aave V3 on Celo. Supported: ${supported}. Requires CELO_PRIVATE_KEY.`,
11
+ inputSchema: z.object({
12
+ token: aaveTokenField,
13
+ amount: z.string(),
14
+ }),
15
+ families: ["execute"],
16
+ surfaces: ["mcp"],
17
+ mcp: {
18
+ title: "Supply Aave",
19
+ annotations: { destructiveHint: true, openWorldHint: true },
20
+ },
21
+ handler: async (runtime, input) => {
22
+ const aave = runtime.executors?.aave;
23
+ if (!aave)
24
+ throw new Error("Aave executor not configured.");
25
+ const asset = resolveAaveAsset(input.token);
26
+ return aave.supply(asset.symbol, input.amount);
27
+ },
28
+ },
29
+ {
30
+ name: "withdraw_aave",
31
+ description: `Withdraw tokens from Aave V3 on Celo. Supported: ${supported}. Requires CELO_PRIVATE_KEY.`,
32
+ inputSchema: z.object({
33
+ token: aaveTokenField,
34
+ amount: z.string().optional(),
35
+ withdraw_max: z.boolean().optional(),
36
+ }),
37
+ families: ["execute"],
38
+ surfaces: ["mcp"],
39
+ mcp: {
40
+ title: "Withdraw Aave",
41
+ annotations: { destructiveHint: true, openWorldHint: true },
42
+ },
43
+ handler: async (runtime, input) => {
44
+ const aave = runtime.executors?.aave;
45
+ if (!aave)
46
+ throw new Error("Aave executor not configured.");
47
+ const asset = resolveAaveAsset(input.token);
48
+ return aave.withdraw(asset.symbol, input.amount, input.withdraw_max);
49
+ },
50
+ },
51
+ {
52
+ name: "prepare_aave_supply",
53
+ description: "Prepare unsigned Aave V3 supply steps. User signs in wallet.",
54
+ inputSchema: z.object({
55
+ token: z.string(),
56
+ amount: z.string(),
57
+ from: optionalWalletAddressSchema,
58
+ }),
59
+ families: ["prepare"],
60
+ surfaces: ["celeste"],
61
+ handler: async (runtime, input) => {
62
+ const sender = resolveWalletFromRuntime(runtime, {
63
+ from: input.from,
64
+ });
65
+ const asset = resolveAaveAsset(input.token);
66
+ return runtime.celina.aave.prepareSupply(sender, asset.symbol, input.amount);
67
+ },
68
+ },
69
+ {
70
+ name: "prepare_aave_withdraw",
71
+ description: "Prepare unsigned Aave V3 withdraw. User signs in wallet.",
72
+ inputSchema: z.object({
73
+ token: z.string(),
74
+ amount: z.string().optional(),
75
+ withdraw_max: z.boolean().optional(),
76
+ from: optionalWalletAddressSchema,
77
+ }),
78
+ families: ["prepare"],
79
+ surfaces: ["celeste"],
80
+ handler: async (runtime, input) => {
81
+ const sender = resolveWalletFromRuntime(runtime, {
82
+ from: input.from,
83
+ });
84
+ const asset = resolveAaveAsset(input.token);
85
+ return runtime.celina.aave.prepareWithdraw(sender, asset.symbol, input.amount, input.withdraw_max);
86
+ },
87
+ },
88
+ ];
89
+ //# sourceMappingURL=aave.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aave.js","sourceRoot":"","sources":["../../../src/tools/domains/aave.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ToolDefinition } from "../types.js";
2
+ export declare const blockchainToolDefinitions: ToolDefinition[];
@@ -0,0 +1,85 @@
1
+ import { z } from "zod";
2
+ import { blockIdSchema, optionalWalletAddressSchema, } from "../schemas/common.js";
3
+ import { resolveWalletFromRuntime } from "../utils/wallet.js";
4
+ const readOnly = {
5
+ readOnlyHint: true,
6
+ idempotentHint: true,
7
+ };
8
+ export const blockchainToolDefinitions = [
9
+ {
10
+ name: "get_network_status",
11
+ description: "Returns Celo mainnet chain ID, latest block, and gas price.",
12
+ inputSchema: z.object({}),
13
+ families: ["read"],
14
+ mcp: { title: "Get Network Status", annotations: readOnly },
15
+ handler: async (runtime) => runtime.celina.blockchain.getNetworkStatus(),
16
+ },
17
+ {
18
+ name: "get_block",
19
+ description: "Fetch a Celo mainnet block by number, hash, or latest.",
20
+ inputSchema: z.object({
21
+ block_id: blockIdSchema,
22
+ include_transactions: z.boolean().optional(),
23
+ }),
24
+ families: ["read"],
25
+ mcp: { title: "Get Block", annotations: readOnly },
26
+ handler: async (runtime, input) => runtime.celina.blockchain.getBlock(input.block_id, {
27
+ includeTransactions: input.include_transactions,
28
+ }),
29
+ },
30
+ {
31
+ name: "get_latest_blocks",
32
+ description: "Fetch the most recent blocks on Celo mainnet.",
33
+ inputSchema: z.object({
34
+ count: z.number().int().min(1).max(100).optional(),
35
+ offset: z.number().int().min(0).optional(),
36
+ }),
37
+ families: ["read"],
38
+ mcp: { title: "Get Latest Blocks", annotations: readOnly },
39
+ handler: async (runtime, input) => runtime.celina.blockchain.getLatestBlocks(input.count ?? 5, input.offset ?? 0),
40
+ },
41
+ {
42
+ name: "get_transaction",
43
+ description: "Fetch a transaction and receipt by hash on Celo mainnet.",
44
+ inputSchema: z.object({
45
+ hash: z.string().regex(/^0x[a-fA-F0-9]{64}$/),
46
+ }),
47
+ families: ["read"],
48
+ mcp: { title: "Get Transaction", annotations: readOnly },
49
+ handler: async (runtime, input) => runtime.celina.blockchain.getTransaction(input.hash),
50
+ },
51
+ {
52
+ name: "get_wallet_address",
53
+ description: "Returns the wallet address derived from CELO_PRIVATE_KEY in the MCP server env.",
54
+ inputSchema: z.object({}),
55
+ families: ["read"],
56
+ surfaces: ["mcp"],
57
+ mcp: { title: "Get Wallet Address", annotations: readOnly },
58
+ handler: async (runtime) => {
59
+ if (!runtime.mcpWallet?.hasWallet) {
60
+ throw new Error("No wallet configured. Set CELO_PRIVATE_KEY in the server env.");
61
+ }
62
+ return {
63
+ wallet_address: runtime.mcpWallet.address,
64
+ has_wallet: true,
65
+ source: "CELO_PRIVATE_KEY",
66
+ };
67
+ },
68
+ },
69
+ {
70
+ name: "get_account",
71
+ description: "Returns native CELO balance, nonce, and whether the address is a contract.",
72
+ inputSchema: z.object({
73
+ address: optionalWalletAddressSchema,
74
+ }),
75
+ families: ["read"],
76
+ mcp: { title: "Get Account", annotations: readOnly },
77
+ handler: async (runtime, input) => {
78
+ const target = resolveWalletFromRuntime(runtime, {
79
+ address: input.address,
80
+ });
81
+ return runtime.celina.account.getAccount(target);
82
+ },
83
+ },
84
+ ];
85
+ //# sourceMappingURL=blockchain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockchain.js","sourceRoot":"","sources":["../../../src/tools/domains/blockchain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ToolDefinition } from "../types.js";
2
+ export declare const carbonToolDefinitions: ToolDefinition[];
@@ -0,0 +1,187 @@
1
+ import { z } from "zod";
2
+ import { carbonWriteSchema, optionalWalletAddressSchema, } from "../schemas/common.js";
3
+ import { runCarbonPrepare } from "../utils/carbon-prepare-handler.js";
4
+ import { resolveWalletFromRuntime } from "../utils/wallet.js";
5
+ const readOnly = { readOnlyHint: true };
6
+ const tokenPairSchema = z.object({
7
+ base_token: z.string(),
8
+ quote_token: z.string(),
9
+ });
10
+ const CARBON_PREPARE_SUFFIX = " Returns unsigned steps (approvals + Carbon tx) and warnings. Prices are quote per base; buy budget in quote, sell budget in base.";
11
+ function carbonPrepare(name, title, description, prepareFn, options) {
12
+ return {
13
+ name,
14
+ description: description + CARBON_PREPARE_SUFFIX,
15
+ inputSchema: carbonWriteSchema,
16
+ families: ["prepare"],
17
+ mcp: { title, annotations: { openWorldHint: true } },
18
+ handler: (runtime, input) => runCarbonPrepare(runtime, name, (body) => prepareFn(runtime, body), input, options),
19
+ };
20
+ }
21
+ function carbonExecute(name, title, description, executeKey) {
22
+ return {
23
+ name,
24
+ description: description +
25
+ " Requires CELO_PRIVATE_KEY in MCP server env. Signs and broadcasts locally.",
26
+ inputSchema: z.object({}).passthrough(),
27
+ families: ["execute"],
28
+ surfaces: ["mcp"],
29
+ mcp: {
30
+ title,
31
+ annotations: { destructiveHint: true, openWorldHint: true },
32
+ },
33
+ handler: async (runtime, input) => {
34
+ const write = runtime.executors?.carbonWrite;
35
+ if (!write)
36
+ throw new Error("Carbon write executor not configured.");
37
+ const fn = write[executeKey];
38
+ return fn(input);
39
+ },
40
+ };
41
+ }
42
+ export const carbonToolDefinitions = [
43
+ {
44
+ name: "get_carbon_strategies",
45
+ description: "Fetch active Carbon DeFi maker strategies for a wallet on Celo.",
46
+ inputSchema: z.object({
47
+ wallet_address: optionalWalletAddressSchema,
48
+ }),
49
+ families: ["read"],
50
+ mcp: { title: "Get Carbon Strategies", annotations: readOnly },
51
+ handler: async (runtime, input) => {
52
+ const wallet = resolveWalletFromRuntime(runtime, {
53
+ wallet_address: input.wallet_address,
54
+ });
55
+ return runtime.celina.carbon.getStrategies(wallet);
56
+ },
57
+ },
58
+ {
59
+ name: "get_carbon_strategy",
60
+ description: "Look up a Carbon strategy by ID on Celo.",
61
+ inputSchema: z.object({
62
+ strategy_id: z.string(),
63
+ }),
64
+ families: ["read"],
65
+ mcp: { title: "Get Carbon Strategy", annotations: readOnly },
66
+ handler: async (runtime, input) => runtime.celina.carbon.getStrategy(input.strategy_id),
67
+ },
68
+ {
69
+ name: "get_carbon_trade_quote",
70
+ description: "Quote a taker swap against Carbon maker liquidity on Celo.",
71
+ inputSchema: z
72
+ .object({
73
+ source_token: z.string(),
74
+ target_token: z.string(),
75
+ amount: z.string(),
76
+ is_trade_by_target: z.boolean().optional(),
77
+ })
78
+ .passthrough(),
79
+ families: ["read"],
80
+ mcp: { title: "Get Carbon Trade Quote", annotations: readOnly },
81
+ handler: async (runtime, input) => runtime.celina.carbon.getTradeQuote(input),
82
+ },
83
+ {
84
+ name: "explore_carbon_pair",
85
+ description: "Market liquidity and top strategies for a token pair on Carbon.",
86
+ inputSchema: tokenPairSchema,
87
+ families: ["read"],
88
+ mcp: { title: "Explore Carbon Pair", annotations: readOnly },
89
+ handler: async (runtime, input) => runtime.celina.carbon.explorePair(input),
90
+ },
91
+ {
92
+ name: "resolve_carbon_token",
93
+ description: "Resolve a token symbol or name to its Celo contract address.",
94
+ inputSchema: z.object({ token: z.string() }),
95
+ families: ["read"],
96
+ mcp: { title: "Resolve Carbon Token", annotations: readOnly },
97
+ handler: async (runtime, input) => runtime.celina.carbon.resolveToken(input.token),
98
+ },
99
+ {
100
+ name: "get_carbon_activity",
101
+ description: "Trade and event history for a wallet or strategy on Carbon.",
102
+ inputSchema: z.object({}).passthrough(),
103
+ families: ["read"],
104
+ mcp: { title: "Get Carbon Activity", annotations: readOnly },
105
+ handler: async (runtime, input) => {
106
+ const wallet_address = resolveWalletFromRuntime(runtime, {
107
+ wallet_address: input.wallet_address,
108
+ });
109
+ return runtime.celina.carbon.getActivity({ ...input, wallet_address });
110
+ },
111
+ },
112
+ {
113
+ name: "find_carbon_opportunities",
114
+ description: "Find discount buys and premium sells vs market on a Carbon pair.",
115
+ inputSchema: tokenPairSchema.passthrough(),
116
+ families: ["read"],
117
+ mcp: { title: "Find Carbon Opportunities", annotations: readOnly },
118
+ handler: async (runtime, input) => runtime.celina.carbon.findOpportunities(input),
119
+ },
120
+ {
121
+ name: "get_carbon_protocol_stats",
122
+ description: "Carbon protocol-wide TVL, volume, and fees on Celo.",
123
+ inputSchema: z.object({}).passthrough(),
124
+ families: ["read"],
125
+ mcp: { title: "Get Carbon Protocol Stats", annotations: readOnly },
126
+ handler: async (runtime, input) => runtime.celina.carbon.getProtocolStats(input),
127
+ },
128
+ {
129
+ name: "get_carbon_price_history",
130
+ description: "Historical OHLC candles for a Carbon pair on Celo.",
131
+ inputSchema: z.object({}).passthrough(),
132
+ families: ["read"],
133
+ mcp: { title: "Get Carbon Price History", annotations: readOnly },
134
+ handler: async (runtime, input) => runtime.celina.carbon.getPriceHistory(input),
135
+ },
136
+ {
137
+ name: "simulate_carbon_strategy",
138
+ description: "Backtest a Carbon strategy against historical prices.",
139
+ inputSchema: z.object({}).passthrough(),
140
+ families: ["read"],
141
+ mcp: { title: "Simulate Carbon Strategy", annotations: readOnly },
142
+ handler: async (runtime, input) => runtime.celina.carbon.simulateStrategy(input),
143
+ },
144
+ {
145
+ name: "carbon_help",
146
+ description: "Per-tool guidance for Carbon DeFi operations on Celo.",
147
+ inputSchema: z.object({ topic: z.string().optional() }),
148
+ families: ["read"],
149
+ mcp: { title: "Carbon Help", annotations: readOnly },
150
+ handler: async (runtime, input) => runtime.celina.carbon.help(input.topic),
151
+ },
152
+ {
153
+ name: "carbon_learn",
154
+ description: "Carbon DeFi protocol education topics on Celo.",
155
+ inputSchema: z.object({ topic: z.string().optional() }),
156
+ families: ["read"],
157
+ mcp: { title: "Carbon Learn", annotations: readOnly },
158
+ handler: async (runtime, input) => runtime.celina.carbon.learn(input.topic),
159
+ },
160
+ carbonPrepare("prepare_carbon_limit_order", "Prepare Carbon Limit Order", "Create a one-time Carbon limit order on Celo.", (runtime, body) => runtime.celina.carbon.prepareLimitOrder(body), { marketPriceFallback: true }),
161
+ carbonPrepare("prepare_carbon_range_order", "Prepare Carbon Range Order", "Create a Carbon range order on Celo.", (runtime, body) => runtime.celina.carbon.prepareRangeOrder(body), { marketPriceFallback: true }),
162
+ carbonPrepare("prepare_carbon_recurring_strategy", "Prepare Carbon Recurring Strategy", "Create a recurring buy/sell Carbon strategy on Celo.", (runtime, body) => runtime.celina.carbon.prepareRecurringStrategy(body), { marketPriceFallback: true }),
163
+ carbonPrepare("prepare_carbon_concentrated_strategy", "Prepare Carbon Concentrated Strategy", "Create concentrated two-sided Carbon liquidity on Celo.", (runtime, body) => runtime.celina.carbon.prepareConcentratedStrategy(body), { concentrated: true, marketPriceFallback: true }),
164
+ carbonPrepare("prepare_carbon_full_range_strategy", "Prepare Carbon Full Range Strategy", "Create full-range Carbon liquidity on Celo.", (runtime, body) => runtime.celina.carbon.prepareFullRangeStrategy(body), { marketPriceFallback: true }),
165
+ carbonPrepare("prepare_carbon_reprice_strategy", "Prepare Carbon Reprice", "Update price ranges of an existing Carbon strategy on Celo.", (runtime, body) => runtime.celina.carbon.prepareRepriceStrategy(body)),
166
+ carbonPrepare("prepare_carbon_edit_strategy", "Prepare Carbon Edit Strategy", "Edit prices and budgets of a Carbon strategy on Celo.", (runtime, body) => runtime.celina.carbon.prepareEditStrategy(body)),
167
+ carbonPrepare("prepare_carbon_deposit_budget", "Prepare Carbon Deposit", "Add funds to a Carbon strategy on Celo.", (runtime, body) => runtime.celina.carbon.prepareDepositBudget(body)),
168
+ carbonPrepare("prepare_carbon_withdraw_budget", "Prepare Carbon Withdraw", "Withdraw funds from a Carbon strategy on Celo.", (runtime, body) => runtime.celina.carbon.prepareWithdrawBudget(body)),
169
+ carbonPrepare("prepare_carbon_pause_strategy", "Prepare Carbon Pause", "Pause a Carbon strategy on Celo.", (runtime, body) => runtime.celina.carbon.preparePauseStrategy(body)),
170
+ carbonPrepare("prepare_carbon_resume_strategy", "Prepare Carbon Resume", "Resume a paused Carbon strategy on Celo.", (runtime, body) => runtime.celina.carbon.prepareResumeStrategy(body)),
171
+ carbonPrepare("prepare_carbon_delete_strategy", "Prepare Carbon Delete", "Permanently close a Carbon strategy on Celo.", (runtime, body) => runtime.celina.carbon.prepareDeleteStrategy(body)),
172
+ carbonPrepare("prepare_carbon_trade", "Prepare Carbon Trade", "Build an unsigned taker swap against Carbon liquidity on Celo.", (runtime, body) => runtime.celina.carbon.prepareTrade(body)),
173
+ carbonExecute("execute_carbon_limit_order", "Execute Carbon Limit Order", "Create and broadcast a Carbon limit order on Celo.", "executeLimitOrder"),
174
+ carbonExecute("execute_carbon_range_order", "Execute Carbon Range Order", "Create and broadcast a Carbon range order on Celo.", "executeRangeOrder"),
175
+ carbonExecute("execute_carbon_recurring_strategy", "Execute Carbon Recurring Strategy", "Create and broadcast a recurring Carbon strategy on Celo.", "executeRecurringStrategy"),
176
+ carbonExecute("execute_carbon_concentrated_strategy", "Execute Carbon Concentrated Strategy", "Create and broadcast concentrated Carbon liquidity on Celo.", "executeConcentratedStrategy"),
177
+ carbonExecute("execute_carbon_full_range_strategy", "Execute Carbon Full Range Strategy", "Create and broadcast full-range Carbon liquidity on Celo.", "executeFullRangeStrategy"),
178
+ carbonExecute("execute_carbon_reprice_strategy", "Execute Carbon Reprice", "Update price ranges of a Carbon strategy on Celo.", "executeRepriceStrategy"),
179
+ carbonExecute("execute_carbon_edit_strategy", "Execute Carbon Edit Strategy", "Edit a Carbon strategy on Celo.", "executeEditStrategy"),
180
+ carbonExecute("execute_carbon_deposit_budget", "Execute Carbon Deposit", "Add funds to a Carbon strategy on Celo.", "executeDepositBudget"),
181
+ carbonExecute("execute_carbon_withdraw_budget", "Execute Carbon Withdraw", "Withdraw funds from a Carbon strategy on Celo.", "executeWithdrawBudget"),
182
+ carbonExecute("execute_carbon_pause_strategy", "Execute Carbon Pause", "Pause a Carbon strategy on Celo.", "executePauseStrategy"),
183
+ carbonExecute("execute_carbon_resume_strategy", "Execute Carbon Resume", "Resume a paused Carbon strategy on Celo.", "executeResumeStrategy"),
184
+ carbonExecute("execute_carbon_delete_strategy", "Execute Carbon Delete", "Permanently close a Carbon strategy on Celo.", "executeDeleteStrategy"),
185
+ carbonExecute("execute_carbon_trade", "Execute Carbon Trade", "Execute a taker swap against Carbon liquidity on Celo.", "executeTrade"),
186
+ ];
187
+ //# sourceMappingURL=carbon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carbon.js","sourceRoot":"","sources":["../../../src/tools/domains/carbon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ToolDefinition } from "../types.js";
2
+ export declare const celesteToolDefinitions: ToolDefinition[];
@@ -0,0 +1,42 @@
1
+ import { z } from "zod";
2
+ import { getSwapQuoteWithFallback, prepareSwapWithFallback, } from "../swap-routing.js";
3
+ import { uniswapWalletSchema } from "../schemas/common.js";
4
+ import { normalizeRegistryTokenInput } from "../utils/normalize-token.js";
5
+ import { resolveWalletFromRuntime } from "../utils/wallet.js";
6
+ export const celesteToolDefinitions = [
7
+ {
8
+ name: "get_swap_quote",
9
+ description: "Best swap quote on Celo — tries Mento FX and Uniswap v4 in parallel.",
10
+ inputSchema: z.object({
11
+ token_in: z.string(),
12
+ token_out: z.string(),
13
+ amount: z.string(),
14
+ }),
15
+ families: ["read"],
16
+ surfaces: ["celeste"],
17
+ handler: async (runtime, input) => {
18
+ const from = resolveWalletFromRuntime(runtime, {});
19
+ return getSwapQuoteWithFallback(runtime.celina, normalizeRegistryTokenInput(input.token_in), normalizeRegistryTokenInput(input.token_out), input.amount, from);
20
+ },
21
+ },
22
+ {
23
+ name: "prepare_swap",
24
+ description: "Prepare unsigned swap using the best route (Mento FX or Uniswap v4).",
25
+ inputSchema: uniswapWalletSchema.extend({
26
+ protocol: z.enum(["mento_fx", "uniswap_v4"]).optional(),
27
+ }),
28
+ families: ["prepare"],
29
+ surfaces: ["celeste"],
30
+ handler: async (runtime, input) => {
31
+ const sender = resolveWalletFromRuntime(runtime, {
32
+ from: input.from,
33
+ });
34
+ return prepareSwapWithFallback(runtime.celina, sender, normalizeRegistryTokenInput(input.token_in), normalizeRegistryTokenInput(input.token_out), input.amount, {
35
+ recipient: input.recipient,
36
+ slippageTolerance: input.slippage_tolerance,
37
+ deadlineMinutes: input.deadline_minutes,
38
+ }, input.protocol);
39
+ },
40
+ },
41
+ ];
42
+ //# sourceMappingURL=celeste.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"celeste.js","sourceRoot":"","sources":["../../../src/tools/domains/celeste.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,wBAAwB,EACxB,uBAAuB,GAExB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,CAAC,MAAM,sBAAsB,GAAqB;IACtD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EACT,sEAAsE;QACxE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;SACnB,CAAC;QACF,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,IAAI,GAAG,wBAAwB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACnD,OAAO,wBAAwB,CAC7B,OAAO,CAAC,MAAM,EACd,2BAA2B,CAAC,KAAK,CAAC,QAAkB,CAAC,EACrD,2BAA2B,CAAC,KAAK,CAAC,SAAmB,CAAC,EACtD,KAAK,CAAC,MAAgB,EACtB,IAAI,CACL,CAAC;QACJ,CAAC;KACF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,sEAAsE;QACxE,WAAW,EAAE,mBAAmB,CAAC,MAAM,CAAC;YACtC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE;SACxD,CAAC;QACF,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;YAChC,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE;gBAC/C,IAAI,EAAE,KAAK,CAAC,IAA0B;aACvC,CAAC,CAAC;YACH,OAAO,uBAAuB,CAC5B,OAAO,CAAC,MAAM,EACd,MAAM,EACN,2BAA2B,CAAC,KAAK,CAAC,QAAkB,CAAC,EACrD,2BAA2B,CAAC,KAAK,CAAC,SAAmB,CAAC,EACtD,KAAK,CAAC,MAAgB,EACtB;gBACE,SAAS,EAAE,KAAK,CAAC,SAAsC;gBACvD,iBAAiB,EAAE,KAAK,CAAC,kBAAwC;gBACjE,eAAe,EAAE,KAAK,CAAC,gBAAsC;aAC9D,EACD,KAAK,CAAC,QAAoC,CAC3C,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ToolDefinition } from "../types.js";
2
+ export declare const contractToolDefinitions: ToolDefinition[];
@@ -0,0 +1,67 @@
1
+ import { z } from "zod";
2
+ import { abiSchema, addressSchema, optionalWalletAddressSchema, } from "../schemas/common.js";
3
+ import { resolveWalletFromRuntime } from "../utils/wallet.js";
4
+ export const contractToolDefinitions = [
5
+ {
6
+ name: "call_contract_function",
7
+ description: "Calls a read-only contract function. Requires caller-supplied ABI JSON.",
8
+ inputSchema: z.object({
9
+ contract_address: addressSchema,
10
+ function_name: z.string().min(1),
11
+ abi: abiSchema,
12
+ function_args: z.array(z.unknown()).optional(),
13
+ from_address: optionalWalletAddressSchema,
14
+ }),
15
+ families: ["read"],
16
+ mcp: {
17
+ title: "Call Contract Function",
18
+ annotations: { readOnlyHint: true, idempotentHint: true },
19
+ },
20
+ handler: async (runtime, input) => {
21
+ const from = input.from_address
22
+ ? resolveWalletFromRuntime(runtime, {
23
+ address: input.from_address,
24
+ })
25
+ : undefined;
26
+ return runtime.celina.contract.callFunction({
27
+ contractAddress: input.contract_address,
28
+ functionName: input.function_name,
29
+ abi: input.abi,
30
+ functionArgs: input.function_args,
31
+ fromAddress: from,
32
+ });
33
+ },
34
+ },
35
+ {
36
+ name: "estimate_contract_gas",
37
+ description: "Estimates gas for a contract function call. Requires caller-supplied ABI JSON.",
38
+ inputSchema: z.object({
39
+ contract_address: addressSchema,
40
+ function_name: z.string().min(1),
41
+ abi: abiSchema,
42
+ function_args: z.array(z.unknown()).optional(),
43
+ value: z.string().optional(),
44
+ from: optionalWalletAddressSchema,
45
+ from_address: optionalWalletAddressSchema,
46
+ }),
47
+ families: ["read"],
48
+ mcp: { title: "Estimate Contract Gas", annotations: { readOnlyHint: true } },
49
+ handler: async (runtime, input) => {
50
+ const fromField = input.from ??
51
+ input.from_address;
52
+ const from = resolveWalletFromRuntime(runtime, {
53
+ from: fromField,
54
+ address: fromField,
55
+ });
56
+ return runtime.celina.contract.estimateGas({
57
+ contractAddress: input.contract_address,
58
+ functionName: input.function_name,
59
+ abi: input.abi,
60
+ functionArgs: input.function_args,
61
+ fromAddress: from,
62
+ value: input.value,
63
+ });
64
+ },
65
+ },
66
+ ];
67
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../../../src/tools/domains/contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ToolDefinition } from "../types.js";
2
+ export declare const ensToolDefinitions: ToolDefinition[];
@@ -0,0 +1,16 @@
1
+ import { z } from "zod";
2
+ import { ensNameSchema } from "../schemas/common.js";
3
+ export const ensToolDefinitions = [
4
+ {
5
+ name: "resolve_ens",
6
+ description: "Resolve a Celo or Ethereum ENS name to an address. Defaults to Celo coin record with Ethereum fallback.",
7
+ inputSchema: z.object({
8
+ name: ensNameSchema,
9
+ chain: z.enum(["celo", "ethereum"]).optional(),
10
+ }),
11
+ families: ["read"],
12
+ mcp: { title: "Resolve ENS", annotations: { readOnlyHint: true, idempotentHint: true } },
13
+ handler: async (runtime, input) => runtime.celina.ens.resolveEns(input.name, input.chain ?? "celo"),
14
+ },
15
+ ];
16
+ //# sourceMappingURL=ens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ens.js","sourceRoot":"","sources":["../../../src/tools/domains/ens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,MAAM,CAAC,MAAM,kBAAkB,GAAqB;IAClD;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,yGAAyG;QAC3G,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;SAC/C,CAAC;QACF,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,GAAG,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE;QACxF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAChC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAC3B,KAAK,CAAC,IAAc,EACnB,KAAK,CAAC,KAAyC,IAAI,MAAM,CAC3D;KACJ;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { ToolDefinition } from "../types.js";
2
+ export declare const gooddollarToolDefinitions: ToolDefinition[];