intentkit 0.8.4.dev3__tar.gz → 0.8.17__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.
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/PKG-INFO +3 -4
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/__init__.py +1 -1
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/abstracts/agent.py +4 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/abstracts/engine.py +5 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/abstracts/graph.py +10 -5
- intentkit-0.8.17/abstracts/skill.py +60 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/abstracts/twitter.py +4 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/clients/__init__.py +3 -2
- intentkit-0.8.17/clients/cdp.py +128 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/clients/twitter.py +56 -57
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/clients/web3.py +1 -3
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/config/config.py +5 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/agent.py +16 -388
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/asset.py +64 -18
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/client.py +1 -1
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/credit.py +19 -20
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/engine.py +26 -11
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/node.py +2 -1
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/prompt.py +53 -15
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/scheduler.py +9 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/statistics.py +6 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/agent.py +256 -176
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/agent_data.py +62 -36
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/agent_schema.json +6 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/app_setting.py +6 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/chat.py +28 -24
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/conversation.py +8 -8
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/credit.py +62 -64
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/db.py +8 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/db_mig.py +2 -2
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/llm.csv +15 -12
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/llm.py +18 -16
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/redis.py +2 -3
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/skill.py +62 -66
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/skills.csv +30 -26
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/user.py +64 -18
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/pyproject.toml +3 -4
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/acolyt/__init__.py +2 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/acolyt/ask.py +3 -4
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/acolyt/base.py +4 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/aixbt/__init__.py +2 -13
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/aixbt/base.py +1 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/aixbt/projects.py +14 -15
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/allora/__init__.py +2 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/allora/base.py +4 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/allora/price.py +3 -4
- intentkit-0.8.17/skills/base.py +364 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/basename/__init__.py +4 -8
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/__init__.py +115 -121
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/base.py +184 -185
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/fetch_news.py +3 -3
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/onchain_query.py +4 -4
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/token_info_and_price.py +5 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/__init__.py +4 -15
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/base.py +1 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/deck_draw.py +5 -8
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/deck_shuffle.py +6 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/dice_roll.py +2 -4
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cdp/__init__.py +3 -10
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cdp/base.py +1 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cdp/schema.json +1 -17
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/chainlist/__init__.py +2 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/chainlist/base.py +1 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/chainlist/chain_lookup.py +18 -18
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/common/__init__.py +2 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/common/base.py +1 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/common/current_time.py +1 -2
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/__init__.py +6 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/base.py +2 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/get_account_details.py +7 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/get_account_feed.py +19 -19
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/get_account_smart_followers.py +7 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/get_sectors.py +3 -3
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/search_accounts.py +9 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/__init__.py +7 -24
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/api.py +2 -3
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/base.py +10 -24
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/fetch_news.py +4 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/fetch_price.py +6 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/fetch_top_exchanges.py +4 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/fetch_top_market_cap.py +4 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/fetch_top_volume.py +4 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/fetch_trading_signals.py +5 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptopanic/__init__.py +7 -10
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptopanic/base.py +51 -55
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptopanic/fetch_crypto_news.py +4 -8
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dapplooker/__init__.py +2 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dapplooker/base.py +4 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dapplooker/dapplooker_token_data.py +7 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/__init__.py +24 -74
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/api.py +6 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/base.py +8 -19
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/fetch_block.py +6 -8
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/fetch_current_prices.py +8 -10
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/fetch_first_price.py +7 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/fetch_historical_prices.py +9 -11
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/fetch_price_chart.py +9 -11
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/fetch_price_percentage.py +7 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/config/chains.py +1 -3
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/fees/fetch_fees_overview.py +24 -26
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tests/api_integration.test.py +1 -1
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tvl/fetch_chains.py +9 -11
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tvl/fetch_protocol.py +32 -38
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tvl/fetch_protocols.py +37 -45
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/volumes/fetch_dex_overview.py +42 -48
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/volumes/fetch_dex_summary.py +35 -37
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/volumes/fetch_options_overview.py +24 -28
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/yields/fetch_pool_chart.py +10 -12
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/yields/fetch_pools.py +26 -30
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/__init__.py +97 -102
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/base.py +125 -130
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/get_pair_info.py +4 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/get_token_pairs.py +4 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/get_tokens_info.py +7 -8
- intentkit-0.8.17/skills/dexscreener/model/search_token_response.py +80 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/search_token.py +182 -184
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/utils.py +15 -14
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dune_analytics/__init__.py +7 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dune_analytics/base.py +48 -52
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dune_analytics/fetch_kol_buys.py +5 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dune_analytics/fetch_nation_metrics.py +6 -8
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/__init__.py +5 -18
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/base.py +10 -14
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/mention.py +19 -21
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/stats.py +4 -4
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/tokens.py +12 -12
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/utils.py +26 -28
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/__init__.py +11 -31
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/base.py +9 -15
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/best_yield.py +5 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/networks.py +3 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/prices.py +2 -4
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/route.py +6 -12
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/tokens.py +4 -16
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/wallet.py +6 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc20/__init__.py +5 -11
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc721/__init__.py +5 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/__init__.py +5 -18
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/base.py +4 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/clear.py +4 -8
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/crawl.py +19 -19
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/query.py +4 -3
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/scrape.py +17 -22
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/utils.py +50 -42
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/github/__init__.py +2 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/github/base.py +1 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/github/github_search.py +1 -2
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/__init__.py +8 -27
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/base.py +4 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/image_generation_animagine_xl.py +12 -13
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/image_generation_arthemy_comics.py +12 -13
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/image_generation_arthemy_real.py +12 -13
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/image_generation_braindance.py +12 -13
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/image_generation_cyber_realistic_xl.py +12 -13
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/image_generation_flux_1_dev.py +12 -13
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/image_generation_sdxl.py +12 -13
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/__init__.py +4 -15
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/base.py +1 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/get.py +21 -16
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/post.py +23 -18
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/put.py +23 -18
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/__init__.py +5 -10
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/base.py +1 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/token_execute.py +14 -17
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/token_quote.py +7 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/utils.py +16 -16
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/__init__.py +6 -10
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/api.py +6 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/base.py +5 -10
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/fetch_chain_portfolio.py +10 -11
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/fetch_nft_portfolio.py +22 -22
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/fetch_solana_portfolio.py +11 -12
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/fetch_wallet_portfolio.py +8 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/morpho/__init__.py +5 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/nation/__init__.py +4 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/nation/base.py +5 -10
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/nation/nft_check.py +3 -4
- intentkit-0.8.17/skills/onchain.py +23 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/__init__.py +17 -18
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/base.py +10 -14
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/dalle_image_generation.py +3 -8
- intentkit-0.8.17/skills/openai/gpt_avatar_generator.py +102 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/gpt_image_generation.py +4 -8
- intentkit-0.8.17/skills/openai/gpt_image_mini_generator.py +91 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/gpt_image_to_image.py +4 -8
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/image_to_text.py +3 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/schema.json +32 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/__init__.py +11 -35
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/base.py +33 -19
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/token_balances.py +21 -21
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_approvals.py +17 -18
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_defi_positions.py +3 -3
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_history.py +31 -31
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_net_worth.py +13 -13
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_nfts.py +19 -19
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_profitability.py +18 -18
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_profitability_summary.py +5 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_stats.py +3 -3
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/wallet_swaps.py +19 -19
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/pyth/__init__.py +4 -10
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/skills.toml +4 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/__init__.py +5 -17
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/base.py +3 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/get_channel.py +8 -8
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/get_message.py +9 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/schedule_message.py +5 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/send_message.py +3 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/__init__.py +7 -23
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/base.py +1 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/delete_data.py +4 -4
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/fetch_data.py +12 -12
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/insert_data.py +4 -4
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/invoke_function.py +6 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/update_data.py +6 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/upsert_data.py +4 -4
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/superfluid/__init__.py +5 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/__init__.py +7 -24
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/add_autonomous_task.py +10 -12
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/delete_autonomous_task.py +2 -2
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/edit_autonomous_task.py +14 -18
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/list_autonomous_tasks.py +3 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/read_agent_api_key.py +6 -4
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/regenerate_agent_api_key.py +6 -4
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/tavily/__init__.py +3 -12
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/tavily/base.py +4 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/tavily/tavily_extract.py +2 -4
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/tavily/tavily_search.py +4 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/__init__.py +5 -10
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/base.py +7 -11
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/erc20_transfers.py +19 -19
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/token_analytics.py +3 -3
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/token_price.py +13 -13
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/token_search.py +9 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/__init__.py +11 -35
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/base.py +22 -34
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/follow_user.py +2 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/get_mentions.py +5 -12
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/get_timeline.py +4 -12
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/get_user_by_username.py +2 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/get_user_tweets.py +5 -13
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/like_tweet.py +2 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/post_tweet.py +6 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/reply_tweet.py +6 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/retweet.py +2 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/search_tweets.py +4 -12
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/unrealspeech/__init__.py +2 -7
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/unrealspeech/base.py +2 -8
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/unrealspeech/text_to_speech.py +8 -8
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_audio/__init__.py +98 -106
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_audio/base.py +117 -121
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_audio/input.py +41 -41
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_audio/venice_audio.py +7 -11
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/__init__.py +147 -154
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/api.py +138 -138
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/base.py +185 -192
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/config.py +33 -35
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_enhance/image_enhance.py +2 -3
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_base.py +9 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_input.py +158 -158
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_upscale/image_upscale.py +3 -3
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_vision/image_vision.py +2 -2
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_vision/image_vision_base.py +17 -17
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_vision/image_vision_input.py +9 -9
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/utils.py +77 -78
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/__init__.py +5 -18
- intentkit-0.8.17/skills/web_scraper/base.py +35 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/document_indexer.py +7 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/scrape_and_index.py +15 -15
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/utils.py +62 -63
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/website_indexer.py +17 -19
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/weth/__init__.py +5 -11
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/wow/__init__.py +5 -11
- intentkit-0.8.17/skills/x402/__init__.py +61 -0
- intentkit-0.8.17/skills/x402/ask_agent.py +98 -0
- intentkit-0.8.17/skills/x402/base.py +99 -0
- intentkit-0.8.17/skills/x402/http_request.py +117 -0
- intentkit-0.8.17/skills/x402/schema.json +45 -0
- intentkit-0.8.17/skills/x402/x402.webp +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/__init__.py +4 -15
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/base.py +5 -5
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/price.py +6 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/swap.py +6 -8
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/transfer.py +4 -6
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/error.py +2 -2
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/logging.py +2 -4
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/s3.py +8 -9
- intentkit-0.8.17/utils/schema.py +100 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/slack_alert.py +7 -8
- intentkit-0.8.4.dev3/abstracts/skill.py +0 -198
- intentkit-0.8.4.dev3/clients/cdp.py +0 -167
- intentkit-0.8.4.dev3/models/generator.py +0 -347
- intentkit-0.8.4.dev3/skills/base.py +0 -241
- intentkit-0.8.4.dev3/skills/dexscreener/model/search_token_response.py +0 -82
- intentkit-0.8.4.dev3/skills/web_scraper/base.py +0 -21
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/.gitignore +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/LICENSE +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/MANIFEST.in +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/abstracts/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/abstracts/api.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/config/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/api.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/core/chat.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/agent_public.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/models/base.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/acolyt/acolyt.jpg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/acolyt/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/aixbt/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/aixbt/aixbt.jpg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/aixbt/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/allora/allora.jpeg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/allora/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/basename/base.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/basename/basename.svg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/basename/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/carv.webp +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/carv/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/casino.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/casino/utils.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cdp/cdp.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/chainlist/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/chainlist/chainlist.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/chainlist/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/common/common.jpg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/common/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/constants.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/cookiefun.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cookiefun/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/cryptocompare.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptocompare/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptopanic/cryptopanic.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/cryptopanic/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dapplooker/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dapplooker/dapplooker.jpg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dapplooker/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/coins/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/config/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/defillama.jpeg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/fees/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/stablecoins/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tests/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tests/api_unit.test.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/tvl/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/volumes/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/defillama/yields/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/dexscreener.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/model/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dexscreener/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dune_analytics/dune.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/dune_analytics/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/elfa.jpg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/elfa/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/abi/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/abi/approval.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/abi/erc20.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/abi/route.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/enso.jpg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/enso/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc20/base.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc20/erc20.svg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc20/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc721/base.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc721/erc721.svg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/erc721/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/firecrawl.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/firecrawl/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/github/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/github/github.jpg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/github/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/heurist.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/heurist/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/http.svg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/http/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/lifi.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/lifi/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/moralis.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/moralis/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/morpho/base.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/morpho/morpho.svg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/morpho/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/nation/nation.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/nation/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/openai/openai.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/constants.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/moralis.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/portfolio/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/pyth/base.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/pyth/pyth.svg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/pyth/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/slack/slack.jpg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/supabase/supabase.svg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/superfluid/base.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/superfluid/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/superfluid/superfluid.svg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/base.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/system/system.svg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/tavily/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/tavily/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/tavily/tavily.jpg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/constants.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/moralis.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/token/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/twitter/twitter.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/unrealspeech/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/unrealspeech/unrealspeech.jpg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_audio/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_audio/venice_logo.jpg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_enhance/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_enhance/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_generation/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_upscale/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_upscale/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_vision/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/image_vision/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/venice_image/venice_image.jpg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/langchain.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/web_scraper/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/weth/base.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/weth/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/weth/weth.svg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/wow/base.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/wow/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/wow/wow.svg +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/README.md +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/schema.json +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/skills/xmtp/xmtp.png +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/__init__.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/chain.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/random.py +0 -0
- {intentkit-0.8.4.dev3 → intentkit-0.8.17}/utils/tx.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: intentkit
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.17
|
|
4
4
|
Summary: Intent-based AI Agent Platform - Core Package
|
|
5
5
|
Project-URL: Homepage, https://github.com/crestalnetwork/intentkit
|
|
6
6
|
Project-URL: Repository, https://github.com/crestalnetwork/intentkit
|
|
@@ -34,15 +34,14 @@ Classifier: Development Status :: 4 - Beta
|
|
|
34
34
|
Classifier: Intended Audience :: Developers
|
|
35
35
|
Classifier: License :: OSI Approved :: MIT License
|
|
36
36
|
Classifier: Programming Language :: Python :: 3
|
|
37
|
-
Classifier: Programming Language :: Python :: 3.
|
|
37
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
38
38
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
39
39
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
40
|
-
Requires-Python:
|
|
40
|
+
Requires-Python: ==3.13.*
|
|
41
41
|
Requires-Dist: aiohttp>=3.11.16
|
|
42
42
|
Requires-Dist: aiosqlite>=0.21.0
|
|
43
43
|
Requires-Dist: asyncpg>=0.30.0
|
|
44
44
|
Requires-Dist: aws-secretsmanager-caching>=1.1.3
|
|
45
|
-
Requires-Dist: bip32>=2.0.0
|
|
46
45
|
Requires-Dist: boto3<2.0.0,>=1.37.23
|
|
47
46
|
Requires-Dist: botocore>=1.35.97
|
|
48
47
|
Requires-Dist: cdp-sdk>=1.31.1
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
|
-
from typing import Dict, Optional
|
|
3
2
|
|
|
4
3
|
from intentkit.models.agent import Agent
|
|
5
4
|
from intentkit.models.agent_data import AgentData, AgentQuota
|
|
@@ -24,7 +23,7 @@ class AgentStoreABC(ABC):
|
|
|
24
23
|
self.agent_id = agent_id
|
|
25
24
|
|
|
26
25
|
@abstractmethod
|
|
27
|
-
async def get_config(self) ->
|
|
26
|
+
async def get_config(self) -> Agent | None:
|
|
28
27
|
"""Get agent configuration.
|
|
29
28
|
|
|
30
29
|
Returns:
|
|
@@ -33,7 +32,7 @@ class AgentStoreABC(ABC):
|
|
|
33
32
|
pass
|
|
34
33
|
|
|
35
34
|
@abstractmethod
|
|
36
|
-
async def get_data(self) ->
|
|
35
|
+
async def get_data(self) -> AgentData | None:
|
|
37
36
|
"""Get additional agent data.
|
|
38
37
|
|
|
39
38
|
Returns:
|
|
@@ -42,7 +41,7 @@ class AgentStoreABC(ABC):
|
|
|
42
41
|
pass
|
|
43
42
|
|
|
44
43
|
@abstractmethod
|
|
45
|
-
async def set_data(self, data:
|
|
44
|
+
async def set_data(self, data: dict) -> None:
|
|
46
45
|
"""Update agent data.
|
|
47
46
|
|
|
48
47
|
Args:
|
|
@@ -51,7 +50,7 @@ class AgentStoreABC(ABC):
|
|
|
51
50
|
pass
|
|
52
51
|
|
|
53
52
|
@abstractmethod
|
|
54
|
-
async def get_quota(self) ->
|
|
53
|
+
async def get_quota(self) -> AgentQuota | None:
|
|
55
54
|
"""Get agent quota information.
|
|
56
55
|
|
|
57
56
|
Returns:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from
|
|
1
|
+
from collections.abc import Callable
|
|
2
2
|
|
|
3
3
|
from pydantic import BaseModel
|
|
4
4
|
|
|
@@ -12,19 +12,19 @@ class AgentMessageInput(BaseModel):
|
|
|
12
12
|
|
|
13
13
|
Attributes:
|
|
14
14
|
text (str): The main text content of the message or query
|
|
15
|
-
images (
|
|
15
|
+
images (list[str]): List of image references/URLs to be processed by the agent.
|
|
16
16
|
Empty list if no images are provided.
|
|
17
17
|
"""
|
|
18
18
|
|
|
19
19
|
text: str # required
|
|
20
20
|
"""The main text content or query to be processed by the agent"""
|
|
21
21
|
|
|
22
|
-
images:
|
|
22
|
+
images: list[str] = [] # optional, defaults to empty list
|
|
23
23
|
"""List of image references or URLs for multimodal processing"""
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
# Define a type hint for the callback that takes three strings and returns a list of strings
|
|
27
|
-
AgentExecutionCallback = Callable[[str, AgentMessageInput, str],
|
|
27
|
+
AgentExecutionCallback = Callable[[str, AgentMessageInput, str], list[str]]
|
|
28
28
|
"""Callback function type for agent execution.
|
|
29
29
|
|
|
30
30
|
Args:
|
|
@@ -33,6 +33,6 @@ Args:
|
|
|
33
33
|
thread_id (str): The thread ID for tracking the conversation context
|
|
34
34
|
|
|
35
35
|
Returns:
|
|
36
|
-
|
|
36
|
+
list[str]: A list of formatted response lines from the agent execution. Each line
|
|
37
37
|
typically contains input/output markers, agent responses, and timing information.
|
|
38
38
|
"""
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
from collections.abc import Callable
|
|
1
2
|
from enum import Enum
|
|
2
|
-
from typing import Any,
|
|
3
|
+
from typing import Any, NotRequired
|
|
3
4
|
|
|
4
5
|
from langgraph.prebuilt.chat_agent_executor import AgentState as BaseAgentState
|
|
5
6
|
from pydantic import BaseModel
|
|
@@ -23,21 +24,25 @@ class AgentState(BaseAgentState):
|
|
|
23
24
|
|
|
24
25
|
context: dict[str, Any]
|
|
25
26
|
error: NotRequired[AgentError]
|
|
26
|
-
__extra__: NotRequired[
|
|
27
|
+
__extra__: NotRequired[dict[str, Any]]
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
class AgentContext(BaseModel):
|
|
30
31
|
agent_id: str
|
|
31
32
|
get_agent: Callable[[], Agent]
|
|
32
33
|
chat_id: str
|
|
33
|
-
user_id:
|
|
34
|
-
app_id:
|
|
34
|
+
user_id: str | None = None
|
|
35
|
+
app_id: str | None = None
|
|
35
36
|
entrypoint: AuthorType
|
|
36
37
|
is_private: bool
|
|
37
38
|
search: bool = False
|
|
38
39
|
thinking: bool = False
|
|
39
|
-
payer:
|
|
40
|
+
payer: str | None = None
|
|
40
41
|
|
|
41
42
|
@property
|
|
42
43
|
def agent(self) -> Agent:
|
|
43
44
|
return self.get_agent()
|
|
45
|
+
|
|
46
|
+
@property
|
|
47
|
+
def thread_id(self) -> str:
|
|
48
|
+
return f"{self.agent_id}-{self.chat_id}"
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
from intentkit.models.agent import Agent
|
|
5
|
+
from intentkit.models.agent_data import AgentData, AgentQuota
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class SkillStoreABC(ABC):
|
|
9
|
+
"""Abstract base class for skill data storage operations.
|
|
10
|
+
|
|
11
|
+
This class defines the interface for interacting with skill-related data
|
|
12
|
+
for both agents and threads.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
@staticmethod
|
|
16
|
+
@abstractmethod
|
|
17
|
+
def get_system_config(key: str) -> Any:
|
|
18
|
+
"""Get system configuration value by key."""
|
|
19
|
+
pass
|
|
20
|
+
|
|
21
|
+
@staticmethod
|
|
22
|
+
@abstractmethod
|
|
23
|
+
async def get_agent_config(agent_id: str) -> Agent | None:
|
|
24
|
+
"""Get agent configuration.
|
|
25
|
+
|
|
26
|
+
Returns:
|
|
27
|
+
Agent configuration if found, None otherwise
|
|
28
|
+
"""
|
|
29
|
+
pass
|
|
30
|
+
|
|
31
|
+
@staticmethod
|
|
32
|
+
@abstractmethod
|
|
33
|
+
async def get_agent_data(agent_id: str) -> AgentData | None:
|
|
34
|
+
"""Get additional agent data.
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
Agent data if found, None otherwise
|
|
38
|
+
"""
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
@staticmethod
|
|
42
|
+
@abstractmethod
|
|
43
|
+
async def set_agent_data(agent_id: str, data: dict) -> None:
|
|
44
|
+
"""Update agent data.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
agent_id: ID of the agent
|
|
48
|
+
data: Dictionary containing fields to update
|
|
49
|
+
"""
|
|
50
|
+
pass
|
|
51
|
+
|
|
52
|
+
@staticmethod
|
|
53
|
+
@abstractmethod
|
|
54
|
+
async def get_agent_quota(agent_id: str) -> AgentQuota | None:
|
|
55
|
+
"""Get agent quota information.
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
Agent quota if found, None otherwise
|
|
59
|
+
"""
|
|
60
|
+
pass
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
|
-
from typing import Optional
|
|
3
2
|
|
|
4
3
|
from tweepy.asynchronous import AsyncClient
|
|
5
4
|
|
|
@@ -15,7 +14,7 @@ class TwitterABC(ABC):
|
|
|
15
14
|
use_key = False
|
|
16
15
|
|
|
17
16
|
@abstractmethod
|
|
18
|
-
async def get_client(self) ->
|
|
17
|
+
async def get_client(self) -> AsyncClient | None:
|
|
19
18
|
"""Get a configured Tweepy client.
|
|
20
19
|
|
|
21
20
|
Returns:
|
|
@@ -25,7 +24,7 @@ class TwitterABC(ABC):
|
|
|
25
24
|
|
|
26
25
|
@property
|
|
27
26
|
@abstractmethod
|
|
28
|
-
def self_id(self) ->
|
|
27
|
+
def self_id(self) -> str | None:
|
|
29
28
|
"""Get the Twitter user ID.
|
|
30
29
|
|
|
31
30
|
Returns:
|
|
@@ -35,7 +34,7 @@ class TwitterABC(ABC):
|
|
|
35
34
|
|
|
36
35
|
@property
|
|
37
36
|
@abstractmethod
|
|
38
|
-
def self_username(self) ->
|
|
37
|
+
def self_username(self) -> str | None:
|
|
39
38
|
"""Get the Twitter username.
|
|
40
39
|
|
|
41
40
|
Returns:
|
|
@@ -45,7 +44,7 @@ class TwitterABC(ABC):
|
|
|
45
44
|
|
|
46
45
|
@property
|
|
47
46
|
@abstractmethod
|
|
48
|
-
def self_name(self) ->
|
|
47
|
+
def self_name(self) -> str | None:
|
|
49
48
|
"""Get the Twitter display name.
|
|
50
49
|
|
|
51
50
|
Returns:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from intentkit.clients.cdp import
|
|
1
|
+
from intentkit.clients.cdp import get_cdp_client, get_evm_account, get_wallet_provider
|
|
2
2
|
from intentkit.clients.twitter import (
|
|
3
3
|
TwitterClient,
|
|
4
4
|
TwitterClientConfig,
|
|
@@ -10,7 +10,8 @@ __all__ = [
|
|
|
10
10
|
"TwitterClient",
|
|
11
11
|
"TwitterClientConfig",
|
|
12
12
|
"get_twitter_client",
|
|
13
|
-
"
|
|
13
|
+
"get_evm_account",
|
|
14
|
+
"get_cdp_client",
|
|
14
15
|
"get_wallet_provider",
|
|
15
16
|
"get_web3_client",
|
|
16
17
|
]
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import logging
|
|
3
|
+
|
|
4
|
+
from cdp import CdpClient, EvmServerAccount # noqa: E402
|
|
5
|
+
from coinbase_agentkit import ( # noqa: E402
|
|
6
|
+
CdpEvmWalletProvider,
|
|
7
|
+
CdpEvmWalletProviderConfig,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
from intentkit.config.config import config
|
|
11
|
+
from intentkit.models.agent import Agent, AgentTable # noqa: E402
|
|
12
|
+
from intentkit.models.agent_data import AgentData
|
|
13
|
+
from intentkit.models.db import get_session
|
|
14
|
+
from intentkit.utils.error import IntentKitAPIError # noqa: E402
|
|
15
|
+
|
|
16
|
+
_wallet_providers: dict[str, tuple[str, str, CdpEvmWalletProvider]] = {}
|
|
17
|
+
_cdp_client: CdpClient | None = None
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def get_cdp_client() -> CdpClient:
|
|
23
|
+
global _cdp_client
|
|
24
|
+
if _cdp_client:
|
|
25
|
+
return _cdp_client
|
|
26
|
+
|
|
27
|
+
# Get credentials from global configuration
|
|
28
|
+
api_key_id = config.cdp_api_key_id
|
|
29
|
+
api_key_secret = config.cdp_api_key_secret
|
|
30
|
+
wallet_secret = config.cdp_wallet_secret
|
|
31
|
+
|
|
32
|
+
_cdp_client = CdpClient(
|
|
33
|
+
api_key_id=api_key_id,
|
|
34
|
+
api_key_secret=api_key_secret,
|
|
35
|
+
wallet_secret=wallet_secret,
|
|
36
|
+
)
|
|
37
|
+
return _cdp_client
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _assert_cdp_wallet_provider(agent: Agent) -> None:
|
|
41
|
+
if agent.wallet_provider != "cdp":
|
|
42
|
+
raise IntentKitAPIError(
|
|
43
|
+
400,
|
|
44
|
+
"BadWalletProvider",
|
|
45
|
+
"Your agent wallet provider is not cdp but you selected a skill that requires a cdp wallet.",
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
async def _ensure_evm_account(
|
|
50
|
+
agent: Agent, agent_data: AgentData | None = None
|
|
51
|
+
) -> tuple[EvmServerAccount, AgentData]:
|
|
52
|
+
cdp_client = get_cdp_client()
|
|
53
|
+
agent_data = agent_data or await AgentData.get(agent.id)
|
|
54
|
+
address = agent_data.evm_wallet_address
|
|
55
|
+
account: EvmServerAccount | None = None
|
|
56
|
+
|
|
57
|
+
if not address:
|
|
58
|
+
logger.info("Creating new wallet...")
|
|
59
|
+
account = await cdp_client.evm.create_account(
|
|
60
|
+
name=agent.id,
|
|
61
|
+
)
|
|
62
|
+
address = account.address
|
|
63
|
+
logger.info("Created new wallet: %s", address)
|
|
64
|
+
|
|
65
|
+
agent_data.evm_wallet_address = address
|
|
66
|
+
await agent_data.save()
|
|
67
|
+
if not agent.slug:
|
|
68
|
+
async with get_session() as db:
|
|
69
|
+
db_agent = await db.get(AgentTable, agent.id)
|
|
70
|
+
if db_agent and not db_agent.slug:
|
|
71
|
+
db_agent.slug = agent_data.evm_wallet_address
|
|
72
|
+
await db.commit()
|
|
73
|
+
|
|
74
|
+
if account is None:
|
|
75
|
+
account = await cdp_client.evm.get_account(address=address)
|
|
76
|
+
|
|
77
|
+
return account, agent_data
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
async def get_evm_account(agent: Agent) -> EvmServerAccount:
|
|
81
|
+
_assert_cdp_wallet_provider(agent)
|
|
82
|
+
account, _ = await _ensure_evm_account(agent)
|
|
83
|
+
return account
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
async def get_wallet_provider(agent: Agent) -> CdpEvmWalletProvider:
|
|
87
|
+
_assert_cdp_wallet_provider(agent)
|
|
88
|
+
if not agent.network_id:
|
|
89
|
+
raise IntentKitAPIError(
|
|
90
|
+
400,
|
|
91
|
+
"BadNetworkID",
|
|
92
|
+
"Your agent network ID is not set. Please set it in the agent config.",
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
agent_data = await AgentData.get(agent.id)
|
|
96
|
+
address = agent_data.evm_wallet_address
|
|
97
|
+
|
|
98
|
+
cache_entry = _wallet_providers.get(agent.id)
|
|
99
|
+
if cache_entry:
|
|
100
|
+
cached_network_id, cached_address, provider = cache_entry
|
|
101
|
+
if cached_network_id == agent.network_id:
|
|
102
|
+
if not address:
|
|
103
|
+
address = cached_address or provider.get_address()
|
|
104
|
+
if cached_address == address:
|
|
105
|
+
return provider
|
|
106
|
+
|
|
107
|
+
account, agent_data = await _ensure_evm_account(agent, agent_data)
|
|
108
|
+
address = account.address
|
|
109
|
+
|
|
110
|
+
# Get credentials from global config
|
|
111
|
+
api_key_id = config.cdp_api_key_id
|
|
112
|
+
api_key_secret = config.cdp_api_key_secret
|
|
113
|
+
wallet_secret = config.cdp_wallet_secret
|
|
114
|
+
|
|
115
|
+
network_id = agent.network_id
|
|
116
|
+
|
|
117
|
+
wallet_provider_config = CdpEvmWalletProviderConfig(
|
|
118
|
+
api_key_id=api_key_id,
|
|
119
|
+
api_key_secret=api_key_secret,
|
|
120
|
+
network_id=network_id,
|
|
121
|
+
address=address,
|
|
122
|
+
wallet_secret=wallet_secret,
|
|
123
|
+
)
|
|
124
|
+
wallet_provider = await asyncio.to_thread(
|
|
125
|
+
CdpEvmWalletProvider, wallet_provider_config
|
|
126
|
+
)
|
|
127
|
+
_wallet_providers[agent.id] = (network_id, address, wallet_provider)
|
|
128
|
+
return wallet_provider
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import os
|
|
3
3
|
import tempfile
|
|
4
|
-
from datetime import datetime, timedelta
|
|
5
|
-
from typing import Any,
|
|
4
|
+
from datetime import UTC, datetime, timedelta
|
|
5
|
+
from typing import Any, NotRequired, TypedDict
|
|
6
6
|
from urllib.parse import urlencode
|
|
7
7
|
|
|
8
8
|
import httpx
|
|
@@ -11,15 +11,14 @@ from requests.auth import HTTPBasicAuth
|
|
|
11
11
|
from requests_oauthlib import OAuth2Session
|
|
12
12
|
from tweepy.asynchronous import AsyncClient
|
|
13
13
|
|
|
14
|
-
from intentkit.abstracts.skill import SkillStoreABC
|
|
15
14
|
from intentkit.abstracts.twitter import TwitterABC
|
|
16
15
|
from intentkit.models.agent_data import AgentData
|
|
17
16
|
from intentkit.models.redis import get_redis
|
|
18
17
|
|
|
19
18
|
logger = logging.getLogger(__name__)
|
|
20
19
|
|
|
21
|
-
_clients_linked:
|
|
22
|
-
_clients_self_key:
|
|
20
|
+
_clients_linked: dict[str, "TwitterClient"] = {}
|
|
21
|
+
_clients_self_key: dict[str, "TwitterClient"] = {}
|
|
23
22
|
|
|
24
23
|
_VERIFIER_KEY = "intentkit:twitter:code_verifier"
|
|
25
24
|
_CHALLENGE_KEY = "intentkit:twitter:code_challenge"
|
|
@@ -30,7 +29,7 @@ class TwitterMedia(BaseModel):
|
|
|
30
29
|
|
|
31
30
|
media_key: str
|
|
32
31
|
type: str
|
|
33
|
-
url:
|
|
32
|
+
url: str | None = None
|
|
34
33
|
|
|
35
34
|
|
|
36
35
|
class TwitterUser(BaseModel):
|
|
@@ -59,10 +58,10 @@ class Tweet(BaseModel):
|
|
|
59
58
|
id: str
|
|
60
59
|
text: str
|
|
61
60
|
author_id: str
|
|
62
|
-
author:
|
|
61
|
+
author: TwitterUser | None = None
|
|
63
62
|
created_at: datetime
|
|
64
|
-
referenced_tweets:
|
|
65
|
-
attachments:
|
|
63
|
+
referenced_tweets: list["Tweet"] | None = None
|
|
64
|
+
attachments: list[TwitterMedia] | None = None
|
|
66
65
|
|
|
67
66
|
|
|
68
67
|
class TwitterClientConfig(TypedDict):
|
|
@@ -80,33 +79,44 @@ class TwitterClient(TwitterABC):
|
|
|
80
79
|
|
|
81
80
|
Args:
|
|
82
81
|
agent_id: The ID of the agent
|
|
83
|
-
skill_store: The skill store for retrieving data
|
|
84
82
|
config: Configuration dictionary that may contain API keys
|
|
85
83
|
"""
|
|
86
84
|
|
|
87
|
-
def __init__(self, agent_id: str,
|
|
85
|
+
def __init__(self, agent_id: str, config: dict) -> None:
|
|
88
86
|
"""Initialize the Twitter client.
|
|
89
87
|
|
|
90
88
|
Args:
|
|
91
89
|
agent_id: The ID of the agent
|
|
92
|
-
skill_store: The skill store for retrieving data
|
|
93
90
|
config: Configuration dictionary that may contain API keys
|
|
94
91
|
"""
|
|
95
92
|
self.agent_id = agent_id
|
|
96
|
-
self._client:
|
|
97
|
-
self.
|
|
98
|
-
self._agent_data: Optional[AgentData] = None
|
|
93
|
+
self._client: AsyncClient | None = None
|
|
94
|
+
self._agent_data: AgentData | None = None
|
|
99
95
|
self.use_key = _is_self_key(config)
|
|
100
96
|
self._config = config
|
|
101
97
|
|
|
98
|
+
async def _get_agent_data(self) -> AgentData:
|
|
99
|
+
"""Retrieve cached agent data, loading from the database if needed."""
|
|
100
|
+
|
|
101
|
+
if not self._agent_data:
|
|
102
|
+
self._agent_data = await AgentData.get(self.agent_id)
|
|
103
|
+
return self._agent_data
|
|
104
|
+
|
|
105
|
+
async def _refresh_agent_data(self) -> AgentData:
|
|
106
|
+
"""Reload agent data from the database."""
|
|
107
|
+
|
|
108
|
+
self._agent_data = await AgentData.get(self.agent_id)
|
|
109
|
+
return self._agent_data
|
|
110
|
+
|
|
102
111
|
async def get_client(self) -> AsyncClient:
|
|
103
112
|
"""Get the initialized Twitter client.
|
|
104
113
|
|
|
105
114
|
Returns:
|
|
106
115
|
AsyncClient: The Twitter client if initialized
|
|
107
116
|
"""
|
|
108
|
-
|
|
109
|
-
|
|
117
|
+
|
|
118
|
+
agent_data = await self._get_agent_data()
|
|
119
|
+
|
|
110
120
|
if not self._client:
|
|
111
121
|
# Check if we have API keys in config
|
|
112
122
|
if self.use_key:
|
|
@@ -118,30 +128,26 @@ class TwitterClient(TwitterABC):
|
|
|
118
128
|
return_type=dict,
|
|
119
129
|
)
|
|
120
130
|
# refresh userinfo if needed
|
|
121
|
-
if not
|
|
122
|
-
|
|
123
|
-
< datetime.now(tz=
|
|
131
|
+
if not agent_data.twitter_self_key_refreshed_at or (
|
|
132
|
+
agent_data.twitter_self_key_refreshed_at
|
|
133
|
+
< datetime.now(tz=UTC) - timedelta(days=1)
|
|
124
134
|
):
|
|
125
135
|
me = await self._client.get_me(
|
|
126
136
|
user_auth=self.use_key,
|
|
127
137
|
user_fields="id,username,name,verified",
|
|
128
138
|
)
|
|
129
139
|
if me and "data" in me and "id" in me["data"]:
|
|
130
|
-
await
|
|
140
|
+
await AgentData.patch(
|
|
131
141
|
self.agent_id,
|
|
132
142
|
{
|
|
133
143
|
"twitter_id": me["data"]["id"],
|
|
134
144
|
"twitter_username": me["data"]["username"],
|
|
135
145
|
"twitter_name": me["data"]["name"],
|
|
136
146
|
"twitter_is_verified": me["data"]["verified"],
|
|
137
|
-
"twitter_self_key_refreshed_at": datetime.now(
|
|
138
|
-
tz=timezone.utc
|
|
139
|
-
),
|
|
147
|
+
"twitter_self_key_refreshed_at": datetime.now(tz=UTC),
|
|
140
148
|
},
|
|
141
149
|
)
|
|
142
|
-
|
|
143
|
-
self.agent_id
|
|
144
|
-
)
|
|
150
|
+
agent_data = await self._refresh_agent_data()
|
|
145
151
|
logger.info(
|
|
146
152
|
f"Twitter self key client initialized. "
|
|
147
153
|
f"Use API key: {self.use_key}, "
|
|
@@ -152,43 +158,38 @@ class TwitterClient(TwitterABC):
|
|
|
152
158
|
)
|
|
153
159
|
return self._client
|
|
154
160
|
# Otherwise try to get OAuth2 tokens from agent data
|
|
155
|
-
if not
|
|
161
|
+
if not agent_data.twitter_access_token:
|
|
156
162
|
raise Exception(f"[{self.agent_id}] Twitter access token not found")
|
|
157
|
-
if not
|
|
163
|
+
if not agent_data.twitter_access_token_expires_at:
|
|
158
164
|
raise Exception(
|
|
159
165
|
f"[{self.agent_id}] Twitter access token expiration not found"
|
|
160
166
|
)
|
|
161
|
-
if
|
|
162
|
-
tz=timezone.utc
|
|
163
|
-
):
|
|
167
|
+
if agent_data.twitter_access_token_expires_at <= datetime.now(tz=UTC):
|
|
164
168
|
raise Exception(f"[{self.agent_id}] Twitter access token has expired")
|
|
165
169
|
self._client = AsyncClient(
|
|
166
|
-
bearer_token=
|
|
170
|
+
bearer_token=agent_data.twitter_access_token,
|
|
167
171
|
return_type=dict,
|
|
168
172
|
)
|
|
169
173
|
return self._client
|
|
174
|
+
|
|
170
175
|
if not self.use_key:
|
|
171
176
|
# check if access token has expired
|
|
172
|
-
if
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
self._agent_data = await self._skill_store.get_agent_data(self.agent_id)
|
|
176
|
-
# check again
|
|
177
|
-
if self._agent_data.twitter_access_token_expires_at <= datetime.now(
|
|
178
|
-
tz=timezone.utc
|
|
179
|
-
):
|
|
177
|
+
if agent_data.twitter_access_token_expires_at <= datetime.now(tz=UTC):
|
|
178
|
+
agent_data = await self._refresh_agent_data()
|
|
179
|
+
if agent_data.twitter_access_token_expires_at <= datetime.now(tz=UTC):
|
|
180
180
|
raise Exception(
|
|
181
181
|
f"[{self.agent_id}] Twitter access token has expired"
|
|
182
182
|
)
|
|
183
183
|
self._client = AsyncClient(
|
|
184
|
-
bearer_token=
|
|
184
|
+
bearer_token=agent_data.twitter_access_token,
|
|
185
185
|
return_type=dict,
|
|
186
186
|
)
|
|
187
187
|
return self._client
|
|
188
|
+
|
|
188
189
|
return self._client
|
|
189
190
|
|
|
190
191
|
@property
|
|
191
|
-
def self_id(self) ->
|
|
192
|
+
def self_id(self) -> str | None:
|
|
192
193
|
"""Get the Twitter user ID.
|
|
193
194
|
|
|
194
195
|
Returns:
|
|
@@ -201,7 +202,7 @@ class TwitterClient(TwitterABC):
|
|
|
201
202
|
return self._agent_data.twitter_id
|
|
202
203
|
|
|
203
204
|
@property
|
|
204
|
-
def self_username(self) ->
|
|
205
|
+
def self_username(self) -> str | None:
|
|
205
206
|
"""Get the Twitter username.
|
|
206
207
|
|
|
207
208
|
Returns:
|
|
@@ -214,7 +215,7 @@ class TwitterClient(TwitterABC):
|
|
|
214
215
|
return self._agent_data.twitter_username
|
|
215
216
|
|
|
216
217
|
@property
|
|
217
|
-
def self_name(self) ->
|
|
218
|
+
def self_name(self) -> str | None:
|
|
218
219
|
"""Get the Twitter display name.
|
|
219
220
|
|
|
220
221
|
Returns:
|
|
@@ -227,7 +228,7 @@ class TwitterClient(TwitterABC):
|
|
|
227
228
|
return self._agent_data.twitter_name
|
|
228
229
|
|
|
229
230
|
@property
|
|
230
|
-
def self_is_verified(self) ->
|
|
231
|
+
def self_is_verified(self) -> bool | None:
|
|
231
232
|
"""Get the Twitter account verification status.
|
|
232
233
|
|
|
233
234
|
Returns:
|
|
@@ -239,14 +240,14 @@ class TwitterClient(TwitterABC):
|
|
|
239
240
|
return None
|
|
240
241
|
return self._agent_data.twitter_is_verified
|
|
241
242
|
|
|
242
|
-
def process_tweets_response(self, response:
|
|
243
|
+
def process_tweets_response(self, response: dict[str, Any]) -> list[Tweet]:
|
|
243
244
|
"""Process Twitter API response and convert it to a list of Tweet objects.
|
|
244
245
|
|
|
245
246
|
Args:
|
|
246
247
|
response: Raw Twitter API response containing tweets data and includes.
|
|
247
248
|
|
|
248
249
|
Returns:
|
|
249
|
-
|
|
250
|
+
list[Tweet]: List of processed Tweet objects.
|
|
250
251
|
"""
|
|
251
252
|
result = []
|
|
252
253
|
if not response.get("data"):
|
|
@@ -338,7 +339,7 @@ class TwitterClient(TwitterABC):
|
|
|
338
339
|
|
|
339
340
|
return result
|
|
340
341
|
|
|
341
|
-
async def upload_media(self, agent_id: str, image_url: str) ->
|
|
342
|
+
async def upload_media(self, agent_id: str, image_url: str) -> list[str]:
|
|
342
343
|
"""Upload media to Twitter and return the media IDs.
|
|
343
344
|
|
|
344
345
|
Args:
|
|
@@ -346,13 +347,13 @@ class TwitterClient(TwitterABC):
|
|
|
346
347
|
image_url: The URL of the image to upload.
|
|
347
348
|
|
|
348
349
|
Returns:
|
|
349
|
-
|
|
350
|
+
list[str]: A list of media IDs for the uploaded media.
|
|
350
351
|
|
|
351
352
|
Raises:
|
|
352
353
|
ValueError: If there's an error uploading the media.
|
|
353
354
|
"""
|
|
354
355
|
# Get agent data to access the token
|
|
355
|
-
agent_data = await
|
|
356
|
+
agent_data = await AgentData.get(agent_id)
|
|
356
357
|
if not agent_data.twitter_access_token:
|
|
357
358
|
raise ValueError("Only linked X account can post media")
|
|
358
359
|
|
|
@@ -419,19 +420,17 @@ class TwitterClient(TwitterABC):
|
|
|
419
420
|
return media_ids
|
|
420
421
|
|
|
421
422
|
|
|
422
|
-
def _is_self_key(config:
|
|
423
|
+
def _is_self_key(config: dict) -> bool:
|
|
423
424
|
return config.get("api_key_provider") == "agent_owner"
|
|
424
425
|
|
|
425
426
|
|
|
426
|
-
def get_twitter_client(
|
|
427
|
-
agent_id: str, skill_store: SkillStoreABC, config: Dict
|
|
428
|
-
) -> "TwitterClient":
|
|
427
|
+
def get_twitter_client(agent_id: str, config: dict) -> "TwitterClient":
|
|
429
428
|
if _is_self_key(config):
|
|
430
429
|
if agent_id not in _clients_self_key:
|
|
431
|
-
_clients_self_key[agent_id] = TwitterClient(agent_id,
|
|
430
|
+
_clients_self_key[agent_id] = TwitterClient(agent_id, config)
|
|
432
431
|
return _clients_self_key[agent_id]
|
|
433
432
|
if agent_id not in _clients_linked:
|
|
434
|
-
_clients_linked[agent_id] = TwitterClient(agent_id,
|
|
433
|
+
_clients_linked[agent_id] = TwitterClient(agent_id, config)
|
|
435
434
|
return _clients_linked[agent_id]
|
|
436
435
|
|
|
437
436
|
|