intentkit 0.5.0__py3-none-any.whl → 0.5.2__py3-none-any.whl
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.
Potentially problematic release.
This version of intentkit might be problematic. Click here for more details.
- intentkit/__init__.py +17 -0
- intentkit/abstracts/__init__.py +0 -0
- intentkit/abstracts/agent.py +60 -0
- intentkit/abstracts/api.py +4 -0
- intentkit/abstracts/engine.py +38 -0
- intentkit/abstracts/exception.py +9 -0
- intentkit/abstracts/graph.py +25 -0
- intentkit/abstracts/skill.py +129 -0
- intentkit/abstracts/twitter.py +54 -0
- intentkit/clients/__init__.py +14 -0
- intentkit/clients/cdp.py +53 -0
- intentkit/clients/twitter.py +445 -0
- intentkit/config/__init__.py +0 -0
- intentkit/config/config.py +164 -0
- intentkit/core/__init__.py +0 -0
- intentkit/core/agent.py +191 -0
- intentkit/core/api.py +40 -0
- intentkit/core/client.py +45 -0
- intentkit/core/credit.py +1767 -0
- intentkit/core/engine.py +1018 -0
- intentkit/core/node.py +223 -0
- intentkit/core/prompt.py +58 -0
- intentkit/core/skill.py +124 -0
- intentkit/models/agent.py +1689 -0
- intentkit/models/agent_data.py +810 -0
- intentkit/models/agent_schema.json +733 -0
- intentkit/models/app_setting.py +156 -0
- intentkit/models/base.py +9 -0
- intentkit/models/chat.py +581 -0
- intentkit/models/conversation.py +286 -0
- intentkit/models/credit.py +1406 -0
- intentkit/models/db.py +120 -0
- intentkit/models/db_mig.py +102 -0
- intentkit/models/generator.py +347 -0
- intentkit/models/llm.py +746 -0
- intentkit/models/redis.py +132 -0
- intentkit/models/skill.py +466 -0
- intentkit/models/user.py +243 -0
- intentkit/skills/__init__.py +12 -0
- intentkit/skills/acolyt/__init__.py +83 -0
- intentkit/skills/acolyt/acolyt.jpg +0 -0
- intentkit/skills/acolyt/ask.py +128 -0
- intentkit/skills/acolyt/base.py +28 -0
- intentkit/skills/acolyt/schema.json +89 -0
- intentkit/skills/aixbt/README.md +71 -0
- intentkit/skills/aixbt/__init__.py +73 -0
- intentkit/skills/aixbt/aixbt.jpg +0 -0
- intentkit/skills/aixbt/base.py +21 -0
- intentkit/skills/aixbt/projects.py +153 -0
- intentkit/skills/aixbt/schema.json +99 -0
- intentkit/skills/allora/__init__.py +83 -0
- intentkit/skills/allora/allora.jpeg +0 -0
- intentkit/skills/allora/base.py +28 -0
- intentkit/skills/allora/price.py +130 -0
- intentkit/skills/allora/schema.json +89 -0
- intentkit/skills/base.py +174 -0
- intentkit/skills/carv/README.md +95 -0
- intentkit/skills/carv/__init__.py +121 -0
- intentkit/skills/carv/base.py +183 -0
- intentkit/skills/carv/carv.webp +0 -0
- intentkit/skills/carv/fetch_news.py +92 -0
- intentkit/skills/carv/onchain_query.py +164 -0
- intentkit/skills/carv/schema.json +137 -0
- intentkit/skills/carv/token_info_and_price.py +110 -0
- intentkit/skills/cdp/__init__.py +137 -0
- intentkit/skills/cdp/base.py +21 -0
- intentkit/skills/cdp/cdp.png +0 -0
- intentkit/skills/cdp/get_balance.py +81 -0
- intentkit/skills/cdp/schema.json +473 -0
- intentkit/skills/chainlist/README.md +38 -0
- intentkit/skills/chainlist/__init__.py +54 -0
- intentkit/skills/chainlist/base.py +21 -0
- intentkit/skills/chainlist/chain_lookup.py +208 -0
- intentkit/skills/chainlist/chainlist.png +0 -0
- intentkit/skills/chainlist/schema.json +47 -0
- intentkit/skills/common/__init__.py +82 -0
- intentkit/skills/common/base.py +21 -0
- intentkit/skills/common/common.jpg +0 -0
- intentkit/skills/common/current_time.py +84 -0
- intentkit/skills/common/schema.json +57 -0
- intentkit/skills/cookiefun/README.md +121 -0
- intentkit/skills/cookiefun/__init__.py +78 -0
- intentkit/skills/cookiefun/base.py +41 -0
- intentkit/skills/cookiefun/constants.py +18 -0
- intentkit/skills/cookiefun/cookiefun.png +0 -0
- intentkit/skills/cookiefun/get_account_details.py +171 -0
- intentkit/skills/cookiefun/get_account_feed.py +282 -0
- intentkit/skills/cookiefun/get_account_smart_followers.py +181 -0
- intentkit/skills/cookiefun/get_sectors.py +128 -0
- intentkit/skills/cookiefun/schema.json +155 -0
- intentkit/skills/cookiefun/search_accounts.py +225 -0
- intentkit/skills/cryptocompare/__init__.py +130 -0
- intentkit/skills/cryptocompare/api.py +159 -0
- intentkit/skills/cryptocompare/base.py +303 -0
- intentkit/skills/cryptocompare/cryptocompare.png +0 -0
- intentkit/skills/cryptocompare/fetch_news.py +96 -0
- intentkit/skills/cryptocompare/fetch_price.py +99 -0
- intentkit/skills/cryptocompare/fetch_top_exchanges.py +113 -0
- intentkit/skills/cryptocompare/fetch_top_market_cap.py +109 -0
- intentkit/skills/cryptocompare/fetch_top_volume.py +108 -0
- intentkit/skills/cryptocompare/fetch_trading_signals.py +107 -0
- intentkit/skills/cryptocompare/schema.json +168 -0
- intentkit/skills/cryptopanic/__init__.py +108 -0
- intentkit/skills/cryptopanic/base.py +51 -0
- intentkit/skills/cryptopanic/cryptopanic.png +0 -0
- intentkit/skills/cryptopanic/fetch_crypto_news.py +153 -0
- intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +136 -0
- intentkit/skills/cryptopanic/schema.json +103 -0
- intentkit/skills/dapplooker/README.md +92 -0
- intentkit/skills/dapplooker/__init__.py +83 -0
- intentkit/skills/dapplooker/base.py +26 -0
- intentkit/skills/dapplooker/dapplooker.jpg +0 -0
- intentkit/skills/dapplooker/dapplooker_token_data.py +476 -0
- intentkit/skills/dapplooker/schema.json +91 -0
- intentkit/skills/defillama/__init__.py +323 -0
- intentkit/skills/defillama/api.py +315 -0
- intentkit/skills/defillama/base.py +135 -0
- intentkit/skills/defillama/coins/__init__.py +0 -0
- intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +116 -0
- intentkit/skills/defillama/coins/fetch_block.py +98 -0
- intentkit/skills/defillama/coins/fetch_current_prices.py +105 -0
- intentkit/skills/defillama/coins/fetch_first_price.py +100 -0
- intentkit/skills/defillama/coins/fetch_historical_prices.py +110 -0
- intentkit/skills/defillama/coins/fetch_price_chart.py +109 -0
- intentkit/skills/defillama/coins/fetch_price_percentage.py +93 -0
- intentkit/skills/defillama/config/__init__.py +0 -0
- intentkit/skills/defillama/config/chains.py +433 -0
- intentkit/skills/defillama/defillama.jpeg +0 -0
- intentkit/skills/defillama/fees/__init__.py +0 -0
- intentkit/skills/defillama/fees/fetch_fees_overview.py +130 -0
- intentkit/skills/defillama/schema.json +383 -0
- intentkit/skills/defillama/stablecoins/__init__.py +0 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +100 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +129 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +83 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +126 -0
- intentkit/skills/defillama/tests/__init__.py +0 -0
- intentkit/skills/defillama/tests/api_integration.test.py +192 -0
- intentkit/skills/defillama/tests/api_unit.test.py +583 -0
- intentkit/skills/defillama/tvl/__init__.py +0 -0
- intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +106 -0
- intentkit/skills/defillama/tvl/fetch_chains.py +107 -0
- intentkit/skills/defillama/tvl/fetch_historical_tvl.py +91 -0
- intentkit/skills/defillama/tvl/fetch_protocol.py +207 -0
- intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +93 -0
- intentkit/skills/defillama/tvl/fetch_protocols.py +196 -0
- intentkit/skills/defillama/volumes/__init__.py +0 -0
- intentkit/skills/defillama/volumes/fetch_dex_overview.py +157 -0
- intentkit/skills/defillama/volumes/fetch_dex_summary.py +123 -0
- intentkit/skills/defillama/volumes/fetch_options_overview.py +131 -0
- intentkit/skills/defillama/yields/__init__.py +0 -0
- intentkit/skills/defillama/yields/fetch_pool_chart.py +100 -0
- intentkit/skills/defillama/yields/fetch_pools.py +126 -0
- intentkit/skills/dexscreener/__init__.py +93 -0
- intentkit/skills/dexscreener/base.py +133 -0
- intentkit/skills/dexscreener/dexscreener.png +0 -0
- intentkit/skills/dexscreener/model/__init__.py +0 -0
- intentkit/skills/dexscreener/model/search_token_response.py +82 -0
- intentkit/skills/dexscreener/schema.json +48 -0
- intentkit/skills/dexscreener/search_token.py +321 -0
- intentkit/skills/dune_analytics/__init__.py +103 -0
- intentkit/skills/dune_analytics/base.py +46 -0
- intentkit/skills/dune_analytics/dune.png +0 -0
- intentkit/skills/dune_analytics/fetch_kol_buys.py +128 -0
- intentkit/skills/dune_analytics/fetch_nation_metrics.py +237 -0
- intentkit/skills/dune_analytics/schema.json +99 -0
- intentkit/skills/elfa/README.md +100 -0
- intentkit/skills/elfa/__init__.py +123 -0
- intentkit/skills/elfa/base.py +28 -0
- intentkit/skills/elfa/elfa.jpg +0 -0
- intentkit/skills/elfa/mention.py +504 -0
- intentkit/skills/elfa/schema.json +153 -0
- intentkit/skills/elfa/stats.py +118 -0
- intentkit/skills/elfa/tokens.py +126 -0
- intentkit/skills/enso/README.md +75 -0
- intentkit/skills/enso/__init__.py +114 -0
- intentkit/skills/enso/abi/__init__.py +0 -0
- intentkit/skills/enso/abi/approval.py +279 -0
- intentkit/skills/enso/abi/erc20.py +14 -0
- intentkit/skills/enso/abi/route.py +129 -0
- intentkit/skills/enso/base.py +44 -0
- intentkit/skills/enso/best_yield.py +286 -0
- intentkit/skills/enso/enso.jpg +0 -0
- intentkit/skills/enso/networks.py +105 -0
- intentkit/skills/enso/prices.py +93 -0
- intentkit/skills/enso/route.py +300 -0
- intentkit/skills/enso/schema.json +212 -0
- intentkit/skills/enso/tokens.py +223 -0
- intentkit/skills/enso/wallet.py +381 -0
- intentkit/skills/github/README.md +63 -0
- intentkit/skills/github/__init__.py +54 -0
- intentkit/skills/github/base.py +21 -0
- intentkit/skills/github/github.jpg +0 -0
- intentkit/skills/github/github_search.py +183 -0
- intentkit/skills/github/schema.json +59 -0
- intentkit/skills/heurist/__init__.py +143 -0
- intentkit/skills/heurist/base.py +26 -0
- intentkit/skills/heurist/heurist.png +0 -0
- intentkit/skills/heurist/image_generation_animagine_xl.py +162 -0
- intentkit/skills/heurist/image_generation_arthemy_comics.py +162 -0
- intentkit/skills/heurist/image_generation_arthemy_real.py +162 -0
- intentkit/skills/heurist/image_generation_braindance.py +162 -0
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +162 -0
- intentkit/skills/heurist/image_generation_flux_1_dev.py +162 -0
- intentkit/skills/heurist/image_generation_sdxl.py +161 -0
- intentkit/skills/heurist/schema.json +196 -0
- intentkit/skills/lifi/README.md +294 -0
- intentkit/skills/lifi/__init__.py +141 -0
- intentkit/skills/lifi/base.py +21 -0
- intentkit/skills/lifi/lifi.png +0 -0
- intentkit/skills/lifi/schema.json +89 -0
- intentkit/skills/lifi/token_execute.py +472 -0
- intentkit/skills/lifi/token_quote.py +190 -0
- intentkit/skills/lifi/utils.py +656 -0
- intentkit/skills/moralis/README.md +490 -0
- intentkit/skills/moralis/__init__.py +110 -0
- intentkit/skills/moralis/api.py +281 -0
- intentkit/skills/moralis/base.py +55 -0
- intentkit/skills/moralis/fetch_chain_portfolio.py +191 -0
- intentkit/skills/moralis/fetch_nft_portfolio.py +284 -0
- intentkit/skills/moralis/fetch_solana_portfolio.py +331 -0
- intentkit/skills/moralis/fetch_wallet_portfolio.py +301 -0
- intentkit/skills/moralis/moralis.png +0 -0
- intentkit/skills/moralis/schema.json +156 -0
- intentkit/skills/moralis/tests/__init__.py +0 -0
- intentkit/skills/moralis/tests/test_wallet.py +511 -0
- intentkit/skills/nation/__init__.py +62 -0
- intentkit/skills/nation/base.py +31 -0
- intentkit/skills/nation/nation.png +0 -0
- intentkit/skills/nation/nft_check.py +106 -0
- intentkit/skills/nation/schema.json +58 -0
- intentkit/skills/openai/__init__.py +107 -0
- intentkit/skills/openai/base.py +32 -0
- intentkit/skills/openai/dalle_image_generation.py +128 -0
- intentkit/skills/openai/gpt_image_generation.py +152 -0
- intentkit/skills/openai/gpt_image_to_image.py +186 -0
- intentkit/skills/openai/image_to_text.py +126 -0
- intentkit/skills/openai/openai.png +0 -0
- intentkit/skills/openai/schema.json +139 -0
- intentkit/skills/portfolio/README.md +55 -0
- intentkit/skills/portfolio/__init__.py +151 -0
- intentkit/skills/portfolio/base.py +107 -0
- intentkit/skills/portfolio/constants.py +9 -0
- intentkit/skills/portfolio/moralis.png +0 -0
- intentkit/skills/portfolio/schema.json +237 -0
- intentkit/skills/portfolio/token_balances.py +155 -0
- intentkit/skills/portfolio/wallet_approvals.py +102 -0
- intentkit/skills/portfolio/wallet_defi_positions.py +80 -0
- intentkit/skills/portfolio/wallet_history.py +155 -0
- intentkit/skills/portfolio/wallet_net_worth.py +112 -0
- intentkit/skills/portfolio/wallet_nfts.py +139 -0
- intentkit/skills/portfolio/wallet_profitability.py +101 -0
- intentkit/skills/portfolio/wallet_profitability_summary.py +91 -0
- intentkit/skills/portfolio/wallet_stats.py +79 -0
- intentkit/skills/portfolio/wallet_swaps.py +147 -0
- intentkit/skills/skills.toml +103 -0
- intentkit/skills/slack/__init__.py +98 -0
- intentkit/skills/slack/base.py +55 -0
- intentkit/skills/slack/get_channel.py +109 -0
- intentkit/skills/slack/get_message.py +136 -0
- intentkit/skills/slack/schedule_message.py +92 -0
- intentkit/skills/slack/schema.json +135 -0
- intentkit/skills/slack/send_message.py +81 -0
- intentkit/skills/slack/slack.jpg +0 -0
- intentkit/skills/system/__init__.py +90 -0
- intentkit/skills/system/base.py +22 -0
- intentkit/skills/system/read_agent_api_key.py +87 -0
- intentkit/skills/system/regenerate_agent_api_key.py +77 -0
- intentkit/skills/system/schema.json +53 -0
- intentkit/skills/system/system.svg +76 -0
- intentkit/skills/tavily/README.md +86 -0
- intentkit/skills/tavily/__init__.py +91 -0
- intentkit/skills/tavily/base.py +27 -0
- intentkit/skills/tavily/schema.json +119 -0
- intentkit/skills/tavily/tavily.jpg +0 -0
- intentkit/skills/tavily/tavily_extract.py +147 -0
- intentkit/skills/tavily/tavily_search.py +139 -0
- intentkit/skills/token/README.md +89 -0
- intentkit/skills/token/__init__.py +107 -0
- intentkit/skills/token/base.py +154 -0
- intentkit/skills/token/constants.py +9 -0
- intentkit/skills/token/erc20_transfers.py +145 -0
- intentkit/skills/token/moralis.png +0 -0
- intentkit/skills/token/schema.json +141 -0
- intentkit/skills/token/token_analytics.py +81 -0
- intentkit/skills/token/token_price.py +132 -0
- intentkit/skills/token/token_search.py +121 -0
- intentkit/skills/twitter/__init__.py +146 -0
- intentkit/skills/twitter/base.py +68 -0
- intentkit/skills/twitter/follow_user.py +69 -0
- intentkit/skills/twitter/get_mentions.py +124 -0
- intentkit/skills/twitter/get_timeline.py +111 -0
- intentkit/skills/twitter/get_user_by_username.py +84 -0
- intentkit/skills/twitter/get_user_tweets.py +123 -0
- intentkit/skills/twitter/like_tweet.py +65 -0
- intentkit/skills/twitter/post_tweet.py +90 -0
- intentkit/skills/twitter/reply_tweet.py +98 -0
- intentkit/skills/twitter/retweet.py +76 -0
- intentkit/skills/twitter/schema.json +258 -0
- intentkit/skills/twitter/search_tweets.py +115 -0
- intentkit/skills/twitter/twitter.png +0 -0
- intentkit/skills/unrealspeech/__init__.py +55 -0
- intentkit/skills/unrealspeech/base.py +21 -0
- intentkit/skills/unrealspeech/schema.json +100 -0
- intentkit/skills/unrealspeech/text_to_speech.py +177 -0
- intentkit/skills/unrealspeech/unrealspeech.jpg +0 -0
- intentkit/skills/venice_audio/__init__.py +106 -0
- intentkit/skills/venice_audio/base.py +119 -0
- intentkit/skills/venice_audio/input.py +41 -0
- intentkit/skills/venice_audio/schema.json +152 -0
- intentkit/skills/venice_audio/venice_audio.py +240 -0
- intentkit/skills/venice_audio/venice_logo.jpg +0 -0
- intentkit/skills/venice_image/README.md +119 -0
- intentkit/skills/venice_image/__init__.py +154 -0
- intentkit/skills/venice_image/api.py +138 -0
- intentkit/skills/venice_image/base.py +188 -0
- intentkit/skills/venice_image/config.py +35 -0
- intentkit/skills/venice_image/image_enhance/README.md +119 -0
- intentkit/skills/venice_image/image_enhance/__init__.py +0 -0
- intentkit/skills/venice_image/image_enhance/image_enhance.py +80 -0
- intentkit/skills/venice_image/image_enhance/image_enhance_base.py +23 -0
- intentkit/skills/venice_image/image_enhance/image_enhance_input.py +40 -0
- intentkit/skills/venice_image/image_generation/README.md +144 -0
- intentkit/skills/venice_image/image_generation/__init__.py +0 -0
- intentkit/skills/venice_image/image_generation/image_generation_base.py +117 -0
- intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -0
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -0
- intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -0
- intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -0
- intentkit/skills/venice_image/image_upscale/README.md +111 -0
- intentkit/skills/venice_image/image_upscale/__init__.py +0 -0
- intentkit/skills/venice_image/image_upscale/image_upscale.py +90 -0
- intentkit/skills/venice_image/image_upscale/image_upscale_base.py +23 -0
- intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -0
- intentkit/skills/venice_image/image_vision/README.md +112 -0
- intentkit/skills/venice_image/image_vision/__init__.py +0 -0
- intentkit/skills/venice_image/image_vision/image_vision.py +100 -0
- intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -0
- intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -0
- intentkit/skills/venice_image/schema.json +267 -0
- intentkit/skills/venice_image/utils.py +78 -0
- intentkit/skills/venice_image/venice_image.jpg +0 -0
- intentkit/skills/web_scraper/README.md +82 -0
- intentkit/skills/web_scraper/__init__.py +92 -0
- intentkit/skills/web_scraper/base.py +21 -0
- intentkit/skills/web_scraper/langchain.png +0 -0
- intentkit/skills/web_scraper/schema.json +115 -0
- intentkit/skills/web_scraper/scrape_and_index.py +327 -0
- intentkit/utils/__init__.py +1 -0
- intentkit/utils/chain.py +436 -0
- intentkit/utils/error.py +134 -0
- intentkit/utils/logging.py +70 -0
- intentkit/utils/middleware.py +61 -0
- intentkit/utils/random.py +16 -0
- intentkit/utils/s3.py +267 -0
- intentkit/utils/slack_alert.py +79 -0
- intentkit/utils/tx.py +37 -0
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/METADATA +1 -1
- intentkit-0.5.2.dist-info/RECORD +365 -0
- intentkit-0.5.0.dist-info/RECORD +0 -4
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/WHEEL +0 -0
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# LiFi Skills
|
|
2
|
+
Cross-chain token transfers and swaps using the LiFi protocol with CDP wallet integration.
|
|
3
|
+
|
|
4
|
+
## Features
|
|
5
|
+
|
|
6
|
+
- **Token Quotes**: Get real-time quotes for token swaps and cross-chain transfers
|
|
7
|
+
- **Token Execution**: Execute token swaps and transfers with automatic transaction handling
|
|
8
|
+
- **Explorer URLs**: Get direct blockchain explorer links for all transactions
|
|
9
|
+
- **Multi-chain Support**: Works with 15+ blockchains including Base, Ethereum, Arbitrum, Polygon
|
|
10
|
+
- **Testnet Support**: Full support for testnet operations (Base Sepolia, Ethereum Sepolia, etc.)
|
|
11
|
+
|
|
12
|
+
## Skills Available
|
|
13
|
+
|
|
14
|
+
1. **`token_quote`** - Get quotes for token transfers (public access)
|
|
15
|
+
2. **`lifi_token_execute`** - Execute token transfers (requires CDP wallet)
|
|
16
|
+
|
|
17
|
+
## Test Prompts
|
|
18
|
+
|
|
19
|
+
Use these exact prompts to test the LiFi skills:
|
|
20
|
+
|
|
21
|
+
### 1. Check Wallet Address
|
|
22
|
+
```
|
|
23
|
+
what is my wallet address
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 2. Check Balances
|
|
27
|
+
```
|
|
28
|
+
tell me my balance in eth and usdc
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 3. Get Quote for Token Swap
|
|
32
|
+
```
|
|
33
|
+
now get me quote to swap my usdc to eth on the same chain that is base mainnet
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 4. Execute Token Swap
|
|
37
|
+
```
|
|
38
|
+
yes do the swap now
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 5. Verify Transaction
|
|
42
|
+
```
|
|
43
|
+
tell me my balance in eth and usdc
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Expected Results
|
|
47
|
+
|
|
48
|
+
### Quote Response
|
|
49
|
+
```
|
|
50
|
+
### Token Transfer Quote
|
|
51
|
+
|
|
52
|
+
**From:** 2.2019 USDC on Base
|
|
53
|
+
**To:** 0.00100259 ETH on Base
|
|
54
|
+
**Minimum Received:** 0.00097251 ETH
|
|
55
|
+
**Bridge/Exchange:** sushiswap
|
|
56
|
+
|
|
57
|
+
**Value:** $2.2017 → $2.2067
|
|
58
|
+
**Estimated Time:** 30 seconds
|
|
59
|
+
|
|
60
|
+
**Gas Cost:**
|
|
61
|
+
- SEND: 0.00001005 ETH ($0.0221)
|
|
62
|
+
- **Total Gas:** ~$0.0221
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Execution Response
|
|
66
|
+
```
|
|
67
|
+
**Token Swap Executed Successfully**
|
|
68
|
+
|
|
69
|
+
Transaction successful!
|
|
70
|
+
Transaction Hash: 0xe7d026c7598699909794df9f7858e48cc56c03e4d428f5cc62f51c1979617fd1
|
|
71
|
+
Network: Base
|
|
72
|
+
Explorer: https://basescan.org/tx/0xe7d026c7598699909794df9f7858e48cc56c03e4d428f5cc62f51c1979617fd1
|
|
73
|
+
Token: USDC → ETH
|
|
74
|
+
Amount: 2.2019
|
|
75
|
+
|
|
76
|
+
**Status:** Completed (same-chain swap)
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Supported Chains
|
|
80
|
+
|
|
81
|
+
**Mainnet**: Ethereum, Base, Arbitrum, Optimism, Polygon, Avalanche, Fantom, BSC, Linea, zkSync Era, Scroll
|
|
82
|
+
|
|
83
|
+
**Testnet**: Ethereum Sepolia, Base Sepolia, Arbitrum Sepolia, Optimism Sepolia, Polygon Mumbai
|
|
84
|
+
|
|
85
|
+
## Prerequisites
|
|
86
|
+
|
|
87
|
+
- CDP wallet configured and funded
|
|
88
|
+
- Agent with LiFi skills enabled
|
|
89
|
+
- Sufficient token balance for swaps/transfers
|
|
90
|
+
- Network gas tokens for transaction fees
|
|
91
|
+
|
|
92
|
+
## Configuration
|
|
93
|
+
|
|
94
|
+
The skills are automatically configured with:
|
|
95
|
+
- Default slippage: 3%
|
|
96
|
+
- Maximum execution time: 300 seconds
|
|
97
|
+
- Support for all major tokens (ETH, USDC, USDT, DAI, WETH, etc.)
|
|
98
|
+
|
|
99
|
+
## Error Handling
|
|
100
|
+
|
|
101
|
+
The skills handle common errors automatically:
|
|
102
|
+
- Invalid chain identifiers
|
|
103
|
+
- Insufficient balances
|
|
104
|
+
- Network connectivity issues
|
|
105
|
+
- Transaction failures with detailed error messages
|
|
106
|
+
|
|
107
|
+
### CDP Wallet Requirements
|
|
108
|
+
|
|
109
|
+
To use the `token_execute` skill, your agent must have:
|
|
110
|
+
|
|
111
|
+
1. **CDP Wallet Configuration**: A properly configured CDP wallet with `cdp_wallet_data` set
|
|
112
|
+
2. **Sufficient Funds**: Enough tokens for the transfer amount plus gas fees
|
|
113
|
+
3. **Network Configuration**: Proper network settings matching your intended chains
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
## Usage Examples
|
|
117
|
+
|
|
118
|
+
### Token Quote Examples
|
|
119
|
+
|
|
120
|
+
#### Cross-Chain Transfer Quote
|
|
121
|
+
```
|
|
122
|
+
"Get a quote for transferring 100 USDC from Ethereum to Polygon"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
#### Same-Chain Swap Quote
|
|
126
|
+
```
|
|
127
|
+
"What's the rate for swapping 0.5 ETH to USDC on Ethereum?"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
#### Fee Analysis
|
|
131
|
+
```
|
|
132
|
+
"Check the fees for sending 1000 DAI from Arbitrum to Base"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
#### Amount Calculation
|
|
136
|
+
```
|
|
137
|
+
"How much MATIC would I get if I transfer 50 USDC from Ethereum to Polygon?"
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Token Execute Examples
|
|
141
|
+
|
|
142
|
+
#### Execute Cross-Chain Transfer
|
|
143
|
+
```
|
|
144
|
+
"Execute a transfer of 100 USDC from Ethereum to Polygon"
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
#### Execute Same-Chain Swap
|
|
148
|
+
```
|
|
149
|
+
"Swap 0.1 ETH for USDC on Base"
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
#### Execute with Custom Slippage
|
|
153
|
+
```
|
|
154
|
+
"Transfer 500 DAI from Arbitrum to Optimism with 1% slippage"
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Supported Networks
|
|
158
|
+
|
|
159
|
+
### Major Networks
|
|
160
|
+
- **Ethereum** (ETH) - Chain ID: 1
|
|
161
|
+
- **Polygon** (POL) - Chain ID: 137
|
|
162
|
+
- **Arbitrum One** (ARB) - Chain ID: 42161
|
|
163
|
+
- **Optimism** (OPT) - Chain ID: 10
|
|
164
|
+
- **Base** (BASE) - Chain ID: 8453
|
|
165
|
+
- **BNB Chain** (BSC) - Chain ID: 56
|
|
166
|
+
- **Avalanche** (AVAX) - Chain ID: 43114
|
|
167
|
+
- **Gnosis Chain** (DAI) - Chain ID: 100
|
|
168
|
+
|
|
169
|
+
### Layer 2 Networks
|
|
170
|
+
- **Linea** - Chain ID: 59144
|
|
171
|
+
- **zkSync Era** - Chain ID: 324
|
|
172
|
+
- **Polygon zkEVM** - Chain ID: 1101
|
|
173
|
+
- **Scroll** - Chain ID: 534352
|
|
174
|
+
|
|
175
|
+
## How It Works
|
|
176
|
+
|
|
177
|
+
### Token Quote Process
|
|
178
|
+
|
|
179
|
+
1. **Validates** input parameters (chains, tokens, amounts, slippage)
|
|
180
|
+
2. **Queries** LiFi API for the best route and pricing
|
|
181
|
+
3. **Formats** comprehensive quote information including:
|
|
182
|
+
- Token amounts and conversion rates
|
|
183
|
+
- Detailed fee breakdown (LP fees, bridge fees, etc.)
|
|
184
|
+
- Gas cost estimates in native tokens and USD
|
|
185
|
+
- Execution time estimates
|
|
186
|
+
- Routing path through bridges/exchanges
|
|
187
|
+
- USD value equivalents
|
|
188
|
+
|
|
189
|
+
### Token Execute Process
|
|
190
|
+
|
|
191
|
+
1. **Gets Quote** - Retrieves routing and pricing information
|
|
192
|
+
2. **Checks Wallet** - Validates CDP wallet configuration and funds
|
|
193
|
+
3. **Sets Approval** - Automatically approves ERC20 tokens if needed
|
|
194
|
+
4. **Executes Transaction** - Sends the transfer transaction
|
|
195
|
+
5. **Monitors Status** - Tracks cross-chain transfer completion
|
|
196
|
+
6. **Reports Results** - Provides transaction hash and final status
|
|
197
|
+
|
|
198
|
+
## Troubleshooting
|
|
199
|
+
|
|
200
|
+
### Common Issues
|
|
201
|
+
|
|
202
|
+
#### "CDP client not available"
|
|
203
|
+
**Problem**: Agent doesn't have CDP wallet configuration
|
|
204
|
+
**Solution**:
|
|
205
|
+
- Set `wallet_provider: "cdp"` in agent configuration
|
|
206
|
+
- Ensure CDP credentials are properly configured
|
|
207
|
+
- Use `token_quote` for research without requiring a wallet
|
|
208
|
+
|
|
209
|
+
#### "No route found"
|
|
210
|
+
**Problem**: LiFi cannot find a path for the requested transfer
|
|
211
|
+
**Solutions**:
|
|
212
|
+
- Try different token pairs
|
|
213
|
+
- Use more liquid tokens (USDC, ETH, etc.)
|
|
214
|
+
- Check if both chains support the requested tokens
|
|
215
|
+
- Reduce transfer amount if liquidity is limited
|
|
216
|
+
|
|
217
|
+
#### "Invalid request: Token not supported"
|
|
218
|
+
**Problem**: Token symbol or address not recognized
|
|
219
|
+
**Solutions**:
|
|
220
|
+
- Use popular token symbols (USDC, ETH, DAI, MATIC)
|
|
221
|
+
- Verify token exists on the source chain
|
|
222
|
+
- Use full token contract address instead of symbol
|
|
223
|
+
|
|
224
|
+
#### "Failed to approve token"
|
|
225
|
+
**Problem**: ERC20 token approval failed
|
|
226
|
+
**Solutions**:
|
|
227
|
+
- Ensure wallet has enough native tokens for gas
|
|
228
|
+
- Check if token contract allows approvals
|
|
229
|
+
- Try again with a smaller amount
|
|
230
|
+
|
|
231
|
+
#### "Transfer pending" (taking too long)
|
|
232
|
+
**Problem**: Cross-chain transfer is slow
|
|
233
|
+
**Solutions**:
|
|
234
|
+
- Wait longer (some bridges take 10-30 minutes)
|
|
235
|
+
- Check the explorer link for detailed status
|
|
236
|
+
- Contact LiFi support if transfer is stuck
|
|
237
|
+
|
|
238
|
+
### Configuration Issues
|
|
239
|
+
|
|
240
|
+
#### Invalid Slippage
|
|
241
|
+
```
|
|
242
|
+
Error: "Invalid slippage: must be between 0.001 (0.1%) and 0.5 (50%)"
|
|
243
|
+
```
|
|
244
|
+
**Solution**: Use slippage between 0.1% and 50% (e.g., 0.03 for 3%)
|
|
245
|
+
|
|
246
|
+
#### Chain Restrictions
|
|
247
|
+
```
|
|
248
|
+
Error: "Source chain 'ETH' is not allowed"
|
|
249
|
+
```
|
|
250
|
+
**Solution**: Update `allowed_chains` in configuration or remove the restriction
|
|
251
|
+
|
|
252
|
+
#### Execution Timeout
|
|
253
|
+
```
|
|
254
|
+
Status: "Still pending - transfer may take longer to complete"
|
|
255
|
+
```
|
|
256
|
+
**Solution**: Increase `max_execution_time` or wait for manual completion
|
|
257
|
+
|
|
258
|
+
## Best Practices
|
|
259
|
+
|
|
260
|
+
### For Token Quotes
|
|
261
|
+
- Use quotes to compare different routes before executing
|
|
262
|
+
- Check gas costs and fees before large transfers
|
|
263
|
+
- Consider execution time for time-sensitive operations
|
|
264
|
+
|
|
265
|
+
### For Token Execution
|
|
266
|
+
- Always get a quote first to understand costs
|
|
267
|
+
- Ensure sufficient gas tokens in your wallet
|
|
268
|
+
- Use appropriate slippage (1-3% for stable pairs, 3-5% for volatile pairs)
|
|
269
|
+
- Monitor large transfers using the explorer link
|
|
270
|
+
|
|
271
|
+
### For Production Use
|
|
272
|
+
- Set reasonable `allowed_chains` to prevent unexpected transfers
|
|
273
|
+
- Use `private` state for execution skills in production
|
|
274
|
+
- Monitor transfer status for cross-chain operations
|
|
275
|
+
- Keep some native tokens for gas in each chain you use
|
|
276
|
+
|
|
277
|
+
## API Reference
|
|
278
|
+
|
|
279
|
+
### Token Quote Parameters
|
|
280
|
+
- `from_chain`: Source blockchain (string)
|
|
281
|
+
- `to_chain`: Destination blockchain (string)
|
|
282
|
+
- `from_token`: Token to send (symbol or address)
|
|
283
|
+
- `to_token`: Token to receive (symbol or address)
|
|
284
|
+
- `from_amount`: Amount in smallest unit (string)
|
|
285
|
+
- `slippage`: Slippage tolerance 0.001-0.5 (float, optional)
|
|
286
|
+
|
|
287
|
+
### Token Execute Parameters
|
|
288
|
+
Same as Token Quote - the skill handles the execution automatically.
|
|
289
|
+
|
|
290
|
+
### Response Format
|
|
291
|
+
|
|
292
|
+
**Quote Response**: Detailed markdown with transfer details, fees, gas costs, and routing information.
|
|
293
|
+
|
|
294
|
+
**Execute Response**: Transaction hash, status monitoring, and complete transfer summary.
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import List, Optional, TypedDict
|
|
3
|
+
|
|
4
|
+
from intentkit.abstracts.skill import SkillStoreABC
|
|
5
|
+
from intentkit.skills.base import SkillConfig, SkillState
|
|
6
|
+
from intentkit.skills.lifi.base import LiFiBaseTool
|
|
7
|
+
from intentkit.skills.lifi.token_execute import TokenExecute
|
|
8
|
+
from intentkit.skills.lifi.token_quote import TokenQuote
|
|
9
|
+
|
|
10
|
+
# Cache skills at the system level, because they are stateless
|
|
11
|
+
_cache: dict[str, LiFiBaseTool] = {}
|
|
12
|
+
|
|
13
|
+
# Set up logging
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class SkillStates(TypedDict):
|
|
18
|
+
token_quote: SkillState
|
|
19
|
+
token_execute: SkillState
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class Config(SkillConfig):
|
|
23
|
+
"""Configuration for LiFi skills."""
|
|
24
|
+
|
|
25
|
+
states: SkillStates
|
|
26
|
+
default_slippage: Optional[float] = 0.03
|
|
27
|
+
allowed_chains: Optional[List[str]] = None
|
|
28
|
+
max_execution_time: Optional[int] = 300
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
async def get_skills(
|
|
32
|
+
config: "Config",
|
|
33
|
+
is_private: bool,
|
|
34
|
+
store: SkillStoreABC,
|
|
35
|
+
**_,
|
|
36
|
+
) -> list[LiFiBaseTool]:
|
|
37
|
+
"""Get all LiFi skills."""
|
|
38
|
+
available_skills = []
|
|
39
|
+
|
|
40
|
+
# Log configuration
|
|
41
|
+
logger.info(f"[LiFi_Skills] Initializing with config: {config}")
|
|
42
|
+
logger.info(f"[LiFi_Skills] Is private session: {is_private}")
|
|
43
|
+
|
|
44
|
+
# Include skills based on their state
|
|
45
|
+
for skill_name, state in config["states"].items():
|
|
46
|
+
if state == "disabled":
|
|
47
|
+
logger.info(f"[LiFi_Skills] Skipping disabled skill: {skill_name}")
|
|
48
|
+
continue
|
|
49
|
+
elif state == "public" or (state == "private" and is_private):
|
|
50
|
+
available_skills.append(skill_name)
|
|
51
|
+
logger.info(f"[LiFi_Skills] Including skill: {skill_name} (state: {state})")
|
|
52
|
+
else:
|
|
53
|
+
logger.info(
|
|
54
|
+
f"[LiFi_Skills] Skipping private skill in public session: {skill_name}"
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
logger.info(f"[LiFi_Skills] Available skills: {available_skills}")
|
|
58
|
+
|
|
59
|
+
# Get each skill using the cached getter
|
|
60
|
+
skills = []
|
|
61
|
+
for name in available_skills:
|
|
62
|
+
try:
|
|
63
|
+
skill = get_lifi_skill(name, store, config)
|
|
64
|
+
skills.append(skill)
|
|
65
|
+
logger.info(f"[LiFi_Skills] Successfully loaded skill: {name}")
|
|
66
|
+
except Exception as e:
|
|
67
|
+
logger.error(f"[LiFi_Skills] Failed to load skill {name}: {str(e)}")
|
|
68
|
+
# Continue loading other skills even if one fails
|
|
69
|
+
|
|
70
|
+
logger.info(f"[LiFi_Skills] Total skills loaded: {len(skills)}")
|
|
71
|
+
return skills
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def get_lifi_skill(
|
|
75
|
+
name: str,
|
|
76
|
+
store: SkillStoreABC,
|
|
77
|
+
config: Config,
|
|
78
|
+
) -> LiFiBaseTool:
|
|
79
|
+
"""Get a LiFi skill by name."""
|
|
80
|
+
# Create a cache key that includes configuration to ensure skills
|
|
81
|
+
# with different configurations are treated as separate instances
|
|
82
|
+
cache_key = f"{name}_{id(config)}"
|
|
83
|
+
|
|
84
|
+
# Extract configuration options with proper defaults
|
|
85
|
+
default_slippage = config.get("default_slippage", 0.03)
|
|
86
|
+
allowed_chains = config.get("allowed_chains", None)
|
|
87
|
+
max_execution_time = config.get("max_execution_time", 300)
|
|
88
|
+
|
|
89
|
+
# Validate configuration
|
|
90
|
+
if default_slippage < 0.001 or default_slippage > 0.5:
|
|
91
|
+
logger.warning(
|
|
92
|
+
f"[LiFi_Skills] Invalid default_slippage: {default_slippage}, using 0.03"
|
|
93
|
+
)
|
|
94
|
+
default_slippage = 0.03
|
|
95
|
+
|
|
96
|
+
if max_execution_time < 60 or max_execution_time > 1800:
|
|
97
|
+
logger.warning(
|
|
98
|
+
f"[LiFi_Skills] Invalid max_execution_time: {max_execution_time}, using 300"
|
|
99
|
+
)
|
|
100
|
+
max_execution_time = 300
|
|
101
|
+
|
|
102
|
+
if name == "token_quote":
|
|
103
|
+
if cache_key not in _cache:
|
|
104
|
+
logger.info(
|
|
105
|
+
f"[LiFi_Skills] Initializing token_quote skill with slippage: {default_slippage}"
|
|
106
|
+
)
|
|
107
|
+
if allowed_chains:
|
|
108
|
+
logger.info(f"[LiFi_Skills] Allowed chains: {allowed_chains}")
|
|
109
|
+
|
|
110
|
+
_cache[cache_key] = TokenQuote(
|
|
111
|
+
skill_store=store,
|
|
112
|
+
default_slippage=default_slippage,
|
|
113
|
+
allowed_chains=allowed_chains,
|
|
114
|
+
)
|
|
115
|
+
return _cache[cache_key]
|
|
116
|
+
|
|
117
|
+
elif name == "token_execute":
|
|
118
|
+
if cache_key not in _cache:
|
|
119
|
+
logger.info("[LiFi_Skills] Initializing token_execute skill")
|
|
120
|
+
logger.info(
|
|
121
|
+
f"[LiFi_Skills] Configuration - slippage: {default_slippage}, max_time: {max_execution_time}"
|
|
122
|
+
)
|
|
123
|
+
if allowed_chains:
|
|
124
|
+
logger.info(f"[LiFi_Skills] Allowed chains: {allowed_chains}")
|
|
125
|
+
|
|
126
|
+
# Log a warning about CDP wallet requirements
|
|
127
|
+
logger.warning(
|
|
128
|
+
"[LiFi_Skills] token_execute requires a properly configured CDP wallet with sufficient funds"
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
_cache[cache_key] = TokenExecute(
|
|
132
|
+
skill_store=store,
|
|
133
|
+
default_slippage=default_slippage,
|
|
134
|
+
allowed_chains=allowed_chains,
|
|
135
|
+
max_execution_time=max_execution_time,
|
|
136
|
+
)
|
|
137
|
+
return _cache[cache_key]
|
|
138
|
+
|
|
139
|
+
else:
|
|
140
|
+
logger.error(f"[LiFi_Skills] Unknown LiFi skill requested: {name}")
|
|
141
|
+
raise ValueError(f"Unknown LiFi skill: {name}")
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from typing import Type
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
|
|
5
|
+
from intentkit.abstracts.skill import SkillStoreABC
|
|
6
|
+
from intentkit.skills.base import IntentKitSkill
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class LiFiBaseTool(IntentKitSkill):
|
|
10
|
+
"""Base class for LiFi tools."""
|
|
11
|
+
|
|
12
|
+
name: str = Field(description="The name of the tool")
|
|
13
|
+
description: str = Field(description="A description of what the tool does")
|
|
14
|
+
args_schema: Type[BaseModel]
|
|
15
|
+
skill_store: SkillStoreABC = Field(
|
|
16
|
+
description="The skill store for persisting data"
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
@property
|
|
20
|
+
def category(self) -> str:
|
|
21
|
+
return "lifi"
|
|
Binary file
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"title": "LiFi Token Transfer",
|
|
5
|
+
"description": "Cross-chain token transfer and swap capabilities using the LiFi protocol",
|
|
6
|
+
"x-icon": "https://ai.service.crestal.dev/skills/lifi/lifi.png",
|
|
7
|
+
"x-tags": [
|
|
8
|
+
"DeFi",
|
|
9
|
+
"Blockchain",
|
|
10
|
+
"Token Transfer",
|
|
11
|
+
"Cross-chain"
|
|
12
|
+
],
|
|
13
|
+
"properties": {
|
|
14
|
+
"enabled": {
|
|
15
|
+
"type": "boolean",
|
|
16
|
+
"title": "Enabled",
|
|
17
|
+
"description": "Whether this skill is enabled",
|
|
18
|
+
"default": false
|
|
19
|
+
},
|
|
20
|
+
"states": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"properties": {
|
|
23
|
+
"token_quote": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"title": "Token Quote",
|
|
26
|
+
"enum": [
|
|
27
|
+
"disabled",
|
|
28
|
+
"public",
|
|
29
|
+
"private"
|
|
30
|
+
],
|
|
31
|
+
"x-enum-title": [
|
|
32
|
+
"Disabled",
|
|
33
|
+
"Agent Owner + All Users",
|
|
34
|
+
"Agent Owner Only"
|
|
35
|
+
],
|
|
36
|
+
"default": "public",
|
|
37
|
+
"description": "Get token transfer quotes without executing transactions"
|
|
38
|
+
},
|
|
39
|
+
"token_execute": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"title": "Token Execute",
|
|
42
|
+
"enum": [
|
|
43
|
+
"disabled",
|
|
44
|
+
"public",
|
|
45
|
+
"private"
|
|
46
|
+
],
|
|
47
|
+
"x-enum-title": [
|
|
48
|
+
"Disabled",
|
|
49
|
+
"Agent Owner + All Users",
|
|
50
|
+
"Agent Owner Only"
|
|
51
|
+
],
|
|
52
|
+
"default": "private",
|
|
53
|
+
"description": "Execute token transfers (requires CDP wallet and cdp skills enabled)"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"required": ["token_quote", "token_execute"],
|
|
57
|
+
"description": "States for each LiFi skill"
|
|
58
|
+
},
|
|
59
|
+
"default_slippage": {
|
|
60
|
+
"type": "number",
|
|
61
|
+
"title": "Default Slippage",
|
|
62
|
+
"description": "Default slippage tolerance for token transfers (e.g., 0.03 for 3%)",
|
|
63
|
+
"default": 0.03,
|
|
64
|
+
"minimum": 0.001,
|
|
65
|
+
"maximum": 0.5,
|
|
66
|
+
"x-step": 0.001
|
|
67
|
+
},
|
|
68
|
+
"allowed_chains": {
|
|
69
|
+
"type": "array",
|
|
70
|
+
"title": "Allowed Chains",
|
|
71
|
+
"description": "List of blockchain networks that can be used (if empty, all supported chains are allowed)",
|
|
72
|
+
"items": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"examples": ["ETH", "POL", "ARB", "OPT", "DAI"]
|
|
75
|
+
},
|
|
76
|
+
"uniqueItems": true
|
|
77
|
+
},
|
|
78
|
+
"max_execution_time": {
|
|
79
|
+
"type": "integer",
|
|
80
|
+
"title": "Maximum Execution Time",
|
|
81
|
+
"description": "Maximum time (in seconds) to wait for transaction confirmation for token_execute",
|
|
82
|
+
"default": 300,
|
|
83
|
+
"minimum": 60,
|
|
84
|
+
"maximum": 1800
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"required": ["states", "enabled"],
|
|
88
|
+
"additionalProperties": true
|
|
89
|
+
}
|