intentkit 0.6.0.dev16__tar.gz → 0.6.0.dev18__tar.gz
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-0.6.0.dev16 → intentkit-0.6.0.dev18}/PKG-INFO +1 -1
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/__init__.py +1 -1
- intentkit-0.6.0.dev18/clients/cdp.py +151 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/core/prompt.py +5 -6
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/models/agent.py +1 -8
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/models/agent_data.py +18 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/pyproject.toml +1 -1
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cdp/__init__.py +0 -5
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cdp/get_balance.py +44 -20
- intentkit-0.6.0.dev16/clients/cdp.py +0 -92
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/.gitignore +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/LICENSE +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/MANIFEST.in +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/abstracts/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/abstracts/agent.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/abstracts/api.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/abstracts/engine.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/abstracts/exception.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/abstracts/graph.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/abstracts/skill.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/abstracts/twitter.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/clients/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/clients/twitter.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/config/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/config/config.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/core/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/core/agent.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/core/api.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/core/client.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/core/credit.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/core/engine.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/core/node.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/core/skill.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/models/agent_schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/models/app_setting.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/models/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/models/chat.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/models/conversation.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/models/credit.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/models/db.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/models/db_mig.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/models/generator.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/models/llm.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/models/redis.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/models/skill.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/models/user.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/acolyt/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/acolyt/acolyt.jpg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/acolyt/ask.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/acolyt/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/acolyt/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/aixbt/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/aixbt/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/aixbt/aixbt.jpg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/aixbt/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/aixbt/projects.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/aixbt/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/allora/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/allora/allora.jpeg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/allora/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/allora/price.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/allora/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/carv/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/carv/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/carv/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/carv/carv.webp +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/carv/fetch_news.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/carv/onchain_query.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/carv/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/carv/token_info_and_price.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cdp/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cdp/cdp.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cdp/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/chainlist/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/chainlist/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/chainlist/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/chainlist/chain_lookup.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/chainlist/chainlist.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/chainlist/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/common/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/common/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/common/common.jpg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/common/current_time.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/common/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cookiefun/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cookiefun/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cookiefun/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cookiefun/constants.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cookiefun/cookiefun.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cookiefun/get_account_details.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cookiefun/get_account_feed.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cookiefun/get_account_smart_followers.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cookiefun/get_sectors.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cookiefun/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cookiefun/search_accounts.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptocompare/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptocompare/api.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptocompare/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptocompare/cryptocompare.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptocompare/fetch_news.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptocompare/fetch_price.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptocompare/fetch_top_exchanges.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptocompare/fetch_top_market_cap.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptocompare/fetch_top_volume.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptocompare/fetch_trading_signals.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptocompare/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptopanic/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptopanic/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptopanic/cryptopanic.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptopanic/fetch_crypto_news.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptopanic/fetch_crypto_sentiment.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/cryptopanic/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dapplooker/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dapplooker/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dapplooker/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dapplooker/dapplooker.jpg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dapplooker/dapplooker_token_data.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dapplooker/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/api.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/coins/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/coins/fetch_batch_historical_prices.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/coins/fetch_block.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/coins/fetch_current_prices.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/coins/fetch_first_price.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/coins/fetch_historical_prices.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/coins/fetch_price_chart.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/coins/fetch_price_percentage.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/config/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/config/chains.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/defillama.jpeg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/fees/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/fees/fetch_fees_overview.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/stablecoins/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/stablecoins/fetch_stablecoin_chains.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/stablecoins/fetch_stablecoin_charts.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/stablecoins/fetch_stablecoin_prices.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/stablecoins/fetch_stablecoins.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/tests/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/tests/api_integration.test.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/tests/api_unit.test.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/tvl/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/tvl/fetch_chain_historical_tvl.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/tvl/fetch_chains.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/tvl/fetch_historical_tvl.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/tvl/fetch_protocol.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/tvl/fetch_protocol_current_tvl.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/tvl/fetch_protocols.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/volumes/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/volumes/fetch_dex_overview.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/volumes/fetch_dex_summary.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/volumes/fetch_options_overview.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/yields/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/yields/fetch_pool_chart.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/defillama/yields/fetch_pools.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dexscreener/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dexscreener/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dexscreener/dexscreener.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dexscreener/model/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dexscreener/model/search_token_response.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dexscreener/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dexscreener/search_token.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dune_analytics/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dune_analytics/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dune_analytics/dune.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dune_analytics/fetch_kol_buys.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dune_analytics/fetch_nation_metrics.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/dune_analytics/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/elfa/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/elfa/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/elfa/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/elfa/elfa.jpg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/elfa/mention.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/elfa/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/elfa/stats.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/elfa/tokens.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/enso/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/enso/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/enso/abi/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/enso/abi/approval.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/enso/abi/erc20.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/enso/abi/route.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/enso/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/enso/best_yield.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/enso/enso.jpg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/enso/networks.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/enso/prices.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/enso/route.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/enso/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/enso/tokens.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/enso/wallet.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/firecrawl/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/firecrawl/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/firecrawl/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/firecrawl/clear.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/firecrawl/crawl.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/firecrawl/firecrawl.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/firecrawl/query.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/firecrawl/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/firecrawl/scrape.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/firecrawl/utils.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/github/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/github/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/github/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/github/github.jpg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/github/github_search.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/github/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/heurist/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/heurist/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/heurist/heurist.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/heurist/image_generation_animagine_xl.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/heurist/image_generation_arthemy_comics.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/heurist/image_generation_arthemy_real.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/heurist/image_generation_braindance.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/heurist/image_generation_cyber_realistic_xl.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/heurist/image_generation_flux_1_dev.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/heurist/image_generation_sdxl.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/heurist/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/http/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/http/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/http/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/http/get.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/http/http.svg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/http/post.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/http/put.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/http/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/lifi/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/lifi/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/lifi/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/lifi/lifi.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/lifi/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/lifi/token_execute.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/lifi/token_quote.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/lifi/utils.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/moralis/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/moralis/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/moralis/api.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/moralis/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/moralis/fetch_chain_portfolio.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/moralis/fetch_nft_portfolio.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/moralis/fetch_solana_portfolio.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/moralis/fetch_wallet_portfolio.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/moralis/moralis.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/moralis/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/moralis/tests/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/moralis/tests/test_wallet.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/nation/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/nation/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/nation/nation.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/nation/nft_check.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/nation/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/openai/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/openai/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/openai/dalle_image_generation.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/openai/gpt_image_generation.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/openai/gpt_image_to_image.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/openai/image_to_text.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/openai/openai.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/openai/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/constants.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/moralis.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/token_balances.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/wallet_approvals.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/wallet_defi_positions.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/wallet_history.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/wallet_net_worth.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/wallet_nfts.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/wallet_profitability.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/wallet_profitability_summary.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/wallet_stats.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/portfolio/wallet_swaps.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/skills.toml +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/slack/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/slack/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/slack/get_channel.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/slack/get_message.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/slack/schedule_message.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/slack/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/slack/send_message.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/slack/slack.jpg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/supabase/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/supabase/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/supabase/delete_data.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/supabase/fetch_data.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/supabase/insert_data.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/supabase/invoke_function.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/supabase/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/supabase/supabase.svg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/supabase/update_data.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/supabase/upsert_data.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/system/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/system/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/system/read_agent_api_key.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/system/regenerate_agent_api_key.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/system/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/system/system.svg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/tavily/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/tavily/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/tavily/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/tavily/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/tavily/tavily.jpg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/tavily/tavily_extract.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/tavily/tavily_search.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/token/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/token/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/token/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/token/constants.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/token/erc20_transfers.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/token/moralis.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/token/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/token/token_analytics.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/token/token_price.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/token/token_search.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/twitter/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/twitter/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/twitter/follow_user.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/twitter/get_mentions.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/twitter/get_timeline.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/twitter/get_user_by_username.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/twitter/get_user_tweets.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/twitter/like_tweet.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/twitter/post_tweet.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/twitter/reply_tweet.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/twitter/retweet.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/twitter/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/twitter/search_tweets.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/twitter/twitter.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/unrealspeech/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/unrealspeech/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/unrealspeech/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/unrealspeech/text_to_speech.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/unrealspeech/unrealspeech.jpg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_audio/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_audio/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_audio/input.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_audio/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_audio/venice_audio.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_audio/venice_logo.jpg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/api.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/config.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_enhance/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_enhance/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_enhance/image_enhance.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_enhance/image_enhance_base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_enhance/image_enhance_input.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_generation/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_generation/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_generation/image_generation_base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_generation/image_generation_fluently_xl.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_generation/image_generation_flux_dev.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_generation/image_generation_input.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_generation/image_generation_pony_realism.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_generation/image_generation_venice_sd35.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_upscale/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_upscale/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_upscale/image_upscale.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_upscale/image_upscale_base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_upscale/image_upscale_input.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_vision/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_vision/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_vision/image_vision.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_vision/image_vision_base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/image_vision/image_vision_input.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/utils.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/venice_image/venice_image.jpg +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/web_scraper/README.md +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/web_scraper/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/web_scraper/base.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/web_scraper/document_indexer.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/web_scraper/langchain.png +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/web_scraper/schema.json +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/web_scraper/scrape_and_index.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/web_scraper/utils.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/skills/web_scraper/website_indexer.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/utils/__init__.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/utils/chain.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/utils/error.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/utils/logging.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/utils/middleware.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/utils/random.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/utils/s3.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/utils/slack_alert.py +0 -0
- {intentkit-0.6.0.dev16 → intentkit-0.6.0.dev18}/utils/tx.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: intentkit
|
|
3
|
-
Version: 0.6.0.
|
|
3
|
+
Version: 0.6.0.dev18
|
|
4
4
|
Summary: Intent-based AI Agent Platform - Core Package
|
|
5
5
|
Project-URL: Homepage, https://github.com/crestal-network/intentkit
|
|
6
6
|
Project-URL: Repository, https://github.com/crestal-network/intentkit
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import json
|
|
2
|
+
import logging
|
|
3
|
+
from typing import Dict, Optional
|
|
4
|
+
|
|
5
|
+
from bip32 import BIP32
|
|
6
|
+
from cdp import CdpClient as OriginCdpClient
|
|
7
|
+
from cdp import EvmServerAccount
|
|
8
|
+
from coinbase_agentkit import (
|
|
9
|
+
CdpEvmServerWalletProvider,
|
|
10
|
+
CdpEvmServerWalletProviderConfig,
|
|
11
|
+
)
|
|
12
|
+
from eth_keys.datatypes import PrivateKey
|
|
13
|
+
from eth_utils import to_checksum_address
|
|
14
|
+
|
|
15
|
+
from intentkit.abstracts.skill import SkillStoreABC
|
|
16
|
+
from intentkit.models.agent import Agent
|
|
17
|
+
from intentkit.models.agent_data import AgentData
|
|
18
|
+
|
|
19
|
+
_clients: Dict[str, "CdpClient"] = {}
|
|
20
|
+
|
|
21
|
+
logger = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def bip39_seed_to_eth_keys(seed_hex: str) -> Dict[str, str]:
|
|
25
|
+
"""
|
|
26
|
+
Converts a BIP39 seed to an Ethereum private key, public key, and address.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
seed_hex: The BIP39 seed in hexadecimal format
|
|
30
|
+
|
|
31
|
+
Returns:
|
|
32
|
+
Dict containing private_key, public_key, and address
|
|
33
|
+
"""
|
|
34
|
+
# Convert the hex seed to bytes
|
|
35
|
+
seed_bytes = bytes.fromhex(seed_hex)
|
|
36
|
+
|
|
37
|
+
# Derive the master key from the seed
|
|
38
|
+
bip32 = BIP32.from_seed(seed_bytes)
|
|
39
|
+
|
|
40
|
+
# Derive the Ethereum address using the standard derivation path
|
|
41
|
+
private_key_bytes = bip32.get_privkey_from_path("m/44'/60'/0'/0/0")
|
|
42
|
+
|
|
43
|
+
# Create a private key object
|
|
44
|
+
private_key = PrivateKey(private_key_bytes)
|
|
45
|
+
|
|
46
|
+
# Get the public key
|
|
47
|
+
public_key = private_key.public_key
|
|
48
|
+
|
|
49
|
+
# Get the Ethereum address
|
|
50
|
+
address = public_key.to_address()
|
|
51
|
+
|
|
52
|
+
return {
|
|
53
|
+
"private_key": private_key.to_hex(),
|
|
54
|
+
"public_key": public_key.to_hex(),
|
|
55
|
+
"address": to_checksum_address(address),
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class CdpClient:
|
|
60
|
+
def __init__(self, agent_id: str, skill_store: SkillStoreABC) -> None:
|
|
61
|
+
self._agent_id = agent_id
|
|
62
|
+
self._skill_store = skill_store
|
|
63
|
+
self._wallet_provider: Optional[CdpEvmServerWalletProvider] = None
|
|
64
|
+
self._wallet_provider_config: Optional[CdpEvmServerWalletProviderConfig] = None
|
|
65
|
+
|
|
66
|
+
async def get_wallet_provider(self) -> CdpEvmServerWalletProvider:
|
|
67
|
+
if self._wallet_provider:
|
|
68
|
+
return self._wallet_provider
|
|
69
|
+
agent: Agent = await self._skill_store.get_agent_config(self._agent_id)
|
|
70
|
+
agent_data: AgentData = await self._skill_store.get_agent_data(self._agent_id)
|
|
71
|
+
network_id = agent.network_id or agent.cdp_network_id
|
|
72
|
+
|
|
73
|
+
# Get credentials from skill store system config
|
|
74
|
+
api_key_id = self._skill_store.get_system_config("cdp_api_key_id")
|
|
75
|
+
api_key_secret = self._skill_store.get_system_config("cdp_api_key_secret")
|
|
76
|
+
wallet_secret = self._skill_store.get_system_config("cdp_wallet_secret")
|
|
77
|
+
|
|
78
|
+
# already have address
|
|
79
|
+
address = agent_data.evm_wallet_address
|
|
80
|
+
|
|
81
|
+
# new agent or address not migrated yet
|
|
82
|
+
if not address:
|
|
83
|
+
# create cdp client for later use
|
|
84
|
+
cdp_client = OriginCdpClient(
|
|
85
|
+
api_key_id=api_key_id,
|
|
86
|
+
api_key_secret=api_key_secret,
|
|
87
|
+
wallet_secret=wallet_secret,
|
|
88
|
+
)
|
|
89
|
+
# try migrating from v1 cdp_wallet_data
|
|
90
|
+
if agent_data.cdp_wallet_data:
|
|
91
|
+
wallet_data = json.loads(agent_data.cdp_wallet_data)
|
|
92
|
+
if not isinstance(wallet_data, dict):
|
|
93
|
+
raise ValueError("Invalid wallet data format")
|
|
94
|
+
if wallet_data.get("default_address_id") and wallet_data.get("seed"):
|
|
95
|
+
# verify seed and convert to pk
|
|
96
|
+
keys = bip39_seed_to_eth_keys(wallet_data["seed"])
|
|
97
|
+
if keys["address"] != wallet_data["default_address_id"]:
|
|
98
|
+
raise ValueError(
|
|
99
|
+
"Bad wallet data, seed does not match default_address_id"
|
|
100
|
+
)
|
|
101
|
+
# try to import wallet to v2
|
|
102
|
+
logger.info("Migrating wallet data to v2...")
|
|
103
|
+
await cdp_client.evm.import_account(
|
|
104
|
+
name=agent.id,
|
|
105
|
+
private_key=keys["private_key"],
|
|
106
|
+
)
|
|
107
|
+
address = keys["address"]
|
|
108
|
+
logger.info("Migrated wallet data to v2 successfully: %s", address)
|
|
109
|
+
# still not address
|
|
110
|
+
if not address:
|
|
111
|
+
logger.info("Creating new wallet...")
|
|
112
|
+
new_account = await cdp_client.evm.create_account(
|
|
113
|
+
name=agent.id,
|
|
114
|
+
)
|
|
115
|
+
address = new_account.address
|
|
116
|
+
logger.info("Created new wallet: %s", address)
|
|
117
|
+
# now it should be created or migrated, store it
|
|
118
|
+
agent_data.evm_wallet_address = address
|
|
119
|
+
await agent_data.save()
|
|
120
|
+
|
|
121
|
+
# it must have v2 account now, load agentkit wallet provider
|
|
122
|
+
self._wallet_provider_config = CdpEvmServerWalletProviderConfig(
|
|
123
|
+
api_key_id=api_key_id,
|
|
124
|
+
api_key_secret=api_key_secret,
|
|
125
|
+
network_id=network_id,
|
|
126
|
+
address=address,
|
|
127
|
+
wallet_secret=wallet_secret,
|
|
128
|
+
)
|
|
129
|
+
self._wallet_provider = CdpEvmServerWalletProvider(self._wallet_provider_config)
|
|
130
|
+
return self._wallet_provider
|
|
131
|
+
|
|
132
|
+
async def get_account(self) -> EvmServerAccount:
|
|
133
|
+
"""Get the account object from the wallet provider.
|
|
134
|
+
|
|
135
|
+
Returns:
|
|
136
|
+
EvmServerAccount: The account object that can be used for balance checks, transfers, etc.
|
|
137
|
+
"""
|
|
138
|
+
wallet_provider = await self.get_wallet_provider()
|
|
139
|
+
# Access the internal account object
|
|
140
|
+
return wallet_provider._account
|
|
141
|
+
|
|
142
|
+
async def get_provider_config(self) -> CdpEvmServerWalletProviderConfig:
|
|
143
|
+
if not self._wallet_provider_config:
|
|
144
|
+
await self.get_wallet_provider()
|
|
145
|
+
return self._wallet_provider_config
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
async def get_cdp_client(agent_id: str, skill_store: SkillStoreABC) -> "CdpClient":
|
|
149
|
+
if agent_id not in _clients:
|
|
150
|
+
_clients[agent_id] = CdpClient(agent_id, skill_store)
|
|
151
|
+
return _clients[agent_id]
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import json
|
|
2
|
-
|
|
3
1
|
from intentkit.config.config import config
|
|
4
2
|
from intentkit.models.agent import Agent
|
|
5
3
|
from intentkit.models.agent_data import AgentData
|
|
@@ -34,10 +32,11 @@ def agent_prompt(agent: Agent, agent_data: AgentData) -> str:
|
|
|
34
32
|
if agent_data.telegram_name:
|
|
35
33
|
prompt += f"Your telegram bot name is {agent_data.telegram_name}.\n"
|
|
36
34
|
# CDP
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
network_id = agent.network_id or agent.cdp_network_id
|
|
36
|
+
if agent_data.evm_wallet_address and network_id != "solana":
|
|
37
|
+
prompt += f"Your wallet address in {network_id} is {agent_data.evm_wallet_address} .\n"
|
|
38
|
+
if agent_data.solana_wallet_address and network_id == "solana":
|
|
39
|
+
prompt += f"Your wallet address in {network_id} is {agent_data.solana_wallet_address} .\n"
|
|
41
40
|
prompt += "\n"
|
|
42
41
|
if agent.purpose:
|
|
43
42
|
prompt += f"## Purpose\n\n{agent.purpose}\n\n"
|
|
@@ -1564,7 +1564,6 @@ class AgentResponse(BaseModel):
|
|
|
1564
1564
|
str: ETag value for the agent
|
|
1565
1565
|
"""
|
|
1566
1566
|
import hashlib
|
|
1567
|
-
import json
|
|
1568
1567
|
|
|
1569
1568
|
# Generate hash from the entire object data using json mode to handle datetime objects
|
|
1570
1569
|
# Sort keys to ensure consistent ordering of dictionary keys
|
|
@@ -1622,13 +1621,7 @@ class AgentResponse(BaseModel):
|
|
|
1622
1621
|
data["skills"] = filtered_skills
|
|
1623
1622
|
|
|
1624
1623
|
# Process CDP wallet address
|
|
1625
|
-
cdp_wallet_address = None
|
|
1626
|
-
if agent_data and agent_data.cdp_wallet_data:
|
|
1627
|
-
try:
|
|
1628
|
-
wallet_data = json.loads(agent_data.cdp_wallet_data)
|
|
1629
|
-
cdp_wallet_address = wallet_data.get("default_address_id")
|
|
1630
|
-
except (json.JSONDecodeError, AttributeError):
|
|
1631
|
-
pass
|
|
1624
|
+
cdp_wallet_address = agent_data.evm_wallet_address if agent_data else None
|
|
1632
1625
|
|
|
1633
1626
|
# Process Twitter linked status
|
|
1634
1627
|
has_twitter_linked = False
|
|
@@ -29,6 +29,10 @@ class AgentDataTable(Base):
|
|
|
29
29
|
__tablename__ = "agent_data"
|
|
30
30
|
|
|
31
31
|
id = Column(String, primary_key=True, comment="Same as Agent.id")
|
|
32
|
+
evm_wallet_address = Column(String, nullable=True, comment="EVM wallet address")
|
|
33
|
+
solana_wallet_address = Column(
|
|
34
|
+
String, nullable=True, comment="Solana wallet address"
|
|
35
|
+
)
|
|
32
36
|
cdp_wallet_data = Column(String, nullable=True, comment="CDP wallet data")
|
|
33
37
|
crossmint_wallet_data = Column(
|
|
34
38
|
JSON().with_variant(JSONB(), "postgresql"),
|
|
@@ -94,6 +98,20 @@ class AgentData(BaseModel):
|
|
|
94
98
|
description="Same as Agent.id",
|
|
95
99
|
),
|
|
96
100
|
]
|
|
101
|
+
evm_wallet_address: Annotated[
|
|
102
|
+
Optional[str],
|
|
103
|
+
PydanticField(
|
|
104
|
+
default=None,
|
|
105
|
+
description="EVM wallet address",
|
|
106
|
+
),
|
|
107
|
+
]
|
|
108
|
+
solana_wallet_address: Annotated[
|
|
109
|
+
Optional[str],
|
|
110
|
+
PydanticField(
|
|
111
|
+
default=None,
|
|
112
|
+
description="Solana wallet address",
|
|
113
|
+
),
|
|
114
|
+
]
|
|
97
115
|
cdp_wallet_data: Annotated[
|
|
98
116
|
Optional[str],
|
|
99
117
|
PydanticField(
|
|
@@ -25,9 +25,6 @@ from intentkit.skills.base import SkillConfig, SkillState
|
|
|
25
25
|
from intentkit.skills.cdp.base import CDPBaseTool
|
|
26
26
|
from intentkit.skills.cdp.get_balance import GetBalance
|
|
27
27
|
|
|
28
|
-
# Cache skills at the system level, because they are stateless
|
|
29
|
-
_cache: dict[str, CDPBaseTool] = {}
|
|
30
|
-
|
|
31
28
|
|
|
32
29
|
class SkillStates(TypedDict):
|
|
33
30
|
get_balance: SkillState
|
|
@@ -117,10 +114,8 @@ async def get_skills(
|
|
|
117
114
|
for skill in available_skills:
|
|
118
115
|
if skill == "get_balance":
|
|
119
116
|
# Get the account object for the custom GetBalance skill
|
|
120
|
-
account = await cdp_client.get_account()
|
|
121
117
|
tools.append(
|
|
122
118
|
GetBalance(
|
|
123
|
-
account=account,
|
|
124
119
|
agent_id=agent_id,
|
|
125
120
|
skill_store=store,
|
|
126
121
|
)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Type
|
|
1
|
+
from typing import Optional, Type
|
|
2
2
|
|
|
3
3
|
from cdp import EvmServerAccount
|
|
4
4
|
from pydantic import BaseModel, Field
|
|
@@ -11,8 +11,9 @@ from intentkit.skills.cdp.base import CDPBaseTool
|
|
|
11
11
|
class GetBalanceInput(BaseModel):
|
|
12
12
|
"""Input for GetBalance tool."""
|
|
13
13
|
|
|
14
|
-
asset_id: str = Field(
|
|
15
|
-
|
|
14
|
+
asset_id: Optional[str] = Field(
|
|
15
|
+
default=None,
|
|
16
|
+
description="The asset ID to get the balance for (e.g., 'eth', 'usdc', or a valid contract address). If not provided, returns all token balances.",
|
|
16
17
|
)
|
|
17
18
|
|
|
18
19
|
|
|
@@ -29,69 +30,92 @@ class GetBalance(CDPBaseTool):
|
|
|
29
30
|
|
|
30
31
|
agent_id: str
|
|
31
32
|
skill_store: SkillStoreABC
|
|
32
|
-
account: EvmServerAccount | None = None
|
|
33
33
|
|
|
34
34
|
name: str = "cdp_get_balance"
|
|
35
35
|
description: str = (
|
|
36
|
-
"This tool will get the balance of all the addresses in the wallet
|
|
36
|
+
"This tool will get the balance of all the addresses in the wallet. If asset_id is provided, it returns the balance for that specific asset. "
|
|
37
|
+
"If no asset_id is provided, it returns all token balances. "
|
|
37
38
|
"Always use 'eth' for the native asset ETH and 'usdc' for USDC. "
|
|
38
39
|
"Other valid asset IDs are: weth,dai,reth,brett,w,cbeth,axl,iotx,prime,aero,rsr,mog,tbtc,npc,yfi"
|
|
39
40
|
)
|
|
40
41
|
args_schema: Type[BaseModel] = GetBalanceInput
|
|
41
42
|
|
|
42
|
-
async def _arun(self, asset_id: str) -> str:
|
|
43
|
+
async def _arun(self, asset_id: Optional[str] = None) -> str:
|
|
43
44
|
"""Async implementation of the tool to get balance.
|
|
44
45
|
|
|
45
46
|
Args:
|
|
46
|
-
asset_id (str): The asset ID to get the balance for.
|
|
47
|
+
asset_id (Optional[str]): The asset ID to get the balance for. If None, returns all token balances.
|
|
47
48
|
|
|
48
49
|
Returns:
|
|
49
50
|
str: A message containing the balance information or error message.
|
|
50
51
|
"""
|
|
51
52
|
try:
|
|
52
|
-
if not self.account:
|
|
53
|
-
return "Failed to get account."
|
|
54
|
-
|
|
55
53
|
# Get network information from CDP client
|
|
56
54
|
cdp_client = await get_cdp_client(self.agent_id, self.skill_store)
|
|
55
|
+
provider = await cdp_client.get_wallet_provider()
|
|
56
|
+
account: EvmServerAccount = provider._account
|
|
57
57
|
provider_config = await cdp_client.get_provider_config()
|
|
58
58
|
network_id = provider_config.network_id
|
|
59
59
|
|
|
60
60
|
# Map network_id to the format expected by the API
|
|
61
61
|
network_mapping = {
|
|
62
62
|
"base-mainnet": "base",
|
|
63
|
-
"base-sepolia": "base-sepolia",
|
|
64
|
-
"ethereum": "ethereum",
|
|
65
63
|
"ethereum-mainnet": "ethereum",
|
|
66
64
|
}
|
|
67
65
|
api_network = network_mapping.get(network_id, network_id)
|
|
68
66
|
|
|
67
|
+
# If no asset_id provided, return all token balances
|
|
68
|
+
if asset_id is None:
|
|
69
|
+
try:
|
|
70
|
+
# Get native ETH balance
|
|
71
|
+
balance_wei = provider.get_balance()
|
|
72
|
+
balance_eth = balance_wei / (10**18) # Convert from wei to ETH
|
|
73
|
+
|
|
74
|
+
# Get all token balances
|
|
75
|
+
token_balances = await account.list_token_balances(api_network)
|
|
76
|
+
|
|
77
|
+
result = [f"ETH balance: {balance_eth} ETH"]
|
|
78
|
+
|
|
79
|
+
for balance in token_balances.balances:
|
|
80
|
+
result.append(
|
|
81
|
+
f"{balance.token.symbol} balance: {balance.amount.decimals} {balance.token.name}"
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
return f"All balances for account {account.address}:\n" + "\n".join(
|
|
85
|
+
result
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
except Exception as e:
|
|
89
|
+
return f"Error getting all balances: {e!s}"
|
|
90
|
+
|
|
69
91
|
# For native ETH balance, use the account's balance directly
|
|
70
92
|
if asset_id.lower() == "eth":
|
|
71
93
|
try:
|
|
72
94
|
# Get native balance using Web3
|
|
73
|
-
balance_wei =
|
|
95
|
+
balance_wei = provider.get_balance()
|
|
74
96
|
balance_eth = balance_wei / (10**18) # Convert from wei to ETH
|
|
75
|
-
return
|
|
97
|
+
return (
|
|
98
|
+
f"ETH balance for account {account.address}: {balance_eth} ETH"
|
|
99
|
+
)
|
|
76
100
|
except Exception as e:
|
|
77
101
|
return f"Error getting ETH balance: {e!s}"
|
|
78
102
|
|
|
79
103
|
# For other tokens, try the list_token_balances API
|
|
80
104
|
try:
|
|
81
105
|
# list_token_balances returns all token balances for the account
|
|
82
|
-
token_balances = await
|
|
106
|
+
token_balances = await account.list_token_balances(api_network)
|
|
83
107
|
|
|
84
108
|
# Find the balance for the specific asset
|
|
85
109
|
target_balance = None
|
|
86
|
-
for balance in token_balances:
|
|
87
|
-
if balance.
|
|
110
|
+
for balance in token_balances.balances:
|
|
111
|
+
if balance.token.symbol.lower() == asset_id.lower():
|
|
88
112
|
target_balance = balance
|
|
89
113
|
break
|
|
90
114
|
|
|
91
115
|
if target_balance:
|
|
92
|
-
return f"Balance for {asset_id} in account {
|
|
116
|
+
return f"Balance for {asset_id} in account {account.address}: {target_balance.amount.decimals} {target_balance.token.name}"
|
|
93
117
|
else:
|
|
94
|
-
return f"No balance found for asset {asset_id} in account {
|
|
118
|
+
return f"No balance found for asset {asset_id} in account {account.address}"
|
|
95
119
|
|
|
96
120
|
except Exception as e:
|
|
97
121
|
return f"Error getting balance for account: {e!s}"
|
|
@@ -99,7 +123,7 @@ class GetBalance(CDPBaseTool):
|
|
|
99
123
|
except Exception as e:
|
|
100
124
|
return f"Error getting balance: {str(e)}"
|
|
101
125
|
|
|
102
|
-
def _run(self, asset_id: str) -> str:
|
|
126
|
+
def _run(self, asset_id: Optional[str] = None) -> str:
|
|
103
127
|
"""Sync implementation of the tool.
|
|
104
128
|
|
|
105
129
|
This method is deprecated since we now have native async implementation in _arun.
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
import logging
|
|
3
|
-
from typing import Dict, Optional
|
|
4
|
-
|
|
5
|
-
from cdp import EvmServerAccount
|
|
6
|
-
from coinbase_agentkit import (
|
|
7
|
-
CdpEvmServerWalletProvider,
|
|
8
|
-
CdpEvmServerWalletProviderConfig,
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
from intentkit.abstracts.skill import SkillStoreABC
|
|
12
|
-
from intentkit.models.agent import Agent
|
|
13
|
-
from intentkit.models.agent_data import AgentData
|
|
14
|
-
|
|
15
|
-
_clients: Dict[str, "CdpClient"] = {}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class CdpClient:
|
|
19
|
-
def __init__(self, agent_id: str, skill_store: SkillStoreABC) -> None:
|
|
20
|
-
self._agent_id = agent_id
|
|
21
|
-
self._skill_store = skill_store
|
|
22
|
-
self._wallet_provider: Optional[CdpEvmServerWalletProvider] = None
|
|
23
|
-
self._wallet_provider_config: Optional[CdpEvmServerWalletProviderConfig] = None
|
|
24
|
-
|
|
25
|
-
async def get_wallet_provider(self) -> CdpEvmServerWalletProvider:
|
|
26
|
-
if self._wallet_provider:
|
|
27
|
-
return self._wallet_provider
|
|
28
|
-
agent: Agent = await self._skill_store.get_agent_config(self._agent_id)
|
|
29
|
-
agent_data: AgentData = await self._skill_store.get_agent_data(self._agent_id)
|
|
30
|
-
network_id = agent.network_id or agent.cdp_network_id
|
|
31
|
-
|
|
32
|
-
logger = logging.getLogger(__name__)
|
|
33
|
-
|
|
34
|
-
# Get credentials from skill store system config
|
|
35
|
-
api_key_id = self._skill_store.get_system_config("cdp_api_key_id")
|
|
36
|
-
api_key_secret = self._skill_store.get_system_config("cdp_api_key_secret")
|
|
37
|
-
wallet_secret = self._skill_store.get_system_config("cdp_wallet_secret")
|
|
38
|
-
|
|
39
|
-
address = None
|
|
40
|
-
|
|
41
|
-
# Attempt to override with any wallet-specific secret stored in wallet_data
|
|
42
|
-
if agent_data.cdp_wallet_data:
|
|
43
|
-
try:
|
|
44
|
-
wallet_data = json.loads(agent_data.cdp_wallet_data)
|
|
45
|
-
# Try to get address from the new format or fallback to old format
|
|
46
|
-
if "default_address_id" in wallet_data:
|
|
47
|
-
address = wallet_data["default_address_id"]
|
|
48
|
-
|
|
49
|
-
# Prefer wallet_secret stored alongside the wallet data if present
|
|
50
|
-
if "wallet_secret" in wallet_data:
|
|
51
|
-
wallet_secret = wallet_data["wallet_secret"]
|
|
52
|
-
elif "account_data" in wallet_data and wallet_data["account_data"]:
|
|
53
|
-
# Some versions may nest the secret inside account_data
|
|
54
|
-
wallet_secret = (
|
|
55
|
-
wallet_data["account_data"].get("wallet_secret")
|
|
56
|
-
or wallet_secret
|
|
57
|
-
)
|
|
58
|
-
except json.JSONDecodeError:
|
|
59
|
-
logger.warning(
|
|
60
|
-
"Invalid JSON in cdp_wallet_data for agent %s", self._agent_id
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
self._wallet_provider_config = CdpEvmServerWalletProviderConfig(
|
|
64
|
-
api_key_id=api_key_id,
|
|
65
|
-
api_key_secret=api_key_secret,
|
|
66
|
-
network_id=network_id,
|
|
67
|
-
address=address,
|
|
68
|
-
wallet_secret=wallet_secret,
|
|
69
|
-
)
|
|
70
|
-
self._wallet_provider = CdpEvmServerWalletProvider(self._wallet_provider_config)
|
|
71
|
-
return self._wallet_provider
|
|
72
|
-
|
|
73
|
-
async def get_account(self) -> EvmServerAccount:
|
|
74
|
-
"""Get the account object from the wallet provider.
|
|
75
|
-
|
|
76
|
-
Returns:
|
|
77
|
-
EvmServerAccount: The account object that can be used for balance checks, transfers, etc.
|
|
78
|
-
"""
|
|
79
|
-
wallet_provider = await self.get_wallet_provider()
|
|
80
|
-
# Access the internal account object
|
|
81
|
-
return wallet_provider._account
|
|
82
|
-
|
|
83
|
-
async def get_provider_config(self) -> CdpEvmServerWalletProviderConfig:
|
|
84
|
-
if not self._wallet_provider_config:
|
|
85
|
-
await self.get_wallet_provider()
|
|
86
|
-
return self._wallet_provider_config
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
async def get_cdp_client(agent_id: str, skill_store: SkillStoreABC) -> "CdpClient":
|
|
90
|
-
if agent_id not in _clients:
|
|
91
|
-
_clients[agent_id] = CdpClient(agent_id, skill_store)
|
|
92
|
-
return _clients[agent_id]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|