intentkit 0.8.8__py3-none-any.whl → 0.8.9__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 CHANGED
@@ -3,7 +3,7 @@
3
3
  A powerful platform for building AI agents with blockchain and cryptocurrency capabilities.
4
4
  """
5
5
 
6
- __version__ = "0.8.8"
6
+ __version__ = "0.8.9"
7
7
  __author__ = "hyacinthus"
8
8
  __email__ = "hyacinthus@gmail.com"
9
9
 
intentkit/core/prompt.py CHANGED
@@ -111,13 +111,31 @@ def _build_wallet_section(agent: Agent, agent_data: AgentData) -> str:
111
111
 
112
112
  if agent_data.evm_wallet_address and network_id != "solana":
113
113
  wallet_parts.append(
114
- f"Your wallet address in {network_id} is {agent_data.evm_wallet_address}."
114
+ f"Your EVM wallet address is {agent_data.evm_wallet_address}."
115
+ f"You are now in {network_id} network."
115
116
  )
116
117
  if agent_data.solana_wallet_address and network_id == "solana":
117
118
  wallet_parts.append(
118
- f"Your wallet address in {network_id} is {agent_data.solana_wallet_address}."
119
+ f"Your Solana wallet address is {agent_data.solana_wallet_address}."
120
+ f"You are now in {network_id} network."
119
121
  )
120
122
 
123
+ # Add CDP skills prompt if CDP skills are enabled
124
+ if agent.skills and "cdp" in agent.skills:
125
+ cdp_config = agent.skills["cdp"]
126
+ if cdp_config and cdp_config.get("enabled") is True:
127
+ # Check if any CDP skills are in public or private state (not disabled)
128
+ states = cdp_config.get("states", {})
129
+ has_enabled_cdp_skills = any(
130
+ state in ["public", "private"] for state in states.values()
131
+ )
132
+ if has_enabled_cdp_skills:
133
+ wallet_parts.append(
134
+ "Before any token-related operations, use the `token_search` skill to query the token's address and confirm with the user. "
135
+ "If the `token_search` skill is not found, remind the user to enable it. "
136
+ "Do not perform any transfers, swaps, or other transactions without checking and confirming the token address."
137
+ )
138
+
121
139
  return "\n".join(wallet_parts) + ("\n" if wallet_parts else "")
122
140
 
123
141
 
intentkit/skills/base.py CHANGED
@@ -18,8 +18,7 @@ from coinbase_agentkit import (
18
18
  AgentKitConfig,
19
19
  CdpEvmWalletProvider,
20
20
  )
21
- from langchain.tools import StructuredTool
22
- from langchain_core.tools import BaseTool
21
+ from langchain_core.tools import BaseTool, StructuredTool
23
22
  from langchain_core.tools.base import ToolException
24
23
  from langgraph.runtime import get_runtime
25
24
  from pydantic import (
@@ -2,6 +2,7 @@ import logging
2
2
  from typing import Any, Dict, Optional, Type
3
3
 
4
4
  import httpx
5
+ from langchain_core.tools import ToolException
5
6
  from pydantic import BaseModel, Field
6
7
 
7
8
  from intentkit.skills.http.base import HttpBaseTool
@@ -83,12 +84,16 @@ class HttpGet(HttpBaseTool):
83
84
  # Return response content
84
85
  return f"Status: {response.status_code}\nContent: {response.text}"
85
86
 
86
- except httpx.TimeoutException:
87
- return f"Error: Request to {url} timed out after {timeout} seconds"
88
- except httpx.HTTPStatusError as e:
89
- return f"Error: HTTP {e.response.status_code} - {e.response.text}"
90
- except httpx.RequestError as e:
91
- return f"Error: Failed to connect to {url} - {str(e)}"
92
- except Exception as e:
93
- logger.error(f"Unexpected error in HTTP GET request: {e}")
94
- return f"Error: Unexpected error occurred - {str(e)}"
87
+ except httpx.TimeoutException as exc:
88
+ raise ToolException(
89
+ f"Request to {url} timed out after {timeout} seconds"
90
+ ) from exc
91
+ except httpx.HTTPStatusError as exc:
92
+ raise ToolException(
93
+ f"HTTP {exc.response.status_code} - {exc.response.text}"
94
+ ) from exc
95
+ except httpx.RequestError as exc:
96
+ raise ToolException(f"Failed to connect to {url} - {str(exc)}") from exc
97
+ except Exception as exc: # noqa: BLE001
98
+ logger.error("Unexpected error in HTTP GET request", exc_info=exc)
99
+ raise ToolException(f"Unexpected error occurred - {str(exc)}") from exc
@@ -2,6 +2,7 @@ import logging
2
2
  from typing import Any, Dict, Optional, Type, Union
3
3
 
4
4
  import httpx
5
+ from langchain_core.tools import ToolException
5
6
  from pydantic import BaseModel, Field
6
7
 
7
8
  from intentkit.skills.http.base import HttpBaseTool
@@ -100,12 +101,16 @@ class HttpPost(HttpBaseTool):
100
101
  # Return response content
101
102
  return f"Status: {response.status_code}\nContent: {response.text}"
102
103
 
103
- except httpx.TimeoutException:
104
- return f"Error: Request to {url} timed out after {timeout} seconds"
105
- except httpx.HTTPStatusError as e:
106
- return f"Error: HTTP {e.response.status_code} - {e.response.text}"
107
- except httpx.RequestError as e:
108
- return f"Error: Failed to connect to {url} - {str(e)}"
109
- except Exception as e:
110
- logger.error(f"Unexpected error in HTTP POST request: {e}")
111
- return f"Error: Unexpected error occurred - {str(e)}"
104
+ except httpx.TimeoutException as exc:
105
+ raise ToolException(
106
+ f"Request to {url} timed out after {timeout} seconds"
107
+ ) from exc
108
+ except httpx.HTTPStatusError as exc:
109
+ raise ToolException(
110
+ f"HTTP {exc.response.status_code} - {exc.response.text}"
111
+ ) from exc
112
+ except httpx.RequestError as exc:
113
+ raise ToolException(f"Failed to connect to {url} - {str(exc)}") from exc
114
+ except Exception as exc: # noqa: BLE001
115
+ logger.error("Unexpected error in HTTP POST request", exc_info=exc)
116
+ raise ToolException(f"Unexpected error occurred - {str(exc)}") from exc
@@ -2,6 +2,7 @@ import logging
2
2
  from typing import Any, Dict, Optional, Type, Union
3
3
 
4
4
  import httpx
5
+ from langchain_core.tools import ToolException
5
6
  from pydantic import BaseModel, Field
6
7
 
7
8
  from intentkit.skills.http.base import HttpBaseTool
@@ -100,12 +101,16 @@ class HttpPut(HttpBaseTool):
100
101
  # Return response content
101
102
  return f"Status: {response.status_code}\nContent: {response.text}"
102
103
 
103
- except httpx.TimeoutException:
104
- return f"Error: Request to {url} timed out after {timeout} seconds"
105
- except httpx.HTTPStatusError as e:
106
- return f"Error: HTTP {e.response.status_code} - {e.response.text}"
107
- except httpx.RequestError as e:
108
- return f"Error: Failed to connect to {url} - {str(e)}"
109
- except Exception as e:
110
- logger.error(f"Unexpected error in HTTP PUT request: {e}")
111
- return f"Error: Unexpected error occurred - {str(e)}"
104
+ except httpx.TimeoutException as exc:
105
+ raise ToolException(
106
+ f"Request to {url} timed out after {timeout} seconds"
107
+ ) from exc
108
+ except httpx.HTTPStatusError as exc:
109
+ raise ToolException(
110
+ f"HTTP {exc.response.status_code} - {exc.response.text}"
111
+ ) from exc
112
+ except httpx.RequestError as exc:
113
+ raise ToolException(f"Failed to connect to {url} - {str(exc)}") from exc
114
+ except Exception as exc: # noqa: BLE001
115
+ logger.error("Unexpected error in HTTP PUT request", exc_info=exc)
116
+ raise ToolException(f"Unexpected error occurred - {str(exc)}") from exc
@@ -6,6 +6,7 @@ from abc import ABC
6
6
  from typing import Any, Dict, Type
7
7
 
8
8
  import aiohttp
9
+ from langchain_core.tools import ToolException
9
10
  from pydantic import BaseModel, Field
10
11
 
11
12
  from intentkit.abstracts.skill import SkillStoreABC
@@ -29,8 +30,14 @@ class PortfolioBaseTool(IntentKitSkill, ABC):
29
30
  context = self.get_context()
30
31
  skill_config = context.agent.skill_config(self.category)
31
32
  if skill_config.get("api_key_provider") == "agent_owner":
32
- return skill_config.get("api_key")
33
- return self.skill_store.get_system_config("moralis_api_key")
33
+ api_key = skill_config.get("api_key")
34
+ else:
35
+ api_key = self.skill_store.get_system_config("moralis_api_key")
36
+
37
+ if not api_key:
38
+ raise ToolException("Moralis API key is not configured.")
39
+
40
+ return api_key
34
41
 
35
42
  @property
36
43
  def category(self) -> str:
@@ -95,13 +102,23 @@ class PortfolioBaseTool(IntentKitSkill, ABC):
95
102
  ) as response:
96
103
  if response.status >= 400:
97
104
  error_text = await response.text()
98
- logger.error(f"portfolio/base.py: API error: {error_text}")
99
- return {
100
- "error": f"API error: {response.status}",
101
- "details": error_text,
102
- }
103
-
104
- return await response.json()
105
+ logger.error(
106
+ "portfolio/base.py: API error %s for %s", response.status, url
107
+ )
108
+ raise ToolException(
109
+ f"Moralis API error: {response.status} - {error_text}"
110
+ )
111
+
112
+ try:
113
+ return await response.json()
114
+ except aiohttp.ContentTypeError as exc:
115
+ await response.text()
116
+ logger.error(
117
+ "portfolio/base.py: Failed to decode JSON response from %s", url
118
+ )
119
+ raise ToolException(
120
+ "Moralis API returned invalid JSON payload."
121
+ ) from exc
105
122
 
106
123
  def _run(self, *args: Any, **kwargs: Any) -> Any:
107
124
  """Execute the tool synchronously by running the async version in a loop."""
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
  from typing import Any, Dict, Optional, Type
3
3
 
4
+ from langchain_core.tools import ToolException
4
5
  from pydantic import BaseModel, Field
5
6
 
6
7
  from intentkit.skills.portfolio.base import PortfolioBaseTool
@@ -69,11 +70,6 @@ class WalletApprovals(PortfolioBaseTool):
69
70
  f"wallet_approvals.py: Fetching wallet approvals with context {context}"
70
71
  )
71
72
 
72
- # Get the API key from the agent's configuration
73
- api_key = self.get_api_key()
74
- if not api_key:
75
- return {"error": "No Moralis API key provided in the configuration."}
76
-
77
73
  # Build query parameters
78
74
  params = {
79
75
  "chain": chain,
@@ -85,16 +81,19 @@ class WalletApprovals(PortfolioBaseTool):
85
81
  params["cursor"] = cursor
86
82
 
87
83
  # Call Moralis API
84
+ api_key = self.get_api_key()
85
+
88
86
  try:
89
87
  endpoint = f"/wallets/{address}/approvals"
90
88
  return await self._make_request(
91
89
  method="GET", endpoint=endpoint, api_key=api_key, params=params
92
90
  )
93
- except Exception as e:
91
+ except ToolException:
92
+ raise
93
+ except Exception as exc: # noqa: BLE001
94
94
  logger.error(
95
- f"wallet_approvals.py: Error fetching wallet approvals: {e}",
96
- exc_info=True,
95
+ "wallet_approvals.py: Error fetching wallet approvals", exc_info=exc
97
96
  )
98
- return {
99
- "error": "An error occurred while fetching wallet approvals. Please try again later."
100
- }
97
+ raise ToolException(
98
+ "An unexpected error occurred while fetching wallet approvals."
99
+ ) from exc
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
  from typing import Any, Dict, Optional, Type
3
3
 
4
+ from langchain_core.tools import ToolException
4
5
  from pydantic import BaseModel, Field
5
6
 
6
7
  from intentkit.skills.portfolio.base import PortfolioBaseTool
@@ -114,11 +115,6 @@ class WalletHistory(PortfolioBaseTool):
114
115
  f"wallet_history.py: Fetching wallet history with context {context}"
115
116
  )
116
117
 
117
- # Get the API key from the agent's configuration
118
- api_key = self.get_api_key()
119
- if not api_key:
120
- return {"error": "No Moralis API key provided in the configuration."}
121
-
122
118
  # Build query parameters
123
119
  params = {"chain": chain, "limit": limit, "order": order}
124
120
 
@@ -139,15 +135,19 @@ class WalletHistory(PortfolioBaseTool):
139
135
  params["nft_metadata"] = nft_metadata
140
136
 
141
137
  # Call Moralis API
138
+ api_key = self.get_api_key()
139
+
142
140
  try:
143
141
  endpoint = f"/wallets/{address}/history"
144
142
  return await self._make_request(
145
143
  method="GET", endpoint=endpoint, api_key=api_key, params=params
146
144
  )
147
- except Exception as e:
145
+ except ToolException:
146
+ raise
147
+ except Exception as exc: # noqa: BLE001
148
148
  logger.error(
149
- f"wallet_history.py: Error fetching wallet history: {e}", exc_info=True
149
+ "wallet_history.py: Error fetching wallet history", exc_info=exc
150
150
  )
151
- return {
152
- "error": "An error occurred while fetching wallet history. Please try again later."
153
- }
151
+ raise ToolException(
152
+ "An unexpected error occurred while fetching wallet history."
153
+ ) from exc
@@ -1,6 +1,7 @@
1
1
  import logging
2
2
  from typing import Any, Dict, List, Optional, Type
3
3
 
4
+ from langchain_core.tools import ToolException
4
5
  from pydantic import BaseModel, Field
5
6
 
6
7
  from intentkit.skills.portfolio.base import PortfolioBaseTool
@@ -68,11 +69,6 @@ class WalletProfitability(PortfolioBaseTool):
68
69
  f"wallet_profitability.py: Fetching profitability breakdown with context {context}"
69
70
  )
70
71
 
71
- # Get the API key from the agent's configuration
72
- api_key = self.get_api_key()
73
- if not api_key:
74
- return {"error": "No Moralis API key provided in the configuration."}
75
-
76
72
  # Build query parameters
77
73
  params = {
78
74
  "chain": chain,
@@ -84,16 +80,20 @@ class WalletProfitability(PortfolioBaseTool):
84
80
  params["token_addresses"] = token_addresses
85
81
 
86
82
  # Call Moralis API
83
+ api_key = self.get_api_key()
84
+
87
85
  try:
88
86
  endpoint = f"/wallets/{address}/profitability"
89
87
  return await self._make_request(
90
88
  method="GET", endpoint=endpoint, api_key=api_key, params=params
91
89
  )
92
- except Exception as e:
90
+ except ToolException:
91
+ raise
92
+ except Exception as exc: # noqa: BLE001
93
93
  logger.error(
94
- f"wallet_profitability.py: Error fetching profitability breakdown: {e}",
95
- exc_info=True,
94
+ "wallet_profitability.py: Error fetching profitability breakdown",
95
+ exc_info=exc,
96
96
  )
97
- return {
98
- "error": "An error occurred while fetching profitability breakdown. Please try again later."
99
- }
97
+ raise ToolException(
98
+ "An unexpected error occurred while fetching profitability breakdown."
99
+ ) from exc
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intentkit
3
- Version: 0.8.8
3
+ Version: 0.8.9
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
@@ -1,4 +1,4 @@
1
- intentkit/__init__.py,sha256=DcLBjMf2BsKDfY4rNYsjLqXFK_U7Kw38ji8OD6XHZmM,378
1
+ intentkit/__init__.py,sha256=ajUdMj9jFvoDLt79HLJdXDn-8ArUSxtWx_DUJxpc0K4,378
2
2
  intentkit/abstracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  intentkit/abstracts/agent.py,sha256=108gb5W8Q1Sy4G55F2_ZFv2-_CnY76qrBtpIr0Oxxqk,1489
4
4
  intentkit/abstracts/api.py,sha256=ZUc24vaQvQVbbjznx7bV0lbbQxdQPfEV8ZxM2R6wZWo,166
@@ -21,7 +21,7 @@ intentkit/core/client.py,sha256=J5K7f08-ucszBKAbn9K3QNOFKIC__7amTbKYii1jFkI,3056
21
21
  intentkit/core/credit.py,sha256=b4f4T6G6eeBTMe0L_r8awWtXgUnqiog4IUaymDPYym0,75587
22
22
  intentkit/core/engine.py,sha256=cpJfAtq9v_I49OJdnvu1QyOF-oW2V8NPqIpO1j00TlM,38677
23
23
  intentkit/core/node.py,sha256=-QVgmQuMnrzo6cF-4AECOIVT3R4gCnWfQ1EjTm2Sz1g,8791
24
- intentkit/core/prompt.py,sha256=Lu6olwLLwuPpsl5749ffVh2q_aR7SgxmA_xc8LpmRr4,16095
24
+ intentkit/core/prompt.py,sha256=MX4qu2W2Ou7LG0attm6JwlW9c8tD_cY11ZeDl9sx0Vk,17114
25
25
  intentkit/core/scheduler.py,sha256=De84aTHYoIH18YPooB_GckHts5oGFZg-XQZQcqFvlXc,2842
26
26
  intentkit/core/statistics.py,sha256=-IZmxIBzyzZuai7QyfPEY1tx8Q8ydmmcm6eqbSSy_6o,6366
27
27
  intentkit/models/agent.py,sha256=TjAnpefyWAv3BVqQUTrp5Kl4Q7mhUqYGHtSRiUPJyKU,69083
@@ -43,7 +43,7 @@ intentkit/models/skill.py,sha256=n9d1VKWxACe852wMOUC5P7Ps1EUMzIDAYT62Vfs8pQU,208
43
43
  intentkit/models/skills.csv,sha256=lvQg_1byPvJaHToQbEqRZarfYDuXpP4EXeVJVMc8aDs,19132
44
44
  intentkit/models/user.py,sha256=M79XT1dF1Ju5HKdE49RALeV_XXen7mIvmP9Lhsx9NFw,11485
45
45
  intentkit/skills/__init__.py,sha256=WkjmKB4xvy36zyXMroPMf_DTPgQloNS3L73nVnBmuQI,303
46
- intentkit/skills/base.py,sha256=LJC6-zG4vgRvhkqRx-8syXSSjJBYlLLWperZycZt9jo,7727
46
+ intentkit/skills/base.py,sha256=Pw8QFQiJhwnDmhM8GHg61rnYeftXwW7zdJLwCUFqkJ4,7700
47
47
  intentkit/skills/skills.toml,sha256=WQiai9RKIQ2Mqp-eW35_RCn2RW5QLWN3aRgsj7B7OvE,3532
48
48
  intentkit/skills/acolyt/__init__.py,sha256=qHQXFlqyyx4deRxC0rts_ZEEpDVV-vWXPncqI_ZMOi4,2074
49
49
  intentkit/skills/acolyt/acolyt.jpg,sha256=CwrrouzXzYvnHi1rprYruvZqPopG06ppMczEZmZ7D2s,11559
@@ -250,10 +250,10 @@ intentkit/skills/heurist/schema.json,sha256=PPSIvwDfKF0L4lBWHjToBXBe8qaXGZcDFevl
250
250
  intentkit/skills/http/README.md,sha256=vGsKtAm8mgwPSCZKrpWdMPHARbiP3WMtTcV8H2cK_vg,3040
251
251
  intentkit/skills/http/__init__.py,sha256=xcd4PhtDuQSBR7gPWKeRuLSEiCer-6zs2q1XiDE4KEA,2570
252
252
  intentkit/skills/http/base.py,sha256=c4IsTaByJgBtaLVnVxkNEUZYBSVFoTlM2Yv-kG7KYgk,591
253
- intentkit/skills/http/get.py,sha256=Dz8q_PLVdCiLs3xNufHyaEJsejwND2NCQxvXPnrunCo,3252
253
+ intentkit/skills/http/get.py,sha256=ljamE6U8BMBNeSzoe0uyY1te_nMejKt6tgmJbv808QI,3468
254
254
  intentkit/skills/http/http.svg,sha256=VMPivLGjOH2zaxH9mvn7r-T9Z-Td6eO04xRNYQJcAGM,767
255
- intentkit/skills/http/post.py,sha256=Rh3Zclvri_s1gSpCFzjXOoQQns2Clp4JWEcDb4E_FFc,4177
256
- intentkit/skills/http/put.py,sha256=PKe7XuQcomsBrh8XgpkltQpOH-KGO1hJeIo0pKGaVpw,4161
255
+ intentkit/skills/http/post.py,sha256=DiV6PvLd3ZMvlz9I17v05weSsTd68k8D5w6afKBXo3E,4393
256
+ intentkit/skills/http/put.py,sha256=4GbKsSPirdxHwcNkERb-ngNAH3mwr6thYoihHV8XRok,4377
257
257
  intentkit/skills/http/schema.json,sha256=wfGTofOQ0D5PGPwcLGTh4uNwTRTE82hehEa4MD3yKTs,2094
258
258
  intentkit/skills/lifi/README.md,sha256=7Cjn6-VDzXIeNNlt8aXrwErEOk22ofPzk4hCubyT3vQ,8355
259
259
  intentkit/skills/lifi/__init__.py,sha256=U2zOLqnMNS9q-5lDhVOOU2_mch0JowLor5ktneaTa0k,4985
@@ -292,17 +292,17 @@ intentkit/skills/openai/openai.png,sha256=YCWkNHqOrtF-Merr94NOM-xK8mzH9ZvlhqxZul
292
292
  intentkit/skills/openai/schema.json,sha256=_IIfWb8s656-IAeJ7Rj_UccsGTHNkifvq_RpYtvkGGk,3567
293
293
  intentkit/skills/portfolio/README.md,sha256=mqch3w2cmXF9iXC4j1DDMFXAajblVvOBi7L61uTfpzE,3586
294
294
  intentkit/skills/portfolio/__init__.py,sha256=dzndB7DszgZIRVN6oIt-cVQlKmbjd7AN-ElYZihxbNQ,4779
295
- intentkit/skills/portfolio/base.py,sha256=uG-X7vzK5zI6LDilwTR5XsrRDBq3_rp1uUg-O18Enbc,3542
295
+ intentkit/skills/portfolio/base.py,sha256=AWYfy5zrkmlJnWzBvkDevHHEERryhmF7mBPvqm5t_M4,4182
296
296
  intentkit/skills/portfolio/constants.py,sha256=DMs4mc1nnmm2GnJpDzjgUfLhCgRKucB3LsAmTtFW_rU,213
297
297
  intentkit/skills/portfolio/moralis.png,sha256=fUm771g9SmL3SO2m0yeEAzrnT0C_scj_r9rowCvFiVo,11232
298
298
  intentkit/skills/portfolio/schema.json,sha256=D8XkK_OovkY4UTHDXWJOKkzil5AVcI-u48atZHhyDDI,6349
299
299
  intentkit/skills/portfolio/token_balances.py,sha256=t3bJjM3hnPOqyhiZ-TISa5If0vovBjm2V2klq6VJNqI,5600
300
- intentkit/skills/portfolio/wallet_approvals.py,sha256=NSmHmytoNU-GbiYeGDp6UQNiPNZoCiu_r4CFmRVsKqk,3119
300
+ intentkit/skills/portfolio/wallet_approvals.py,sha256=lukYSZh8IjlAAY0RS-aopnaEl_xIoZJZnwcpxNZ5fHc,3044
301
301
  intentkit/skills/portfolio/wallet_defi_positions.py,sha256=ZkLan3LBy0BPjSu8oTmYxc1xaBaenKfP96PR8HrBPEI,2665
302
- intentkit/skills/portfolio/wallet_history.py,sha256=6aAow55rJIHCiPAivzKW60UfZUz1wrTUg1UTN0CnSuc,5448
302
+ intentkit/skills/portfolio/wallet_history.py,sha256=_Wj1-dcFjCRDKDdlhwi98RuXQ2vQl-r8Sqhk9sSnTJo,5390
303
303
  intentkit/skills/portfolio/wallet_net_worth.py,sha256=poX93EJdhikTUcjBR24GpFSug2HBFmZRvCJhIF25KZk,4033
304
304
  intentkit/skills/portfolio/wallet_nfts.py,sha256=uh6JGd0zhMfGh9vFzUD4CLYvbN26Zg9Q0hMGcLSNHqU,4817
305
- intentkit/skills/portfolio/wallet_profitability.py,sha256=3XR1mRT6U9IHlQLzwVdx1RAK8pXcsxErH0EFt33G2mk,3467
305
+ intentkit/skills/portfolio/wallet_profitability.py,sha256=4RNWwJND4Zb9mH24JVLp7ruXJDotOkKU2AnhCYq36zg,3409
306
306
  intentkit/skills/portfolio/wallet_profitability_summary.py,sha256=kGWZ2iVVSmJA8mM40kDcjxTaLqq8Ep9b3ONPUvap_CY,2972
307
307
  intentkit/skills/portfolio/wallet_stats.py,sha256=-HjRuJZbFcqyhww0zIItrknG53UC9FNUwQX9vlE0qMY,2431
308
308
  intentkit/skills/portfolio/wallet_swaps.py,sha256=LWeHmuJLVaUHaaE39uynio2htjXwAv1aZIpTFDPwqqU,4947
@@ -451,7 +451,7 @@ intentkit/utils/random.py,sha256=DymMxu9g0kuQLgJUqalvgksnIeLdS-v0aRk5nQU0mLI,452
451
451
  intentkit/utils/s3.py,sha256=A8Nsx5QJyLsxhj9g7oHNy2-m24tjQUhC9URm8Qb1jFw,10057
452
452
  intentkit/utils/slack_alert.py,sha256=s7UpRgyzLW7Pbmt8cKzTJgMA9bm4EP-1rQ5KXayHu6E,2264
453
453
  intentkit/utils/tx.py,sha256=2yLLGuhvfBEY5n_GJ8wmIWLCzn0FsYKv5kRNzw_sLUI,1454
454
- intentkit-0.8.8.dist-info/METADATA,sha256=BaEfwO2l_z7J_PJDFDR0TZ5PmzdGyfTnIYTO2BPyWmo,6310
455
- intentkit-0.8.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
456
- intentkit-0.8.8.dist-info/licenses/LICENSE,sha256=Bln6DhK-LtcO4aXy-PBcdZv2f24MlJFm_qn222biJtE,1071
457
- intentkit-0.8.8.dist-info/RECORD,,
454
+ intentkit-0.8.9.dist-info/METADATA,sha256=Su1Be4X-LvuhMu0oU3Jk3GUqgehFLwqn8ci7nBUIJmI,6310
455
+ intentkit-0.8.9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
456
+ intentkit-0.8.9.dist-info/licenses/LICENSE,sha256=Bln6DhK-LtcO4aXy-PBcdZv2f24MlJFm_qn222biJtE,1071
457
+ intentkit-0.8.9.dist-info/RECORD,,