intentkit 0.8.17.dev1__py3-none-any.whl → 0.8.17.dev2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of intentkit might be problematic. Click here for more details.
- intentkit/__init__.py +1 -1
- intentkit/abstracts/agent.py +4 -5
- intentkit/abstracts/engine.py +5 -5
- intentkit/abstracts/graph.py +6 -5
- intentkit/abstracts/skill.py +5 -5
- intentkit/abstracts/twitter.py +4 -5
- intentkit/clients/cdp.py +19 -77
- intentkit/clients/twitter.py +26 -34
- intentkit/clients/web3.py +1 -3
- intentkit/config/config.py +4 -0
- intentkit/core/agent.py +15 -15
- intentkit/core/asset.py +1 -2
- intentkit/core/client.py +1 -1
- intentkit/core/credit.py +19 -20
- intentkit/core/engine.py +2 -4
- intentkit/core/node.py +2 -1
- intentkit/core/prompt.py +3 -4
- intentkit/core/scheduler.py +1 -1
- intentkit/core/statistics.py +6 -7
- intentkit/models/agent.py +125 -92
- intentkit/models/agent_data.py +62 -36
- intentkit/models/app_setting.py +6 -6
- intentkit/models/chat.py +27 -24
- intentkit/models/conversation.py +8 -8
- intentkit/models/credit.py +62 -64
- intentkit/models/db.py +8 -7
- intentkit/models/db_mig.py +2 -2
- intentkit/models/llm.py +12 -14
- intentkit/models/redis.py +2 -3
- intentkit/models/skill.py +25 -27
- intentkit/models/user.py +21 -22
- intentkit/skills/acolyt/ask.py +3 -4
- intentkit/skills/acolyt/base.py +1 -3
- intentkit/skills/aixbt/base.py +1 -3
- intentkit/skills/aixbt/projects.py +13 -13
- intentkit/skills/allora/base.py +1 -3
- intentkit/skills/allora/price.py +2 -3
- intentkit/skills/base.py +15 -22
- intentkit/skills/basename/__init__.py +3 -5
- intentkit/skills/carv/__init__.py +7 -8
- intentkit/skills/carv/base.py +6 -6
- intentkit/skills/carv/fetch_news.py +3 -3
- intentkit/skills/carv/onchain_query.py +4 -4
- intentkit/skills/carv/token_info_and_price.py +5 -5
- intentkit/skills/casino/base.py +1 -3
- intentkit/skills/casino/deck_draw.py +1 -2
- intentkit/skills/casino/deck_shuffle.py +1 -2
- intentkit/skills/casino/dice_roll.py +1 -2
- intentkit/skills/cdp/__init__.py +3 -5
- intentkit/skills/cdp/base.py +1 -3
- intentkit/skills/chainlist/base.py +1 -3
- intentkit/skills/chainlist/chain_lookup.py +18 -18
- intentkit/skills/common/base.py +1 -3
- intentkit/skills/common/current_time.py +1 -2
- intentkit/skills/cookiefun/base.py +1 -2
- intentkit/skills/cookiefun/get_account_details.py +7 -7
- intentkit/skills/cookiefun/get_account_feed.py +19 -19
- intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
- intentkit/skills/cookiefun/get_sectors.py +3 -3
- intentkit/skills/cookiefun/search_accounts.py +9 -9
- intentkit/skills/cryptocompare/api.py +2 -3
- intentkit/skills/cryptocompare/base.py +6 -6
- intentkit/skills/cryptocompare/fetch_news.py +3 -4
- intentkit/skills/cryptocompare/fetch_price.py +5 -6
- intentkit/skills/cryptocompare/fetch_top_exchanges.py +3 -4
- intentkit/skills/cryptocompare/fetch_top_market_cap.py +3 -4
- intentkit/skills/cryptocompare/fetch_top_volume.py +3 -4
- intentkit/skills/cryptocompare/fetch_trading_signals.py +4 -5
- intentkit/skills/cryptopanic/__init__.py +4 -4
- intentkit/skills/cryptopanic/base.py +1 -3
- intentkit/skills/cryptopanic/fetch_crypto_news.py +3 -5
- intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +3 -3
- intentkit/skills/dapplooker/base.py +1 -3
- intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
- intentkit/skills/defillama/api.py +6 -9
- intentkit/skills/defillama/base.py +5 -6
- intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +6 -8
- intentkit/skills/defillama/coins/fetch_block.py +4 -6
- intentkit/skills/defillama/coins/fetch_current_prices.py +6 -8
- intentkit/skills/defillama/coins/fetch_first_price.py +5 -7
- intentkit/skills/defillama/coins/fetch_historical_prices.py +7 -9
- intentkit/skills/defillama/coins/fetch_price_chart.py +7 -9
- intentkit/skills/defillama/coins/fetch_price_percentage.py +5 -7
- intentkit/skills/defillama/config/chains.py +1 -3
- intentkit/skills/defillama/fees/fetch_fees_overview.py +22 -24
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +14 -16
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +6 -8
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +3 -5
- intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +5 -7
- intentkit/skills/defillama/tests/api_integration.test.py +1 -1
- intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +2 -4
- intentkit/skills/defillama/tvl/fetch_chains.py +7 -9
- intentkit/skills/defillama/tvl/fetch_historical_tvl.py +2 -4
- intentkit/skills/defillama/tvl/fetch_protocol.py +30 -36
- intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +1 -3
- intentkit/skills/defillama/tvl/fetch_protocols.py +35 -43
- intentkit/skills/defillama/volumes/fetch_dex_overview.py +40 -46
- intentkit/skills/defillama/volumes/fetch_dex_summary.py +33 -35
- intentkit/skills/defillama/volumes/fetch_options_overview.py +22 -26
- intentkit/skills/defillama/yields/fetch_pool_chart.py +8 -10
- intentkit/skills/defillama/yields/fetch_pools.py +24 -28
- intentkit/skills/dexscreener/__init__.py +2 -2
- intentkit/skills/dexscreener/base.py +3 -3
- intentkit/skills/dexscreener/get_pair_info.py +2 -2
- intentkit/skills/dexscreener/get_token_pairs.py +2 -2
- intentkit/skills/dexscreener/get_tokens_info.py +5 -5
- intentkit/skills/dexscreener/model/search_token_response.py +80 -82
- intentkit/skills/dexscreener/search_token.py +182 -182
- intentkit/skills/dexscreener/utils.py +15 -14
- intentkit/skills/dune_analytics/__init__.py +4 -4
- intentkit/skills/dune_analytics/base.py +1 -3
- intentkit/skills/dune_analytics/fetch_kol_buys.py +4 -4
- intentkit/skills/dune_analytics/fetch_nation_metrics.py +5 -5
- intentkit/skills/elfa/base.py +1 -3
- intentkit/skills/elfa/mention.py +19 -21
- intentkit/skills/elfa/stats.py +4 -4
- intentkit/skills/elfa/tokens.py +12 -12
- intentkit/skills/elfa/utils.py +25 -27
- intentkit/skills/enso/__init__.py +2 -2
- intentkit/skills/enso/base.py +5 -8
- intentkit/skills/enso/best_yield.py +4 -6
- intentkit/skills/enso/networks.py +1 -2
- intentkit/skills/enso/prices.py +1 -3
- intentkit/skills/enso/route.py +1 -3
- intentkit/skills/enso/tokens.py +1 -3
- intentkit/skills/enso/wallet.py +5 -5
- intentkit/skills/erc20/__init__.py +4 -6
- intentkit/skills/erc721/__init__.py +4 -6
- intentkit/skills/firecrawl/base.py +1 -3
- intentkit/skills/firecrawl/clear.py +1 -2
- intentkit/skills/firecrawl/crawl.py +9 -10
- intentkit/skills/firecrawl/query.py +1 -2
- intentkit/skills/firecrawl/scrape.py +7 -8
- intentkit/skills/firecrawl/utils.py +13 -13
- intentkit/skills/github/base.py +1 -3
- intentkit/skills/github/github_search.py +1 -2
- intentkit/skills/heurist/base.py +1 -3
- intentkit/skills/heurist/image_generation_animagine_xl.py +7 -8
- intentkit/skills/heurist/image_generation_arthemy_comics.py +7 -8
- intentkit/skills/heurist/image_generation_arthemy_real.py +7 -8
- intentkit/skills/heurist/image_generation_braindance.py +7 -8
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +7 -8
- intentkit/skills/heurist/image_generation_flux_1_dev.py +7 -8
- intentkit/skills/heurist/image_generation_sdxl.py +7 -8
- intentkit/skills/http/base.py +1 -3
- intentkit/skills/http/get.py +7 -7
- intentkit/skills/http/post.py +9 -9
- intentkit/skills/http/put.py +9 -9
- intentkit/skills/lifi/__init__.py +4 -4
- intentkit/skills/lifi/base.py +1 -3
- intentkit/skills/lifi/token_execute.py +13 -13
- intentkit/skills/lifi/token_quote.py +6 -6
- intentkit/skills/lifi/utils.py +16 -16
- intentkit/skills/moralis/__init__.py +3 -3
- intentkit/skills/moralis/api.py +6 -7
- intentkit/skills/moralis/base.py +2 -4
- intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
- intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
- intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
- intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
- intentkit/skills/morpho/__init__.py +4 -6
- intentkit/skills/nation/__init__.py +2 -2
- intentkit/skills/nation/base.py +1 -3
- intentkit/skills/nation/nft_check.py +3 -4
- intentkit/skills/onchain.py +2 -6
- intentkit/skills/openai/base.py +1 -3
- intentkit/skills/openai/dalle_image_generation.py +1 -3
- intentkit/skills/openai/gpt_image_generation.py +2 -3
- intentkit/skills/openai/gpt_image_to_image.py +2 -3
- intentkit/skills/openai/image_to_text.py +1 -2
- intentkit/skills/portfolio/base.py +6 -6
- intentkit/skills/portfolio/token_balances.py +21 -21
- intentkit/skills/portfolio/wallet_approvals.py +7 -7
- intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
- intentkit/skills/portfolio/wallet_history.py +21 -21
- intentkit/skills/portfolio/wallet_net_worth.py +13 -13
- intentkit/skills/portfolio/wallet_nfts.py +19 -19
- intentkit/skills/portfolio/wallet_profitability.py +7 -7
- intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
- intentkit/skills/portfolio/wallet_stats.py +3 -3
- intentkit/skills/portfolio/wallet_swaps.py +19 -19
- intentkit/skills/pyth/__init__.py +3 -5
- intentkit/skills/slack/base.py +2 -4
- intentkit/skills/slack/get_channel.py +8 -8
- intentkit/skills/slack/get_message.py +9 -9
- intentkit/skills/slack/schedule_message.py +5 -5
- intentkit/skills/slack/send_message.py +3 -5
- intentkit/skills/supabase/base.py +1 -3
- intentkit/skills/supabase/delete_data.py +4 -4
- intentkit/skills/supabase/fetch_data.py +12 -12
- intentkit/skills/supabase/insert_data.py +4 -4
- intentkit/skills/supabase/invoke_function.py +6 -6
- intentkit/skills/supabase/update_data.py +6 -6
- intentkit/skills/supabase/upsert_data.py +4 -4
- intentkit/skills/superfluid/__init__.py +4 -6
- intentkit/skills/system/add_autonomous_task.py +8 -10
- intentkit/skills/system/edit_autonomous_task.py +12 -14
- intentkit/skills/system/list_autonomous_tasks.py +1 -3
- intentkit/skills/tavily/base.py +1 -3
- intentkit/skills/tavily/tavily_extract.py +1 -2
- intentkit/skills/tavily/tavily_search.py +1 -3
- intentkit/skills/token/base.py +5 -5
- intentkit/skills/token/erc20_transfers.py +19 -19
- intentkit/skills/token/token_analytics.py +3 -3
- intentkit/skills/token/token_price.py +13 -13
- intentkit/skills/token/token_search.py +9 -9
- intentkit/skills/twitter/base.py +3 -4
- intentkit/skills/twitter/follow_user.py +1 -2
- intentkit/skills/twitter/get_mentions.py +3 -4
- intentkit/skills/twitter/get_timeline.py +1 -2
- intentkit/skills/twitter/get_user_by_username.py +1 -2
- intentkit/skills/twitter/get_user_tweets.py +2 -3
- intentkit/skills/twitter/like_tweet.py +1 -2
- intentkit/skills/twitter/post_tweet.py +3 -4
- intentkit/skills/twitter/reply_tweet.py +3 -4
- intentkit/skills/twitter/retweet.py +1 -2
- intentkit/skills/twitter/search_tweets.py +1 -2
- intentkit/skills/unrealspeech/base.py +1 -3
- intentkit/skills/unrealspeech/text_to_speech.py +8 -8
- intentkit/skills/venice_audio/__init__.py +8 -9
- intentkit/skills/venice_audio/base.py +3 -4
- intentkit/skills/venice_audio/input.py +41 -41
- intentkit/skills/venice_audio/venice_audio.py +6 -6
- intentkit/skills/venice_image/__init__.py +5 -5
- intentkit/skills/venice_image/api.py +138 -138
- intentkit/skills/venice_image/base.py +3 -3
- intentkit/skills/venice_image/config.py +33 -35
- intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
- intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
- intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
- intentkit/skills/venice_image/image_generation/image_generation_base.py +9 -9
- intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
- intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
- intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
- intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
- intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
- intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
- intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
- intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
- intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
- intentkit/skills/venice_image/utils.py +77 -78
- intentkit/skills/web_scraper/base.py +1 -3
- intentkit/skills/web_scraper/document_indexer.py +1 -2
- intentkit/skills/web_scraper/scrape_and_index.py +4 -5
- intentkit/skills/web_scraper/utils.py +25 -26
- intentkit/skills/web_scraper/website_indexer.py +10 -11
- intentkit/skills/weth/__init__.py +4 -6
- intentkit/skills/wow/__init__.py +4 -6
- intentkit/skills/x402/__init__.py +2 -2
- intentkit/skills/x402/ask_agent.py +7 -7
- intentkit/skills/x402/base.py +2 -1
- intentkit/skills/x402/http_request.py +10 -10
- intentkit/skills/xmtp/base.py +3 -3
- intentkit/skills/xmtp/price.py +2 -2
- intentkit/skills/xmtp/swap.py +2 -4
- intentkit/skills/xmtp/transfer.py +4 -6
- intentkit/utils/error.py +2 -2
- intentkit/utils/logging.py +2 -4
- intentkit/utils/s3.py +8 -9
- intentkit/utils/schema.py +5 -5
- intentkit/utils/slack_alert.py +7 -8
- {intentkit-0.8.17.dev1.dist-info → intentkit-0.8.17.dev2.dist-info}/METADATA +3 -4
- intentkit-0.8.17.dev2.dist-info/RECORD +464 -0
- intentkit/models/generator.py +0 -347
- intentkit-0.8.17.dev1.dist-info/RECORD +0 -465
- {intentkit-0.8.17.dev1.dist-info → intentkit-0.8.17.dev2.dist-info}/WHEEL +0 -0
- {intentkit-0.8.17.dev1.dist-info → intentkit-0.8.17.dev2.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import List, Type
|
|
3
2
|
from urllib.parse import urljoin, urlparse
|
|
4
3
|
|
|
5
4
|
import httpx
|
|
@@ -44,11 +43,11 @@ class WebsiteIndexerInput(BaseModel):
|
|
|
44
43
|
ge=0,
|
|
45
44
|
le=1000,
|
|
46
45
|
)
|
|
47
|
-
include_patterns:
|
|
46
|
+
include_patterns: list[str] = Field(
|
|
48
47
|
description="URL patterns to include (e.g., ['/blog/', '/docs/']). If empty, all URLs are included",
|
|
49
48
|
default=[],
|
|
50
49
|
)
|
|
51
|
-
exclude_patterns:
|
|
50
|
+
exclude_patterns: list[str] = Field(
|
|
52
51
|
description="URL patterns to exclude (e.g., ['/admin/', '/private/'])",
|
|
53
52
|
default=[],
|
|
54
53
|
)
|
|
@@ -68,7 +67,7 @@ class WebsiteIndexer(WebScraperBaseTool):
|
|
|
68
67
|
"This tool finds sitemaps from robots.txt, parses the XML content to extract URLs, "
|
|
69
68
|
"and then uses the reliable scrape_and_index functionality for content indexing."
|
|
70
69
|
)
|
|
71
|
-
args_schema:
|
|
70
|
+
args_schema: type[BaseModel] = WebsiteIndexerInput
|
|
72
71
|
|
|
73
72
|
def _normalize_url(self, url: str) -> str:
|
|
74
73
|
"""Normalize URL by ensuring it has a proper scheme."""
|
|
@@ -106,7 +105,7 @@ class WebsiteIndexer(WebScraperBaseTool):
|
|
|
106
105
|
|
|
107
106
|
def _extract_sitemaps_from_robots(
|
|
108
107
|
self, robots_content: str, base_url: str
|
|
109
|
-
) ->
|
|
108
|
+
) -> list[str]:
|
|
110
109
|
"""Extract sitemap URLs from robots.txt content."""
|
|
111
110
|
sitemaps = []
|
|
112
111
|
|
|
@@ -121,7 +120,7 @@ class WebsiteIndexer(WebScraperBaseTool):
|
|
|
121
120
|
|
|
122
121
|
return sitemaps
|
|
123
122
|
|
|
124
|
-
def _get_common_sitemap_patterns(self, base_url: str) ->
|
|
123
|
+
def _get_common_sitemap_patterns(self, base_url: str) -> list[str]:
|
|
125
124
|
"""Generate common sitemap URL patterns."""
|
|
126
125
|
return [
|
|
127
126
|
urljoin(base_url, "/sitemap.xml"),
|
|
@@ -157,7 +156,7 @@ class WebsiteIndexer(WebScraperBaseTool):
|
|
|
157
156
|
logger.warning(f"Could not fetch sitemap from {sitemap_url}: {e}")
|
|
158
157
|
return ""
|
|
159
158
|
|
|
160
|
-
async def _get_all_sitemap_content(self, base_url: str) -> tuple[str,
|
|
159
|
+
async def _get_all_sitemap_content(self, base_url: str) -> tuple[str, list[str]]:
|
|
161
160
|
"""Get all sitemap content for AI analysis."""
|
|
162
161
|
all_content = []
|
|
163
162
|
found_sitemaps = []
|
|
@@ -200,7 +199,7 @@ class WebsiteIndexer(WebScraperBaseTool):
|
|
|
200
199
|
return combined_xml, found_sitemaps
|
|
201
200
|
|
|
202
201
|
def _create_ai_extraction_prompt(
|
|
203
|
-
self, sitemap_xml: str, include_patterns:
|
|
202
|
+
self, sitemap_xml: str, include_patterns: list[str], exclude_patterns: list[str]
|
|
204
203
|
) -> str:
|
|
205
204
|
"""Create a prompt for AI to extract URLs from sitemap XML."""
|
|
206
205
|
filter_instructions = ""
|
|
@@ -225,7 +224,7 @@ INSTRUCTIONS:
|
|
|
225
224
|
|
|
226
225
|
Extract the URLs now:"""
|
|
227
226
|
|
|
228
|
-
def _parse_ai_response(self, ai_response: str) ->
|
|
227
|
+
def _parse_ai_response(self, ai_response: str) -> list[str]:
|
|
229
228
|
"""Parse AI response to extract clean URLs."""
|
|
230
229
|
urls = []
|
|
231
230
|
|
|
@@ -281,8 +280,8 @@ Extract the URLs now:"""
|
|
|
281
280
|
max_urls: int = 50,
|
|
282
281
|
chunk_size: int = DEFAULT_CHUNK_SIZE,
|
|
283
282
|
chunk_overlap: int = DEFAULT_CHUNK_OVERLAP,
|
|
284
|
-
include_patterns:
|
|
285
|
-
exclude_patterns:
|
|
283
|
+
include_patterns: list[str] = None,
|
|
284
|
+
exclude_patterns: list[str] = None,
|
|
286
285
|
**kwargs,
|
|
287
286
|
) -> str:
|
|
288
287
|
"""Discover website sitemaps, extract URLs with AI, and delegate to scrape_and_index."""
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"""WETH AgentKit skills."""
|
|
2
2
|
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import TypedDict
|
|
4
4
|
|
|
5
5
|
from coinbase_agentkit import weth_action_provider
|
|
6
6
|
|
|
7
|
+
from intentkit.models.agent import Agent
|
|
7
8
|
from intentkit.skills.base import (
|
|
8
9
|
SkillConfig,
|
|
9
10
|
SkillState,
|
|
@@ -12,9 +13,6 @@ from intentkit.skills.base import (
|
|
|
12
13
|
)
|
|
13
14
|
from intentkit.skills.weth.base import WethBaseTool
|
|
14
15
|
|
|
15
|
-
if TYPE_CHECKING:
|
|
16
|
-
from intentkit.models.agent import Agent
|
|
17
|
-
|
|
18
16
|
|
|
19
17
|
class SkillStates(TypedDict):
|
|
20
18
|
WethActionProvider_wrap_eth: SkillState
|
|
@@ -27,10 +25,10 @@ class Config(SkillConfig):
|
|
|
27
25
|
|
|
28
26
|
|
|
29
27
|
async def get_skills(
|
|
30
|
-
config:
|
|
28
|
+
config: Config,
|
|
31
29
|
is_private: bool,
|
|
32
30
|
agent_id: str,
|
|
33
|
-
agent:
|
|
31
|
+
agent: Agent | None = None,
|
|
34
32
|
**_,
|
|
35
33
|
) -> list[WethBaseTool]:
|
|
36
34
|
"""Get all WETH skills."""
|
intentkit/skills/wow/__init__.py
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"""WOW AgentKit skills."""
|
|
2
2
|
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import TypedDict
|
|
4
4
|
|
|
5
5
|
from coinbase_agentkit import wow_action_provider
|
|
6
6
|
|
|
7
|
+
from intentkit.models.agent import Agent
|
|
7
8
|
from intentkit.skills.base import (
|
|
8
9
|
SkillConfig,
|
|
9
10
|
SkillState,
|
|
@@ -12,9 +13,6 @@ from intentkit.skills.base import (
|
|
|
12
13
|
)
|
|
13
14
|
from intentkit.skills.wow.base import WowBaseTool
|
|
14
15
|
|
|
15
|
-
if TYPE_CHECKING:
|
|
16
|
-
from intentkit.models.agent import Agent
|
|
17
|
-
|
|
18
16
|
|
|
19
17
|
class SkillStates(TypedDict):
|
|
20
18
|
WowActionProvider_buy_token: SkillState
|
|
@@ -29,10 +27,10 @@ class Config(SkillConfig):
|
|
|
29
27
|
|
|
30
28
|
|
|
31
29
|
async def get_skills(
|
|
32
|
-
config:
|
|
30
|
+
config: Config,
|
|
33
31
|
is_private: bool,
|
|
34
32
|
agent_id: str,
|
|
35
|
-
agent:
|
|
33
|
+
agent: Agent | None = None,
|
|
36
34
|
**_,
|
|
37
35
|
) -> list[WowBaseTool]:
|
|
38
36
|
"""Get all WOW skills."""
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""x402 skill category."""
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from typing import
|
|
4
|
+
from typing import TypedDict
|
|
5
5
|
|
|
6
6
|
from intentkit.skills.base import SkillConfig, SkillState
|
|
7
7
|
from intentkit.skills.x402.ask_agent import X402AskAgent
|
|
@@ -24,7 +24,7 @@ class Config(SkillConfig):
|
|
|
24
24
|
states: SkillStates
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
_SKILL_BUILDERS: dict[str,
|
|
27
|
+
_SKILL_BUILDERS: dict[str, type[X402BaseSkill]] = {
|
|
28
28
|
"x402_ask_agent": X402AskAgent,
|
|
29
29
|
"x402_http_request": X402HttpRequest,
|
|
30
30
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
4
|
from langchain_core.tools import ToolException
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
@@ -16,10 +16,10 @@ class AskAgentInput(BaseModel):
|
|
|
16
16
|
|
|
17
17
|
agent_id: str = Field(description="ID or slug of the agent to query.")
|
|
18
18
|
message: str = Field(description="Message to send to the target agent.")
|
|
19
|
-
search_mode:
|
|
19
|
+
search_mode: bool | None = Field(
|
|
20
20
|
default=None, description="Enable search mode when interacting with the agent."
|
|
21
21
|
)
|
|
22
|
-
super_mode:
|
|
22
|
+
super_mode: bool | None = Field(
|
|
23
23
|
default=None, description="Enable super mode when interacting with the agent."
|
|
24
24
|
)
|
|
25
25
|
|
|
@@ -31,14 +31,14 @@ class X402AskAgent(X402BaseSkill):
|
|
|
31
31
|
description: str = (
|
|
32
32
|
"Call another agent through the x402 API and return the final agent message."
|
|
33
33
|
)
|
|
34
|
-
args_schema:
|
|
34
|
+
args_schema: type[BaseModel] = AskAgentInput
|
|
35
35
|
|
|
36
36
|
async def _arun(
|
|
37
37
|
self,
|
|
38
38
|
agent_id: str,
|
|
39
39
|
message: str,
|
|
40
|
-
search_mode:
|
|
41
|
-
super_mode:
|
|
40
|
+
search_mode: bool | None = None,
|
|
41
|
+
super_mode: bool | None = None,
|
|
42
42
|
) -> str:
|
|
43
43
|
try:
|
|
44
44
|
# Use wallet provider signer to satisfy eth_account.BaseAccount interface requirements
|
|
@@ -46,7 +46,7 @@ class X402AskAgent(X402BaseSkill):
|
|
|
46
46
|
if not base_url:
|
|
47
47
|
raise ToolException("X402 API base URL is not configured.")
|
|
48
48
|
target_url = f"{base_url}/x402"
|
|
49
|
-
payload:
|
|
49
|
+
payload: dict[str, Any] = {
|
|
50
50
|
"agent_id": agent_id,
|
|
51
51
|
"message": message,
|
|
52
52
|
"app_id": "skill",
|
intentkit/skills/x402/base.py
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import threading
|
|
3
|
+
from collections.abc import AsyncIterator
|
|
3
4
|
from contextlib import asynccontextmanager
|
|
4
|
-
from typing import Any
|
|
5
|
+
from typing import Any
|
|
5
6
|
|
|
6
7
|
from coinbase_agentkit.wallet_providers.evm_wallet_provider import (
|
|
7
8
|
EvmWalletSigner as CoinbaseEvmWalletSigner,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
from urllib.parse import urlparse
|
|
4
4
|
|
|
5
5
|
import httpx
|
|
@@ -18,22 +18,22 @@ class X402HttpRequestInput(BaseModel):
|
|
|
18
18
|
url: str = Field(
|
|
19
19
|
description="Absolute URL for the request (must include scheme and host)."
|
|
20
20
|
)
|
|
21
|
-
headers:
|
|
21
|
+
headers: dict[str, str] | None = Field(
|
|
22
22
|
default=None,
|
|
23
23
|
description="Optional headers to include in the request.",
|
|
24
24
|
)
|
|
25
|
-
params:
|
|
25
|
+
params: dict[str, Any] | None = Field(
|
|
26
26
|
default=None,
|
|
27
27
|
description="Optional query parameters to include in the request.",
|
|
28
28
|
)
|
|
29
|
-
data:
|
|
29
|
+
data: dict[str, Any] | str | None = Field(
|
|
30
30
|
default=None,
|
|
31
31
|
description=(
|
|
32
32
|
"Optional request body. Dictionaries are sent as JSON; strings are sent as raw data. "
|
|
33
33
|
"Only supported for POST requests."
|
|
34
34
|
),
|
|
35
35
|
)
|
|
36
|
-
timeout:
|
|
36
|
+
timeout: float | None = Field(
|
|
37
37
|
default=30.0,
|
|
38
38
|
description="Request timeout in seconds.",
|
|
39
39
|
)
|
|
@@ -48,15 +48,15 @@ class X402HttpRequest(X402BaseSkill):
|
|
|
48
48
|
"Provide the method, absolute URL, optional headers, query parameters, and request body. "
|
|
49
49
|
"Returns the response status and body text."
|
|
50
50
|
)
|
|
51
|
-
args_schema:
|
|
51
|
+
args_schema: type[BaseModel] = X402HttpRequestInput
|
|
52
52
|
|
|
53
53
|
async def _arun(
|
|
54
54
|
self,
|
|
55
55
|
method: str,
|
|
56
56
|
url: str,
|
|
57
|
-
headers:
|
|
58
|
-
params:
|
|
59
|
-
data:
|
|
57
|
+
headers: dict[str, str] | None = None,
|
|
58
|
+
params: dict[str, Any] | None = None,
|
|
59
|
+
data: dict[str, Any] | str | None = None,
|
|
60
60
|
timeout: float = 30.0,
|
|
61
61
|
**_: Any,
|
|
62
62
|
) -> str:
|
|
@@ -71,7 +71,7 @@ class X402HttpRequest(X402BaseSkill):
|
|
|
71
71
|
raise ToolException("URL must include scheme and host (absolute URL).")
|
|
72
72
|
|
|
73
73
|
request_headers = dict(headers or {})
|
|
74
|
-
request_kwargs:
|
|
74
|
+
request_kwargs: dict[str, Any] = {
|
|
75
75
|
"url": url,
|
|
76
76
|
"headers": request_headers or None,
|
|
77
77
|
"params": params,
|
intentkit/skills/xmtp/base.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import
|
|
1
|
+
from typing import Literal
|
|
2
2
|
|
|
3
3
|
from intentkit.skills.onchain import IntentKitOnChainSkill
|
|
4
4
|
|
|
@@ -10,7 +10,7 @@ class XmtpBaseTool(IntentKitOnChainSkill):
|
|
|
10
10
|
response_format: Literal["content", "content_and_artifact"] = "content_and_artifact"
|
|
11
11
|
|
|
12
12
|
# ChainId mapping for XMTP wallet_sendCalls (mainnet only)
|
|
13
|
-
CHAIN_ID_HEX_BY_NETWORK:
|
|
13
|
+
CHAIN_ID_HEX_BY_NETWORK: dict[str, str] = {
|
|
14
14
|
"ethereum-mainnet": "0x1", # 1
|
|
15
15
|
"base-mainnet": "0x2105", # 8453
|
|
16
16
|
"arbitrum-mainnet": "0xA4B1", # 42161
|
|
@@ -18,7 +18,7 @@ class XmtpBaseTool(IntentKitOnChainSkill):
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
# CDP network mapping for swap quote API (mainnet only)
|
|
21
|
-
NETWORK_FOR_CDP_MAPPING:
|
|
21
|
+
NETWORK_FOR_CDP_MAPPING: dict[str, str] = {
|
|
22
22
|
"ethereum-mainnet": "ethereum",
|
|
23
23
|
"base-mainnet": "base",
|
|
24
24
|
"arbitrum-mainnet": "arbitrum",
|
intentkit/skills/xmtp/price.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Literal
|
|
1
|
+
from typing import Literal
|
|
2
2
|
|
|
3
3
|
from langchain_core.tools.base import ToolException
|
|
4
4
|
from pydantic import BaseModel, Field
|
|
@@ -24,7 +24,7 @@ class XmtpGetSwapPrice(XmtpBaseTool):
|
|
|
24
24
|
name: str = "xmtp_get_swap_price"
|
|
25
25
|
description: str = "Get an indicative swap price/quote for token pair and amount on Ethereum, Base, Arbitrum, and Optimism mainnet networks using CDP."
|
|
26
26
|
response_format: Literal["content", "content_and_artifact"] = "content"
|
|
27
|
-
args_schema:
|
|
27
|
+
args_schema: type[BaseModel] = SwapPriceInput
|
|
28
28
|
|
|
29
29
|
async def _arun(
|
|
30
30
|
self,
|
intentkit/skills/xmtp/swap.py
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import List, Tuple, Type
|
|
2
|
-
|
|
3
1
|
from pydantic import BaseModel, Field
|
|
4
2
|
|
|
5
3
|
from intentkit.clients.cdp import get_cdp_client
|
|
@@ -42,7 +40,7 @@ class XmtpSwap(XmtpBaseTool):
|
|
|
42
40
|
"Returns a wallet_sendCalls payload that can include an optional approval call and the swap call. "
|
|
43
41
|
"Supports Ethereum, Base, Arbitrum, and Optimism mainnet networks."
|
|
44
42
|
)
|
|
45
|
-
args_schema:
|
|
43
|
+
args_schema: type[BaseModel] = SwapInput
|
|
46
44
|
|
|
47
45
|
async def _arun(
|
|
48
46
|
self,
|
|
@@ -51,7 +49,7 @@ class XmtpSwap(XmtpBaseTool):
|
|
|
51
49
|
to_token: str,
|
|
52
50
|
from_amount: str,
|
|
53
51
|
slippage_bps: int = 100,
|
|
54
|
-
) ->
|
|
52
|
+
) -> tuple[str, list[ChatMessageAttachment]]:
|
|
55
53
|
# Input validation
|
|
56
54
|
if (
|
|
57
55
|
not from_address
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import List, Optional, Tuple, Type
|
|
2
|
-
|
|
3
1
|
from pydantic import BaseModel, Field
|
|
4
2
|
from web3.exceptions import ContractLogicError
|
|
5
3
|
|
|
@@ -16,7 +14,7 @@ class TransferInput(BaseModel):
|
|
|
16
14
|
description="The amount to transfer in human-readable format (e.g., '1.5' for 1.5 ETH, '100' for 100 USDC). Do NOT multiply by token decimals."
|
|
17
15
|
)
|
|
18
16
|
currency: str = Field(description="Currency symbol (e.g., 'ETH', 'USDC', 'NATION')")
|
|
19
|
-
token_contract_address:
|
|
17
|
+
token_contract_address: str | None = Field(
|
|
20
18
|
default=None,
|
|
21
19
|
description="Token contract address for ERC20 transfers. Leave empty for ETH transfers.",
|
|
22
20
|
)
|
|
@@ -31,7 +29,7 @@ class XmtpTransfer(XmtpBaseTool):
|
|
|
31
29
|
that can be sent to users for signing.
|
|
32
30
|
Supports Ethereum, Polygon, Base, Arbitrum, and Optimism networks (both mainnet and testnet).
|
|
33
31
|
"""
|
|
34
|
-
args_schema:
|
|
32
|
+
args_schema: type[BaseModel] = TransferInput
|
|
35
33
|
|
|
36
34
|
async def _arun(
|
|
37
35
|
self,
|
|
@@ -39,8 +37,8 @@ class XmtpTransfer(XmtpBaseTool):
|
|
|
39
37
|
to_address: str,
|
|
40
38
|
amount: str,
|
|
41
39
|
currency: str,
|
|
42
|
-
token_contract_address:
|
|
43
|
-
) ->
|
|
40
|
+
token_contract_address: str | None,
|
|
41
|
+
) -> tuple[str, list[ChatMessageAttachment]]:
|
|
44
42
|
"""Create an XMTP transfer transaction request.
|
|
45
43
|
|
|
46
44
|
Args:
|
intentkit/utils/error.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from
|
|
2
|
+
from collections.abc import Sequence
|
|
3
3
|
|
|
4
4
|
from fastapi.exceptions import RequestValidationError
|
|
5
5
|
from fastapi.utils import is_body_allowed_for_status_code
|
|
@@ -17,7 +17,7 @@ logger = logging.getLogger(__name__)
|
|
|
17
17
|
class RateLimitExceeded(Exception):
|
|
18
18
|
"""Rate limit exceeded"""
|
|
19
19
|
|
|
20
|
-
def __init__(self, message:
|
|
20
|
+
def __init__(self, message: str | None = "Rate limit exceeded"):
|
|
21
21
|
self.message = message
|
|
22
22
|
super().__init__(self.message)
|
|
23
23
|
|
intentkit/utils/logging.py
CHANGED
|
@@ -4,13 +4,11 @@ Logging configuration module
|
|
|
4
4
|
|
|
5
5
|
import json
|
|
6
6
|
import logging
|
|
7
|
-
from
|
|
7
|
+
from collections.abc import Callable
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class JsonFormatter(logging.Formatter):
|
|
11
|
-
def __init__(
|
|
12
|
-
self, filter_func: Optional[Callable[[logging.LogRecord], bool]] = None
|
|
13
|
-
):
|
|
11
|
+
def __init__(self, filter_func: Callable[[logging.LogRecord], bool] | None = None):
|
|
14
12
|
super().__init__()
|
|
15
13
|
self.filter_func = filter_func
|
|
16
14
|
|
intentkit/utils/s3.py
CHANGED
|
@@ -5,7 +5,6 @@ S3 utility module for storing and retrieving images from AWS S3.
|
|
|
5
5
|
import logging
|
|
6
6
|
from enum import Enum
|
|
7
7
|
from io import BytesIO
|
|
8
|
-
from typing import Optional
|
|
9
8
|
|
|
10
9
|
import boto3
|
|
11
10
|
import filetype
|
|
@@ -16,10 +15,10 @@ from mypy_boto3_s3.client import S3Client
|
|
|
16
15
|
logger = logging.getLogger(__name__)
|
|
17
16
|
|
|
18
17
|
# Global variables for S3 configuration
|
|
19
|
-
_bucket:
|
|
20
|
-
_client:
|
|
21
|
-
_prefix:
|
|
22
|
-
_cdn_url:
|
|
18
|
+
_bucket: str | None = None
|
|
19
|
+
_client: S3Client | None = None
|
|
20
|
+
_prefix: str | None = None
|
|
21
|
+
_cdn_url: str | None = None
|
|
23
22
|
|
|
24
23
|
|
|
25
24
|
def init_s3(bucket: str, cdn_url: str, env: str) -> None:
|
|
@@ -114,7 +113,7 @@ async def store_image(url: str, key: str) -> str:
|
|
|
114
113
|
|
|
115
114
|
|
|
116
115
|
async def store_image_bytes(
|
|
117
|
-
image_bytes: bytes, key: str, content_type:
|
|
116
|
+
image_bytes: bytes, key: str, content_type: str | None = None
|
|
118
117
|
) -> str:
|
|
119
118
|
"""
|
|
120
119
|
Store raw image bytes to S3.
|
|
@@ -185,8 +184,8 @@ class FileType(str, Enum):
|
|
|
185
184
|
async def store_file(
|
|
186
185
|
content: bytes,
|
|
187
186
|
key: str,
|
|
188
|
-
content_type:
|
|
189
|
-
size:
|
|
187
|
+
content_type: str | None = None,
|
|
188
|
+
size: int | None = None,
|
|
190
189
|
) -> str:
|
|
191
190
|
"""Store raw file bytes with automatic content type detection."""
|
|
192
191
|
if not _client or not _bucket or not _prefix or not _cdn_url:
|
|
@@ -239,7 +238,7 @@ async def store_file_bytes(
|
|
|
239
238
|
file_bytes: bytes,
|
|
240
239
|
key: str,
|
|
241
240
|
file_type: FileType,
|
|
242
|
-
size_limit_bytes:
|
|
241
|
+
size_limit_bytes: int | None = None,
|
|
243
242
|
) -> str:
|
|
244
243
|
"""
|
|
245
244
|
Store raw file bytes (image, video, sound, pdf) to S3.
|
intentkit/utils/schema.py
CHANGED
|
@@ -5,10 +5,10 @@ resolving $defs references and generating nested schemas.
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
import copy
|
|
8
|
-
from typing import Any
|
|
8
|
+
from typing import Any
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
def resolve_schema_refs(schema:
|
|
11
|
+
def resolve_schema_refs(schema: dict[str, Any]) -> dict[str, Any]:
|
|
12
12
|
"""Recursively resolve $defs references in a JSON schema.
|
|
13
13
|
|
|
14
14
|
This function takes a JSON schema with $defs references and returns
|
|
@@ -44,7 +44,7 @@ def resolve_schema_refs(schema: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
44
44
|
# Extract $defs if they exist
|
|
45
45
|
defs = resolved_schema.pop("$defs", {})
|
|
46
46
|
|
|
47
|
-
def resolve_refs(obj: Any, defs_dict:
|
|
47
|
+
def resolve_refs(obj: Any, defs_dict: dict[str, Any]) -> Any:
|
|
48
48
|
"""Recursively resolve $ref in an object."""
|
|
49
49
|
if isinstance(obj, dict):
|
|
50
50
|
if "$ref" in obj:
|
|
@@ -78,8 +78,8 @@ def resolve_schema_refs(schema: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
78
78
|
|
|
79
79
|
|
|
80
80
|
def create_array_schema(
|
|
81
|
-
item_schema:
|
|
82
|
-
) ->
|
|
81
|
+
item_schema: dict[str, Any], resolve_refs: bool = True
|
|
82
|
+
) -> dict[str, Any]:
|
|
83
83
|
"""Create an array schema with the given item schema.
|
|
84
84
|
|
|
85
85
|
Args:
|
intentkit/utils/slack_alert.py
CHANGED
|
@@ -3,7 +3,6 @@ Slack notification module for sending messages to Slack channels.
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import logging
|
|
6
|
-
from typing import Optional
|
|
7
6
|
|
|
8
7
|
from slack_sdk import WebClient
|
|
9
8
|
from slack_sdk.errors import SlackApiError
|
|
@@ -11,9 +10,9 @@ from slack_sdk.errors import SlackApiError
|
|
|
11
10
|
logger = logging.getLogger(__name__)
|
|
12
11
|
|
|
13
12
|
# Global variables for Slack configuration
|
|
14
|
-
_slack_token:
|
|
15
|
-
_slack_channel:
|
|
16
|
-
_slack_client:
|
|
13
|
+
_slack_token: str | None = None
|
|
14
|
+
_slack_channel: str | None = None
|
|
15
|
+
_slack_client: WebClient | None = None
|
|
17
16
|
|
|
18
17
|
|
|
19
18
|
def init_slack(token: str, channel: str) -> None:
|
|
@@ -36,10 +35,10 @@ def init_slack(token: str, channel: str) -> None:
|
|
|
36
35
|
|
|
37
36
|
def send_slack_message(
|
|
38
37
|
message: str,
|
|
39
|
-
blocks:
|
|
40
|
-
attachments:
|
|
41
|
-
thread_ts:
|
|
42
|
-
channel:
|
|
38
|
+
blocks: list | None = None,
|
|
39
|
+
attachments: list | None = None,
|
|
40
|
+
thread_ts: str | None = None,
|
|
41
|
+
channel: str | None = None,
|
|
43
42
|
):
|
|
44
43
|
"""
|
|
45
44
|
Send a message to a Slack channel.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: intentkit
|
|
3
|
-
Version: 0.8.17.
|
|
3
|
+
Version: 0.8.17.dev2
|
|
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
|