intentkit 0.12.1.dev1__tar.gz → 0.12.2__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.12.1.dev1 → intentkit-0.12.2}/PKG-INFO +1 -1
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/__init__.py +1 -1
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/graph.py +1 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/config/config.py +3 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/__init__.py +2 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/expense.py +54 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/engine.py +2 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/prompt.py +5 -3
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/__init__.py +10 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/create_activity.py +38 -13
- intentkit-0.12.2/intentkit/core/system_skills/read_webpage.py +183 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent_activity.py +10 -1
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/llm_picker.py +29 -0
- intentkit-0.12.2/intentkit/utils/opengraph.py +108 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/pyproject.toml +1 -1
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/.gitignore +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/LICENSE +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/.dockerignore +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/LICENSE +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/MANIFEST.in +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/agent.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/api.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/engine.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/skill.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/twitter.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/wallet.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/clients/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/clients/s3.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/clients/twitter.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/config/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/config/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/config/db.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/config/db_mig.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/config/redis.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/account_checking.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/analytics.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/constants.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/management.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/notifications.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/public_info.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/queries.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/wallet.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent_activity.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent_post.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/api.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/asset.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/autonomous.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/avatar.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/budget.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/chat.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/cleanup.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/client.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/adjustment.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/list_events.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/recharge.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/refill.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/reward.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/withdraw.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/draft.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/draft_chat.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/engine.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/service.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/add_autonomous_task.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/delete_autonomous_task.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/draft.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/edit_autonomous_task.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/list_autonomous_tasks.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/llm.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/public_info.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/read_agent_api_key.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/regenerate_agent_api_key.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/memory.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/middleware.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/scheduler.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/statistics.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/call_agent.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/create_post.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/get_post.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/recent_activities.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/recent_posts.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/update_memory.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/template.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/user.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/agent.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/autonomous.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/core.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/db.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/public.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/public_info.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/response.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/user_input.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent_data.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent_post.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/app_setting.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/chat.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/credit/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/credit/account.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/credit/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/credit/event.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/credit/price.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/credit/transaction.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/draft.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/llm.csv +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/llm.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/skill.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/team.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/template.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/user.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/user_data.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/x402_order.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/aixbt/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/aixbt/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/aixbt/aixbt.jpg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/aixbt/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/aixbt/projects.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/aixbt/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/allora/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/allora/allora.jpeg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/allora/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/allora/price.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/allora/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/basename/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/basename/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/basename/basename.svg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/basename/constants.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/basename/register.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/basename/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/carv.webp +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/fetch_news.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/onchain_query.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/token_info_and_price.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/casino.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/deck_draw.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/deck_shuffle.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/dice_roll.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/utils.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cdp/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cdp/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cdp/cdp.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cdp/get_balance.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cdp/get_wallet_details.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cdp/native_transfer.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cdp/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/chainlist/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/chainlist/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/chainlist/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/chainlist/chain_lookup.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/chainlist/chainlist.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/chainlist/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/common/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/common/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/common/common.jpg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/common/current_time.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/common/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/constants.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/cookiefun.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/get_account_details.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/get_account_feed.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/get_account_smart_followers.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/get_sectors.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/search_accounts.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/api.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/cryptocompare.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/fetch_news.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/fetch_price.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/fetch_top_exchanges.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/fetch_top_market_cap.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/fetch_top_volume.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/fetch_trading_signals.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptopanic/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptopanic/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptopanic/cryptopanic.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptopanic/fetch_crypto_news.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptopanic/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dapplooker/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dapplooker/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dapplooker/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dapplooker/dapplooker.jpg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dapplooker/dapplooker_token_data.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dapplooker/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/api.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/fetch_block.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/fetch_current_prices.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/fetch_first_price.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/fetch_historical_prices.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/fetch_price_chart.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/fetch_price_percentage.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/config/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/config/chains.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/defillama.jpeg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/fees/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/fees/fetch_fees_overview.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/stablecoins/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tests/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tests/api_integration.test.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tests/api_unit.test.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tvl/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tvl/fetch_chains.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tvl/fetch_historical_tvl.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tvl/fetch_protocol.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tvl/fetch_protocols.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/volumes/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/volumes/fetch_dex_overview.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/volumes/fetch_dex_summary.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/volumes/fetch_options_overview.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/yields/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/yields/fetch_pool_chart.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/yields/fetch_pools.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/dexscreener.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/get_pair_info.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/get_token_pairs.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/get_tokens_info.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/model/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/model/search_token_response.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/search_token.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/utils.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dune_analytics/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dune_analytics/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dune_analytics/dune.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dune_analytics/fetch_kol_buys.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dune_analytics/fetch_nation_metrics.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dune_analytics/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/elfa.jpg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/mention.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/stats.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/tokens.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/utils.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/abi/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/abi/approval.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/abi/erc20.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/abi/route.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/best_yield.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/enso.jpg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/networks.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/prices.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/route.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/tokens.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/wallet.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/constants.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/erc20.svg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/get_balance.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/get_token_address.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/transfer.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/utils.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/constants.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/erc721.svg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/get_balance.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/mint.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/transfer.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/clear.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/crawl.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/firecrawl.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/query.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/scrape.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/utils.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/github/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/github/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/github/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/github/github.jpg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/github/github_search.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/github/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/heurist.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/image_generation_animagine_xl.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/image_generation_arthemy_comics.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/image_generation_arthemy_real.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/image_generation_braindance.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/image_generation_flux_1_dev.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/image_generation_sdxl.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/get.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/http.svg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/post.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/put.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/jupiter/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/jupiter/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/jupiter/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/jupiter/jupiter.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/jupiter/price.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/jupiter/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/jupiter/swap.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/lifi.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/token_execute.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/token_quote.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/utils.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/api.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/fetch_chain_portfolio.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/fetch_nft_portfolio.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/fetch_solana_portfolio.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/fetch_wallet_portfolio.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/moralis.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/morpho/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/morpho/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/morpho/constants.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/morpho/deposit.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/morpho/morpho.svg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/morpho/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/morpho/withdraw.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/nation/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/nation/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/nation/nation.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/nation/nft_check.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/nation/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/onchain.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/dalle_image_generation.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/gpt_avatar_generator.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/gpt_image_generation.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/gpt_image_mini_generator.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/gpt_image_to_image.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/image_to_text.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/openai.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/add_liquidity.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/constants.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/get_positions.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/pancakeswap.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/quote.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/remove_liquidity.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/swap.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/utils.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/constants.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/moralis.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/token_balances.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_approvals.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_defi_positions.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_history.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_net_worth.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_nfts.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_profitability.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_profitability_summary.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_stats.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_swaps.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pyth/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pyth/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pyth/fetch_price.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pyth/fetch_price_feed.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pyth/pyth.svg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pyth/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/skills.toml +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/get_channel.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/get_message.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/schedule_message.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/send_message.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/slack.jpg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/delete_data.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/fetch_data.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/insert_data.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/invoke_function.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/supabase.svg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/update_data.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/upsert_data.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/constants.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/create_flow.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/delete_flow.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/superfluid.svg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/update_flow.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/tavily/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/tavily/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/tavily/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/tavily/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/tavily/tavily.jpg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/tavily/tavily_extract.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/tavily/tavily_search.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/constants.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/erc20_transfers.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/moralis.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/token_analytics.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/token_price.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/token_search.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/follow_user.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/get_mentions.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/get_timeline.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/get_user_by_username.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/get_user_tweets.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/like_tweet.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/post_tweet.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/reply_tweet.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/retweet.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/search_tweets.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/twitter.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/ui/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/ui/ask_user.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/ui/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/ui/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/ui/show_card.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/ui/ui.svg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/unrealspeech/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/unrealspeech/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/unrealspeech/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/unrealspeech/text_to_speech.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/unrealspeech/unrealspeech.jpg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_audio/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_audio/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_audio/input.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_audio/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_audio/venice_audio.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_audio/venice_logo.jpg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/api.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/config.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_enhance/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_enhance/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_enhance/image_enhance.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_enhance/image_enhance_base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_enhance/image_enhance_input.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_input.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_upscale/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_upscale/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_upscale/image_upscale.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_upscale/image_upscale_base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_upscale/image_upscale_input.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_vision/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_vision/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_vision/image_vision.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_vision/image_vision_base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_vision/image_vision_input.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/utils.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/venice_image.jpg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/document_indexer.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/langchain.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/scrape_and_index.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/utils.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/website_indexer.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/weth/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/weth/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/weth/constants.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/weth/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/weth/unwrap_eth.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/weth/weth.svg +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/weth/wrap_eth.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/check_price.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/get_orders.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/http_request.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/httpx_compat.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/pay.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/x402.webp +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/README.md +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/base.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/price.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/schema.json +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/swap.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/transfer.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/xmtp.png +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/alert.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/alert_handler.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/chain.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/ens.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/error.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/logging.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/random.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/s3_setup.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/schema.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/slack_alert.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/telegram_alert.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/tx.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/__init__.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/cdp.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/evm_wallet.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/native.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/privy.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/privy_client.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/privy_nonce.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/privy_safe.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/privy_signer.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/privy_types.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/privy_utils.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/signer.py +0 -0
- {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/web3.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: intentkit
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.2
|
|
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
|
|
@@ -204,6 +204,9 @@ class Config:
|
|
|
204
204
|
self.tavily_api_key: str | None = self.load("TAVILY_API_KEY")
|
|
205
205
|
self.cookiefun_api_key: str | None = self.load("COOKIEFUN_API_KEY")
|
|
206
206
|
self.firecrawl_api_key: str | None = self.load("FIRECRAWL_API_KEY")
|
|
207
|
+
# Cloudflare Browser Rendering
|
|
208
|
+
self.cloudflare_account_id: str | None = self.load("CLOUDFLARE_ACCOUNT_ID")
|
|
209
|
+
self.cloudflare_api_token: str | None = self.load("CLOUDFLARE_API_TOKEN")
|
|
207
210
|
# Sentry
|
|
208
211
|
self.sentry_dsn: str | None = self.load("SENTRY_DSN")
|
|
209
212
|
self.sentry_sample_rate: float = self.load_float("SENTRY_SAMPLE_RATE", 0.1)
|
|
@@ -26,6 +26,7 @@ from .base import (
|
|
|
26
26
|
from .expense import (
|
|
27
27
|
expense_message,
|
|
28
28
|
expense_skill,
|
|
29
|
+
expense_skill_internal_llm,
|
|
29
30
|
expense_summarize,
|
|
30
31
|
skill_cost,
|
|
31
32
|
)
|
|
@@ -66,6 +67,7 @@ __all__ = [
|
|
|
66
67
|
"adjustment",
|
|
67
68
|
"expense_message",
|
|
68
69
|
"expense_skill",
|
|
70
|
+
"expense_skill_internal_llm",
|
|
69
71
|
"expense_summarize",
|
|
70
72
|
"fetch_credit_event_by_id",
|
|
71
73
|
"fetch_credit_event_by_upstream_tx_id",
|
|
@@ -28,6 +28,7 @@ from intentkit.models.credit import (
|
|
|
28
28
|
TransactionType,
|
|
29
29
|
UpstreamType,
|
|
30
30
|
)
|
|
31
|
+
from intentkit.models.llm import LLMModelInfo
|
|
31
32
|
|
|
32
33
|
from .base import FOURPLACES, SkillCost
|
|
33
34
|
|
|
@@ -1030,3 +1031,56 @@ async def expense_summarize(
|
|
|
1030
1031
|
|
|
1031
1032
|
# 6. Return credit event model
|
|
1032
1033
|
return CreditEvent.model_validate(event)
|
|
1034
|
+
|
|
1035
|
+
|
|
1036
|
+
async def expense_skill_internal_llm(
|
|
1037
|
+
user_id: str,
|
|
1038
|
+
agent: Agent,
|
|
1039
|
+
skill_name: str,
|
|
1040
|
+
skill_call_id: str,
|
|
1041
|
+
start_message_id: str,
|
|
1042
|
+
model_id: str,
|
|
1043
|
+
input_tokens: int,
|
|
1044
|
+
output_tokens: int,
|
|
1045
|
+
cached_input_tokens: int = 0,
|
|
1046
|
+
) -> None:
|
|
1047
|
+
"""
|
|
1048
|
+
Bill for an LLM call made internally within a skill execution.
|
|
1049
|
+
|
|
1050
|
+
This is a convenience function for skills that need to call an LLM
|
|
1051
|
+
(e.g. for content cleaning) and bill the user for the token cost.
|
|
1052
|
+
It calculates the cost from token usage and creates a SKILL_CALL credit event.
|
|
1053
|
+
|
|
1054
|
+
Args:
|
|
1055
|
+
user_id: ID of the user to charge
|
|
1056
|
+
agent: Agent instance
|
|
1057
|
+
skill_name: Name of the skill making the LLM call
|
|
1058
|
+
skill_call_id: ID of the tool call (from LangChain runtime)
|
|
1059
|
+
start_message_id: ID of the starting user message
|
|
1060
|
+
model_id: ID of the LLM model used
|
|
1061
|
+
input_tokens: Number of input tokens used
|
|
1062
|
+
output_tokens: Number of output tokens used
|
|
1063
|
+
cached_input_tokens: Number of cached input tokens used
|
|
1064
|
+
"""
|
|
1065
|
+
from intentkit.config.db import get_session
|
|
1066
|
+
|
|
1067
|
+
model_info = await LLMModelInfo.get(model_id)
|
|
1068
|
+
llm_cost = await model_info.calculate_cost(
|
|
1069
|
+
input_tokens, output_tokens, cached_input_tokens
|
|
1070
|
+
)
|
|
1071
|
+
|
|
1072
|
+
if llm_cost <= Decimal("0"):
|
|
1073
|
+
return
|
|
1074
|
+
|
|
1075
|
+
async with get_session() as session:
|
|
1076
|
+
await expense_skill(
|
|
1077
|
+
session,
|
|
1078
|
+
user_id,
|
|
1079
|
+
"", # no message_id available from within skill
|
|
1080
|
+
start_message_id,
|
|
1081
|
+
skill_call_id,
|
|
1082
|
+
skill_name,
|
|
1083
|
+
llm_cost,
|
|
1084
|
+
agent,
|
|
1085
|
+
)
|
|
1086
|
+
await session.commit()
|
|
@@ -214,6 +214,7 @@ async def build_executor(
|
|
|
214
214
|
enable_post=enable_post,
|
|
215
215
|
enable_long_term_memory=agent.enable_long_term_memory or False,
|
|
216
216
|
enable_sub_agents=bool(agent.sub_agents),
|
|
217
|
+
search_internet=agent.search_internet,
|
|
217
218
|
)
|
|
218
219
|
)
|
|
219
220
|
|
|
@@ -607,6 +608,7 @@ async def stream_agent_raw(
|
|
|
607
608
|
entrypoint=user_message.author_type,
|
|
608
609
|
is_private=is_private,
|
|
609
610
|
payer=payer if payment_enabled else None,
|
|
611
|
+
start_message_id=user_message.id,
|
|
610
612
|
)
|
|
611
613
|
|
|
612
614
|
# run
|
|
@@ -59,7 +59,7 @@ def _build_system_skills_section(agent: Agent, context: AgentContext) -> str:
|
|
|
59
59
|
)
|
|
60
60
|
if enable_activity:
|
|
61
61
|
lines.append(
|
|
62
|
-
"- create_activity:
|
|
62
|
+
"- create_activity: Publish an activity to your public timeline. ONLY use when user explicitly requests it.\n"
|
|
63
63
|
"- recent_activities: Retrieve your recent activities to maintain context.\n"
|
|
64
64
|
)
|
|
65
65
|
if agent.enable_long_term_memory:
|
|
@@ -74,7 +74,9 @@ def _build_system_skills_section(agent: Agent, context: AgentContext) -> str:
|
|
|
74
74
|
cautions.append("create_activity")
|
|
75
75
|
if cautions:
|
|
76
76
|
lines.append(
|
|
77
|
-
f"\
|
|
77
|
+
f"\nCRITICAL RULE: NEVER use {' or '.join(cautions)} unless the user EXPLICITLY asks you to create/publish. "
|
|
78
|
+
f"Do NOT use them proactively, even to log, summarize, or report what you did. "
|
|
79
|
+
f"Violation of this rule is a serious error.\n\n"
|
|
78
80
|
)
|
|
79
81
|
else:
|
|
80
82
|
lines.append("\n")
|
|
@@ -319,7 +321,7 @@ def _build_autonomous_task_prompt(agent: Agent, context: AgentContext) -> str:
|
|
|
319
321
|
task_info += (
|
|
320
322
|
". In autonomous task, you cannot ask the user for clarification or input. "
|
|
321
323
|
"You must make all decisions on your own. "
|
|
322
|
-
"If an error prevents the task from proceeding, use create_activity to report the
|
|
324
|
+
"If an error prevents the task from proceeding, you may use create_activity to report the error only"
|
|
323
325
|
)
|
|
324
326
|
|
|
325
327
|
return f"{task_info}. "
|
|
@@ -9,6 +9,7 @@ from intentkit.core.system_skills.call_agent import CallAgentSkill
|
|
|
9
9
|
from intentkit.core.system_skills.create_activity import CreateActivitySkill
|
|
10
10
|
from intentkit.core.system_skills.create_post import CreatePostSkill
|
|
11
11
|
from intentkit.core.system_skills.get_post import GetPostSkill
|
|
12
|
+
from intentkit.core.system_skills.read_webpage import ReadWebpageSkill
|
|
12
13
|
from intentkit.core.system_skills.recent_activities import RecentActivitiesSkill
|
|
13
14
|
from intentkit.core.system_skills.recent_posts import RecentPostsSkill
|
|
14
15
|
from intentkit.core.system_skills.update_memory import UpdateMemorySkill
|
|
@@ -19,6 +20,7 @@ __all__ = [
|
|
|
19
20
|
"CreateActivitySkill",
|
|
20
21
|
"CreatePostSkill",
|
|
21
22
|
"GetPostSkill",
|
|
23
|
+
"ReadWebpageSkill",
|
|
22
24
|
"RecentActivitiesSkill",
|
|
23
25
|
"RecentPostsSkill",
|
|
24
26
|
"UpdateMemorySkill",
|
|
@@ -31,6 +33,7 @@ _recent_activities = RecentActivitiesSkill()
|
|
|
31
33
|
_create_post = CreatePostSkill()
|
|
32
34
|
_get_post = GetPostSkill()
|
|
33
35
|
_recent_posts = RecentPostsSkill()
|
|
36
|
+
_read_webpage = ReadWebpageSkill()
|
|
34
37
|
_update_memory = UpdateMemorySkill()
|
|
35
38
|
|
|
36
39
|
|
|
@@ -39,6 +42,7 @@ def get_system_skills(
|
|
|
39
42
|
enable_post: bool = True,
|
|
40
43
|
enable_long_term_memory: bool = False,
|
|
41
44
|
enable_sub_agents: bool = False,
|
|
45
|
+
search_internet: bool = True,
|
|
42
46
|
) -> list[SystemSkill]:
|
|
43
47
|
"""Get system skills instances filtered by flags.
|
|
44
48
|
|
|
@@ -47,6 +51,7 @@ def get_system_skills(
|
|
|
47
51
|
enable_post: Whether to include post skills. Defaults to True.
|
|
48
52
|
enable_long_term_memory: Whether to include memory skill. Defaults to False.
|
|
49
53
|
enable_sub_agents: Whether to include call_agent skill. Defaults to False.
|
|
54
|
+
search_internet: Whether to include read_webpage skill. Defaults to True.
|
|
50
55
|
"""
|
|
51
56
|
skills: list[SystemSkill] = []
|
|
52
57
|
if enable_sub_agents:
|
|
@@ -60,4 +65,9 @@ def get_system_skills(
|
|
|
60
65
|
skills.append(_recent_posts)
|
|
61
66
|
if enable_long_term_memory:
|
|
62
67
|
skills.append(_update_memory)
|
|
68
|
+
if search_internet:
|
|
69
|
+
from intentkit.config.config import config
|
|
70
|
+
|
|
71
|
+
if config.cloudflare_account_id and config.cloudflare_api_token:
|
|
72
|
+
skills.append(_read_webpage)
|
|
63
73
|
return skills
|
|
@@ -4,32 +4,50 @@ from typing import override
|
|
|
4
4
|
|
|
5
5
|
from langchain_core.tools import ArgsSchema
|
|
6
6
|
from langchain_core.tools.base import ToolException
|
|
7
|
-
from pydantic import BaseModel, Field
|
|
7
|
+
from pydantic import BaseModel, Field, field_validator
|
|
8
8
|
|
|
9
9
|
from intentkit.core.agent import get_agent
|
|
10
10
|
from intentkit.core.agent_activity import create_agent_activity
|
|
11
11
|
from intentkit.core.system_skills.base import SystemSkill
|
|
12
12
|
from intentkit.models.agent_activity import AgentActivityCreate
|
|
13
|
+
from intentkit.utils.opengraph import fetch_link_meta
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
class CreateActivityInput(BaseModel):
|
|
16
17
|
"""Input schema for creating an agent activity."""
|
|
17
18
|
|
|
18
|
-
text: str = Field(..., description="Activity content")
|
|
19
|
-
images: list[str] | None = Field(
|
|
19
|
+
text: str = Field(..., description="Activity content, plain text, max 280 bytes")
|
|
20
|
+
images: list[str] | None = Field(
|
|
21
|
+
default=None, max_length=4, description="Image URLs"
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
@field_validator("text")
|
|
25
|
+
@classmethod
|
|
26
|
+
def text_max_280_bytes(cls, v: str) -> str:
|
|
27
|
+
if len(v.encode("utf-8")) > 280:
|
|
28
|
+
raise ValueError("text must be at most 280 bytes")
|
|
29
|
+
return v
|
|
30
|
+
|
|
20
31
|
video: str | None = Field(default=None, description="Video URL")
|
|
21
|
-
|
|
32
|
+
link: str | None = Field(default=None, description="URL to share")
|
|
22
33
|
|
|
34
|
+
@field_validator("link")
|
|
35
|
+
@classmethod
|
|
36
|
+
def link_must_be_http(cls, v: str | None) -> str | None:
|
|
37
|
+
if v is not None and not v.startswith(("http://", "https://")):
|
|
38
|
+
raise ValueError("link must start with http:// or https://")
|
|
39
|
+
return v
|
|
23
40
|
|
|
24
|
-
class CreateActivitySkill(SystemSkill):
|
|
25
|
-
"""Skill for creating a new agent activity.
|
|
26
41
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"""
|
|
42
|
+
class CreateActivitySkill(SystemSkill):
|
|
43
|
+
"""Skill for creating a new agent activity."""
|
|
30
44
|
|
|
31
45
|
name: str = "create_activity"
|
|
32
|
-
description: str =
|
|
46
|
+
description: str = (
|
|
47
|
+
"Publish an activity to your public timeline. "
|
|
48
|
+
"IMPORTANT: Only use this skill when the user EXPLICITLY asks you to create, publish, or post an activity. "
|
|
49
|
+
"Do NOT call this on your own initiative, even to log or summarize what you did."
|
|
50
|
+
)
|
|
33
51
|
args_schema: ArgsSchema | None = CreateActivityInput
|
|
34
52
|
|
|
35
53
|
@override
|
|
@@ -38,7 +56,7 @@ class CreateActivitySkill(SystemSkill):
|
|
|
38
56
|
text: str,
|
|
39
57
|
images: list[str] | None = None,
|
|
40
58
|
video: str | None = None,
|
|
41
|
-
|
|
59
|
+
link: str | None = None,
|
|
42
60
|
) -> str:
|
|
43
61
|
"""Create a new agent activity.
|
|
44
62
|
|
|
@@ -46,7 +64,7 @@ class CreateActivitySkill(SystemSkill):
|
|
|
46
64
|
text: Content of the activity.
|
|
47
65
|
images: Optional list of image URLs.
|
|
48
66
|
video: Optional video URL.
|
|
49
|
-
|
|
67
|
+
link: Optional URL to share.
|
|
50
68
|
|
|
51
69
|
Returns:
|
|
52
70
|
A message indicating success with the activity ID.
|
|
@@ -59,6 +77,12 @@ class CreateActivitySkill(SystemSkill):
|
|
|
59
77
|
agent_name = agent.name if agent else None
|
|
60
78
|
agent_picture = agent.picture if agent else None
|
|
61
79
|
|
|
80
|
+
link_meta = None
|
|
81
|
+
if link:
|
|
82
|
+
meta = await fetch_link_meta(link)
|
|
83
|
+
if meta:
|
|
84
|
+
link_meta = meta.model_dump()
|
|
85
|
+
|
|
62
86
|
activity_create = AgentActivityCreate(
|
|
63
87
|
agent_id=agent_id,
|
|
64
88
|
agent_name=agent_name,
|
|
@@ -66,7 +90,8 @@ class CreateActivitySkill(SystemSkill):
|
|
|
66
90
|
text=text,
|
|
67
91
|
images=images,
|
|
68
92
|
video=video,
|
|
69
|
-
|
|
93
|
+
link=link,
|
|
94
|
+
link_meta=link_meta,
|
|
70
95
|
)
|
|
71
96
|
|
|
72
97
|
activity = await create_agent_activity(activity_create)
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"""Skill for reading webpage content as markdown via Cloudflare Browser Rendering."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import re
|
|
5
|
+
from typing import Annotated, override
|
|
6
|
+
|
|
7
|
+
import httpx
|
|
8
|
+
from langchain_core.tools import ArgsSchema, InjectedToolCallId
|
|
9
|
+
from langchain_core.tools.base import ToolException
|
|
10
|
+
from pydantic import BaseModel, Field
|
|
11
|
+
|
|
12
|
+
from intentkit.core.system_skills.base import SystemSkill
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
CLEAN_CONTENT_PROMPT = """\
|
|
17
|
+
You are a content extractor. Given raw markdown converted from a webpage, \
|
|
18
|
+
extract only the meaningful, readable content. Remove:
|
|
19
|
+
- Navigation menus, headers, footers, sidebars
|
|
20
|
+
- Cookie notices, ads, promotional banners
|
|
21
|
+
- Repetitive links, social media buttons
|
|
22
|
+
- Any boilerplate or non-content elements
|
|
23
|
+
|
|
24
|
+
Return ONLY the clean, readable main content in markdown format. \
|
|
25
|
+
Do not add any commentary or explanation."""
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ReadWebpageInput(BaseModel):
|
|
29
|
+
"""Input schema for reading a webpage."""
|
|
30
|
+
|
|
31
|
+
url: str = Field(..., description="The URL of the webpage to read")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class ReadWebpageSkill(SystemSkill):
|
|
35
|
+
"""Skill for reading webpage content as markdown.
|
|
36
|
+
|
|
37
|
+
Uses Cloudflare Browser Rendering REST API to fetch and convert
|
|
38
|
+
webpages to markdown format, then cleans the content with an LLM.
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
name: str = "read_webpage"
|
|
42
|
+
description: str = (
|
|
43
|
+
"Read a webpage and return its content as markdown. "
|
|
44
|
+
"Useful when you need to read and understand the content of a specific URL."
|
|
45
|
+
)
|
|
46
|
+
args_schema: ArgsSchema | None = ReadWebpageInput
|
|
47
|
+
|
|
48
|
+
@override
|
|
49
|
+
async def _arun(
|
|
50
|
+
self,
|
|
51
|
+
url: str,
|
|
52
|
+
tool_call_id: Annotated[str | None, InjectedToolCallId] = None,
|
|
53
|
+
) -> str:
|
|
54
|
+
"""Read a webpage and return its content as markdown.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
url: The URL of the webpage to read.
|
|
58
|
+
tool_call_id: Injected by LangChain runtime.
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
The webpage content converted to markdown.
|
|
62
|
+
"""
|
|
63
|
+
try:
|
|
64
|
+
from intentkit.config.config import config
|
|
65
|
+
|
|
66
|
+
account_id = config.cloudflare_account_id
|
|
67
|
+
api_token = config.cloudflare_api_token
|
|
68
|
+
if not account_id or not api_token:
|
|
69
|
+
raise ToolException(
|
|
70
|
+
"Cloudflare Browser Rendering is not configured. "
|
|
71
|
+
"Set CLOUDFLARE_ACCOUNT_ID and CLOUDFLARE_API_TOKEN."
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
# Fetch webpage as markdown via Cloudflare
|
|
75
|
+
raw_markdown = await self._fetch_markdown(account_id, api_token, url)
|
|
76
|
+
if not raw_markdown:
|
|
77
|
+
return "The webpage returned no content."
|
|
78
|
+
|
|
79
|
+
# Clean whitespace: collapse multiple spaces into one
|
|
80
|
+
cleaned = re.sub(r" {2,}", " ", raw_markdown)
|
|
81
|
+
# Also collapse 3+ consecutive newlines into 2
|
|
82
|
+
cleaned = re.sub(r"\n{3,}", "\n\n", cleaned)
|
|
83
|
+
|
|
84
|
+
# Clean content with LLM
|
|
85
|
+
cleaned = await self._clean_with_llm(cleaned, tool_call_id)
|
|
86
|
+
|
|
87
|
+
# Truncate very long content
|
|
88
|
+
max_chars = 50000
|
|
89
|
+
if len(cleaned) > max_chars:
|
|
90
|
+
cleaned = cleaned[:max_chars] + "\n\n... (content truncated)"
|
|
91
|
+
|
|
92
|
+
return cleaned
|
|
93
|
+
|
|
94
|
+
except ToolException:
|
|
95
|
+
raise
|
|
96
|
+
except Exception as e:
|
|
97
|
+
logger.error(f"read_webpage failed: {e}", exc_info=True)
|
|
98
|
+
raise ToolException(f"Failed to read webpage: {e}") from e
|
|
99
|
+
|
|
100
|
+
async def _fetch_markdown(self, account_id: str, api_token: str, url: str) -> str:
|
|
101
|
+
"""Fetch a URL and convert to markdown via Cloudflare Browser Rendering."""
|
|
102
|
+
api_url = f"https://api.cloudflare.com/client/v4/accounts/{account_id}/browser-rendering/markdown"
|
|
103
|
+
|
|
104
|
+
async with httpx.AsyncClient(timeout=60) as client:
|
|
105
|
+
response = await client.post(
|
|
106
|
+
api_url,
|
|
107
|
+
json={
|
|
108
|
+
"url": url,
|
|
109
|
+
"rejectRequestPattern": [".*\\.(css|ico|svg|woff2?|ttf|eot)$"],
|
|
110
|
+
},
|
|
111
|
+
headers={
|
|
112
|
+
"Content-Type": "application/json",
|
|
113
|
+
"Authorization": f"Bearer {api_token}",
|
|
114
|
+
},
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
if response.status_code != 200:
|
|
118
|
+
raise ToolException(
|
|
119
|
+
f"Cloudflare API returned status {response.status_code}: {response.text}"
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
data = response.json()
|
|
123
|
+
if not data.get("success"):
|
|
124
|
+
errors = data.get("errors", [])
|
|
125
|
+
raise ToolException(f"Cloudflare API error: {errors}")
|
|
126
|
+
|
|
127
|
+
return data.get("result", "")
|
|
128
|
+
|
|
129
|
+
async def _clean_with_llm(self, content: str, tool_call_id: str | None) -> str:
|
|
130
|
+
"""Use a long-context LLM to extract readable content from raw markdown."""
|
|
131
|
+
from intentkit.models.llm import create_llm_model
|
|
132
|
+
from intentkit.models.llm_picker import pick_long_context_model
|
|
133
|
+
|
|
134
|
+
model_id = pick_long_context_model()
|
|
135
|
+
llm_model = await create_llm_model(model_id, temperature=0)
|
|
136
|
+
llm = await llm_model.create_instance()
|
|
137
|
+
|
|
138
|
+
response = await llm.ainvoke(
|
|
139
|
+
[
|
|
140
|
+
{"role": "system", "content": CLEAN_CONTENT_PROMPT},
|
|
141
|
+
{"role": "user", "content": content},
|
|
142
|
+
]
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
# Bill for the LLM usage
|
|
146
|
+
input_tokens = (
|
|
147
|
+
response.usage_metadata.get("input_tokens", 0)
|
|
148
|
+
if response.usage_metadata
|
|
149
|
+
else 0
|
|
150
|
+
)
|
|
151
|
+
output_tokens = (
|
|
152
|
+
response.usage_metadata.get("output_tokens", 0)
|
|
153
|
+
if response.usage_metadata
|
|
154
|
+
else 0
|
|
155
|
+
)
|
|
156
|
+
cached_input_tokens = (
|
|
157
|
+
response.usage_metadata.get("input_token_details", {}).get("cache_read", 0)
|
|
158
|
+
if response.usage_metadata
|
|
159
|
+
else 0
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
try:
|
|
163
|
+
context = self.get_context()
|
|
164
|
+
payer = context.payer
|
|
165
|
+
if payer and tool_call_id:
|
|
166
|
+
from intentkit.core.credit.expense import expense_skill_internal_llm
|
|
167
|
+
|
|
168
|
+
await expense_skill_internal_llm(
|
|
169
|
+
user_id=payer,
|
|
170
|
+
agent=context.agent,
|
|
171
|
+
skill_name=self.name,
|
|
172
|
+
skill_call_id=tool_call_id,
|
|
173
|
+
start_message_id=context.start_message_id,
|
|
174
|
+
model_id=model_id,
|
|
175
|
+
input_tokens=input_tokens,
|
|
176
|
+
output_tokens=output_tokens,
|
|
177
|
+
cached_input_tokens=cached_input_tokens,
|
|
178
|
+
)
|
|
179
|
+
except Exception as e:
|
|
180
|
+
logger.warning(f"Failed to bill for LLM cleaning: {e}")
|
|
181
|
+
|
|
182
|
+
result = response.content
|
|
183
|
+
return str(result) if result else content
|
|
@@ -5,7 +5,7 @@ from epyxid import XID
|
|
|
5
5
|
from pydantic import BaseModel, ConfigDict
|
|
6
6
|
from pydantic import Field as PydanticField
|
|
7
7
|
from sqlalchemy import DateTime, String, func
|
|
8
|
-
from sqlalchemy.dialects.postgresql import ARRAY
|
|
8
|
+
from sqlalchemy.dialects.postgresql import ARRAY, JSONB
|
|
9
9
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
10
10
|
|
|
11
11
|
from intentkit.config.base import Base
|
|
@@ -24,6 +24,11 @@ class AgentActivityBase(BaseModel):
|
|
|
24
24
|
list[str] | None, PydanticField(description="List of image URLs")
|
|
25
25
|
] = None
|
|
26
26
|
video: Annotated[str | None, PydanticField(description="Video URL")] = None
|
|
27
|
+
link: Annotated[str | None, PydanticField(description="Link URL")] = None
|
|
28
|
+
link_meta: Annotated[
|
|
29
|
+
dict[str, str | None] | None,
|
|
30
|
+
PydanticField(description="Link metadata"),
|
|
31
|
+
] = None
|
|
27
32
|
post_id: Annotated[str | None, PydanticField(description="Related post ID")] = None
|
|
28
33
|
|
|
29
34
|
|
|
@@ -63,6 +68,10 @@ class AgentActivityTable(Base):
|
|
|
63
68
|
video: Mapped[str | None] = mapped_column(
|
|
64
69
|
String, nullable=True, comment="Video URL"
|
|
65
70
|
)
|
|
71
|
+
link: Mapped[str | None] = mapped_column(String, nullable=True, comment="Link URL")
|
|
72
|
+
link_meta: Mapped[dict[str, str | None] | None] = mapped_column(
|
|
73
|
+
JSONB, nullable=True, comment="Link metadata"
|
|
74
|
+
)
|
|
66
75
|
post_id: Mapped[str | None] = mapped_column(
|
|
67
76
|
String, nullable=True, index=True, comment="Related post ID"
|
|
68
77
|
)
|
|
@@ -71,3 +71,32 @@ def pick_default_model() -> str:
|
|
|
71
71
|
return model_id
|
|
72
72
|
|
|
73
73
|
raise RuntimeError("No default model available: missing all required API keys")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def pick_long_context_model() -> str:
|
|
77
|
+
"""
|
|
78
|
+
Pick the cheapest available model with context length >= 1,000,000 tokens.
|
|
79
|
+
Falls back to any available model if no long-context model is configured.
|
|
80
|
+
"""
|
|
81
|
+
# Priority order based on cost (cheapest first), one per provider:
|
|
82
|
+
order: list[tuple[str, LLMProvider]] = [
|
|
83
|
+
("gemini-3.1-flash-lite-preview", LLMProvider.GOOGLE),
|
|
84
|
+
("grok-4-1-fast-non-reasoning", LLMProvider.XAI),
|
|
85
|
+
("qwen/qwen3.5-flash-02-23", LLMProvider.OPENROUTER),
|
|
86
|
+
("gpt-5-nano", LLMProvider.OPENAI),
|
|
87
|
+
("deepseek-chat", LLMProvider.DEEPSEEK),
|
|
88
|
+
]
|
|
89
|
+
|
|
90
|
+
for model_id, provider in order:
|
|
91
|
+
if provider == LLMProvider.OPENAI and config.openai_api_key:
|
|
92
|
+
return model_id
|
|
93
|
+
if provider == LLMProvider.GOOGLE and config.google_api_key:
|
|
94
|
+
return model_id
|
|
95
|
+
if provider == LLMProvider.OPENROUTER and config.openrouter_api_key:
|
|
96
|
+
return model_id
|
|
97
|
+
if provider == LLMProvider.XAI and config.xai_api_key:
|
|
98
|
+
return model_id
|
|
99
|
+
if provider == LLMProvider.DEEPSEEK and config.deepseek_api_key:
|
|
100
|
+
return model_id
|
|
101
|
+
|
|
102
|
+
raise RuntimeError("No long-context model available: missing all required API keys")
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"""OpenGraph metadata fetcher utility."""
|
|
2
|
+
|
|
3
|
+
from html.parser import HTMLParser
|
|
4
|
+
from urllib.parse import urljoin, urlparse
|
|
5
|
+
|
|
6
|
+
import httpx
|
|
7
|
+
from pydantic import BaseModel
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class LinkMeta(BaseModel):
|
|
11
|
+
"""OpenGraph link metadata."""
|
|
12
|
+
|
|
13
|
+
title: str | None = None
|
|
14
|
+
description: str | None = None
|
|
15
|
+
image: str | None = None
|
|
16
|
+
favicon: str | None = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class _OGParser(HTMLParser):
|
|
20
|
+
"""Parse HTML for OpenGraph meta tags and favicon link tags."""
|
|
21
|
+
|
|
22
|
+
def __init__(self) -> None:
|
|
23
|
+
super().__init__()
|
|
24
|
+
self.og: dict[str, str] = {}
|
|
25
|
+
self.favicon: str | None = None
|
|
26
|
+
self.title: str | None = None
|
|
27
|
+
self._in_title = False
|
|
28
|
+
self._title_parts: list[str] = []
|
|
29
|
+
|
|
30
|
+
def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None:
|
|
31
|
+
attr_dict = {k: v for k, v in attrs if v is not None}
|
|
32
|
+
|
|
33
|
+
if tag == "meta":
|
|
34
|
+
prop = attr_dict.get("property", "")
|
|
35
|
+
name = attr_dict.get("name", "")
|
|
36
|
+
content = attr_dict.get("content", "")
|
|
37
|
+
if prop in ("og:title", "og:description", "og:image"):
|
|
38
|
+
self.og[prop] = content
|
|
39
|
+
elif name in ("description",) and "og:description" not in self.og:
|
|
40
|
+
self.og["og:description"] = content
|
|
41
|
+
|
|
42
|
+
elif tag == "link":
|
|
43
|
+
rel = attr_dict.get("rel", "")
|
|
44
|
+
href = attr_dict.get("href")
|
|
45
|
+
if href and ("icon" in rel):
|
|
46
|
+
self.favicon = href
|
|
47
|
+
|
|
48
|
+
elif tag == "title":
|
|
49
|
+
self._in_title = True
|
|
50
|
+
self._title_parts = []
|
|
51
|
+
|
|
52
|
+
def handle_data(self, data: str) -> None:
|
|
53
|
+
if self._in_title:
|
|
54
|
+
self._title_parts.append(data)
|
|
55
|
+
|
|
56
|
+
def handle_endtag(self, tag: str) -> None:
|
|
57
|
+
if tag == "title" and self._in_title:
|
|
58
|
+
self._in_title = False
|
|
59
|
+
self.title = "".join(self._title_parts).strip()
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
async def fetch_link_meta(url: str) -> LinkMeta | None:
|
|
63
|
+
"""Fetch OpenGraph metadata from a URL.
|
|
64
|
+
|
|
65
|
+
Args:
|
|
66
|
+
url: The URL to fetch metadata from.
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
LinkMeta with extracted metadata, or None on any error.
|
|
70
|
+
"""
|
|
71
|
+
try:
|
|
72
|
+
async with httpx.AsyncClient(
|
|
73
|
+
timeout=5.0,
|
|
74
|
+
follow_redirects=True,
|
|
75
|
+
headers={
|
|
76
|
+
"User-Agent": (
|
|
77
|
+
"Mozilla/5.0 (compatible; IntentKit/1.0; +https://intentkit.io)"
|
|
78
|
+
),
|
|
79
|
+
},
|
|
80
|
+
) as client:
|
|
81
|
+
resp = await client.get(url)
|
|
82
|
+
resp.raise_for_status()
|
|
83
|
+
|
|
84
|
+
parser = _OGParser()
|
|
85
|
+
parser.feed(resp.text)
|
|
86
|
+
|
|
87
|
+
origin = f"{urlparse(url).scheme}://{urlparse(url).netloc}"
|
|
88
|
+
|
|
89
|
+
# Resolve favicon
|
|
90
|
+
favicon = parser.favicon
|
|
91
|
+
if favicon:
|
|
92
|
+
favicon = urljoin(url, favicon)
|
|
93
|
+
else:
|
|
94
|
+
favicon = f"{origin}/favicon.ico"
|
|
95
|
+
|
|
96
|
+
# Resolve image
|
|
97
|
+
image = parser.og.get("og:image")
|
|
98
|
+
if image:
|
|
99
|
+
image = urljoin(url, image)
|
|
100
|
+
|
|
101
|
+
return LinkMeta(
|
|
102
|
+
title=parser.og.get("og:title") or parser.title,
|
|
103
|
+
description=parser.og.get("og:description"),
|
|
104
|
+
image=image,
|
|
105
|
+
favicon=favicon,
|
|
106
|
+
)
|
|
107
|
+
except Exception:
|
|
108
|
+
return None
|