intentkit 0.6.0.dev17__py3-none-any.whl → 0.6.1__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.6.0-dev.17"
6
+ __version__ = "0.6.1"
7
7
  __author__ = "hyacinthus"
8
8
  __email__ = "hyacinthus@gmail.com"
9
9
 
intentkit/clients/cdp.py CHANGED
@@ -114,6 +114,9 @@ class CdpClient:
114
114
  )
115
115
  address = new_account.address
116
116
  logger.info("Created new wallet: %s", address)
117
+
118
+ # close client
119
+ await cdp_client.close()
117
120
  # now it should be created or migrated, store it
118
121
  agent_data.evm_wallet_address = address
119
122
  await agent_data.save()
intentkit/core/node.py CHANGED
@@ -135,9 +135,7 @@ class PreModelNode(RunnableCallable):
135
135
  f"Trimmed messages: {len(messages)} -> {len(trimmed_messages)}"
136
136
  )
137
137
  if len(trimmed_messages) <= 3:
138
- logger.error(
139
- f"Too few messages after trim: {len(trimmed_messages)}"
140
- )
138
+ logger.info(f"Too few messages after trim: {len(trimmed_messages)}")
141
139
  return {}
142
140
  return {
143
141
  "messages": [RemoveMessage(REMOVE_ALL_MESSAGES)] + trimmed_messages,
@@ -114,10 +114,8 @@ async def get_skills(
114
114
  for skill in available_skills:
115
115
  if skill == "get_balance":
116
116
  # Get the account object for the custom GetBalance skill
117
- account = await cdp_client.get_account()
118
117
  tools.append(
119
118
  GetBalance(
120
- account=account,
121
119
  agent_id=agent_id,
122
120
  skill_store=store,
123
121
  )
@@ -1,6 +1,5 @@
1
- from typing import Type
1
+ from typing import Optional, Type
2
2
 
3
- from cdp import EvmServerAccount
4
3
  from pydantic import BaseModel, Field
5
4
 
6
5
  from intentkit.abstracts.skill import SkillStoreABC
@@ -11,8 +10,9 @@ from intentkit.skills.cdp.base import CDPBaseTool
11
10
  class GetBalanceInput(BaseModel):
12
11
  """Input for GetBalance tool."""
13
12
 
14
- asset_id: str = Field(
15
- description="The asset ID to get the balance for (e.g., 'eth', 'usdc', or a valid contract address)"
13
+ asset_id: Optional[str] = Field(
14
+ default=None,
15
+ description="The asset ID to get the balance for (e.g., 'eth', 'usdc', or a valid contract address). If not provided, returns all token balances.",
16
16
  )
17
17
 
18
18
 
@@ -29,81 +29,82 @@ class GetBalance(CDPBaseTool):
29
29
 
30
30
  agent_id: str
31
31
  skill_store: SkillStoreABC
32
- account: EvmServerAccount | None = None
33
32
 
34
33
  name: str = "cdp_get_balance"
35
34
  description: str = (
36
- "This tool will get the balance of all the addresses in the wallet for a given asset. It takes the asset ID as input."
35
+ "This tool will get the balance of all the addresses in the wallet. If asset_id is provided, it returns the balance for that specific asset. "
36
+ "If no asset_id is provided, it returns all token balances. "
37
37
  "Always use 'eth' for the native asset ETH and 'usdc' for USDC. "
38
38
  "Other valid asset IDs are: weth,dai,reth,brett,w,cbeth,axl,iotx,prime,aero,rsr,mog,tbtc,npc,yfi"
39
39
  )
40
40
  args_schema: Type[BaseModel] = GetBalanceInput
41
41
 
42
- async def _arun(self, asset_id: str) -> str:
42
+ async def _arun(self, asset_id: Optional[str] = None) -> str:
43
43
  """Async implementation of the tool to get balance.
44
44
 
45
45
  Args:
46
- asset_id (str): The asset ID to get the balance for.
46
+ asset_id (Optional[str]): The asset ID to get the balance for. If None, returns all token balances.
47
47
 
48
48
  Returns:
49
49
  str: A message containing the balance information or error message.
50
50
  """
51
- try:
52
- if not self.account:
53
- return "Failed to get account."
54
-
55
- # Get network information from CDP client
56
- cdp_client = await get_cdp_client(self.agent_id, self.skill_store)
57
- provider_config = await cdp_client.get_provider_config()
58
- network_id = provider_config.network_id
59
-
60
- # Map network_id to the format expected by the API
61
- network_mapping = {
62
- "base-mainnet": "base",
63
- "base-sepolia": "base-sepolia",
64
- "ethereum": "ethereum",
65
- "ethereum-mainnet": "ethereum",
66
- }
67
- api_network = network_mapping.get(network_id, network_id)
68
-
69
- # For native ETH balance, use the account's balance directly
70
- if asset_id.lower() == "eth":
71
- try:
72
- # Get native balance using Web3
73
- balance_wei = await self.account.get_balance()
74
- balance_eth = balance_wei / (10**18) # Convert from wei to ETH
75
- return f"ETH balance for account {self.account.address}: {balance_eth} ETH"
76
- except Exception as e:
77
- return f"Error getting ETH balance: {e!s}"
78
-
79
- # For other tokens, try the list_token_balances API
51
+ # Get network information from CDP client
52
+ cdp_client = await get_cdp_client(self.agent_id, self.skill_store)
53
+ provider = await cdp_client.get_wallet_provider()
54
+ provider_config = await cdp_client.get_provider_config()
55
+ network_id = provider_config.network_id
56
+
57
+ # Map network_id to the format expected by the API
58
+ network_mapping = {
59
+ "base-mainnet": "base",
60
+ "ethereum-mainnet": "ethereum",
61
+ }
62
+ api_network = network_mapping.get(network_id, network_id)
63
+
64
+ # For native ETH balance, use the account's balance directly
65
+ if asset_id and asset_id.lower() == "eth":
80
66
  try:
81
- # list_token_balances returns all token balances for the account
82
- token_balances = await self.account.list_token_balances(api_network)
67
+ # Get native balance using Web3
68
+ balance_wei = provider.get_balance()
69
+ balance_eth = balance_wei / (10**18) # Convert from wei to ETH
70
+ return f"ETH balance: {balance_eth} ETH"
71
+ except Exception as e:
72
+ return f"Error getting ETH balance: {e!s}"
83
73
 
84
- # Find the balance for the specific asset
85
- target_balance = None
86
- for balance in token_balances:
87
- if balance.asset_id.lower() == asset_id.lower():
88
- target_balance = balance
89
- break
74
+ client = provider.get_client()
75
+ async with client:
76
+ account = await client.evm.get_account(provider.get_address())
77
+ # If no asset_id provided, return all token balances
78
+ if asset_id is None:
79
+ # Get native ETH balance
80
+ balance_wei = provider.get_balance()
81
+ balance_eth = balance_wei / (10**18) # Convert from wei to ETH
90
82
 
91
- if target_balance:
92
- return f"Balance for {asset_id} in account {self.account.address}: {target_balance.amount} {target_balance.asset_id}"
93
- else:
94
- return f"No balance found for asset {asset_id} in account {self.account.address}"
83
+ # Get all token balances
84
+ token_balances = await account.list_token_balances(api_network)
95
85
 
96
- except Exception as e:
97
- return f"Error getting balance for account: {e!s}"
86
+ result = [f"ETH balance: {balance_eth} ETH"]
98
87
 
99
- except Exception as e:
100
- return f"Error getting balance: {str(e)}"
88
+ for balance in token_balances.balances:
89
+ result.append(
90
+ f"{balance.token.symbol} balance: {balance.amount.decimals} {balance.token.name}"
91
+ )
101
92
 
102
- def _run(self, asset_id: str) -> str:
103
- """Sync implementation of the tool.
93
+ return f"All balances for account {account.address}:\n" + "\n".join(
94
+ result
95
+ )
104
96
 
105
- This method is deprecated since we now have native async implementation in _arun.
106
- """
107
- raise NotImplementedError(
108
- "Use _arun instead, which is the async implementation"
109
- )
97
+ # For other tokens, try the list_token_balances API
98
+ token_balances = await account.list_token_balances(api_network)
99
+
100
+ # Find the balance for the specific asset
101
+ target_balance = None
102
+ for balance in token_balances.balances:
103
+ if balance.token.symbol.lower() == asset_id.lower():
104
+ target_balance = balance
105
+ break
106
+
107
+ if target_balance:
108
+ return f"Balance for {asset_id} in account {account.address}: {target_balance.amount.decimals} {target_balance.token.name}"
109
+ else:
110
+ return f"No balance found for asset {asset_id} in account {account.address}"
@@ -16,7 +16,7 @@
16
16
  "type": "boolean",
17
17
  "title": "Enabled",
18
18
  "description": "Whether this skill is enabled",
19
- "default": true
19
+ "default": false
20
20
  },
21
21
  "states": {
22
22
  "type": "object",
@@ -150,4 +150,4 @@
150
150
  }
151
151
  },
152
152
  "additionalProperties": true
153
- }
153
+ }
@@ -1,7 +1,7 @@
1
1
  """Supabase skills."""
2
2
 
3
3
  import logging
4
- from typing import TypedDict
4
+ from typing import NotRequired, TypedDict
5
5
 
6
6
  from intentkit.abstracts.skill import SkillStoreABC
7
7
  from intentkit.skills.base import SkillConfig, SkillState
@@ -34,7 +34,8 @@ class Config(SkillConfig):
34
34
  states: SkillStates
35
35
  supabase_url: str
36
36
  supabase_key: str
37
- public_write_tables: str = ""
37
+ public_write_tables: NotRequired[str]
38
+ public_key: NotRequired[str]
38
39
 
39
40
 
40
41
  async def get_skills(
@@ -21,11 +21,14 @@ class SupabaseBaseTool(IntentKitSkill):
21
21
  def category(self) -> str:
22
22
  return "supabase"
23
23
 
24
- def get_supabase_config(self, config: dict) -> tuple[str, str]:
24
+ def get_supabase_config(
25
+ self, config: dict, context: SkillContext
26
+ ) -> tuple[str, str]:
25
27
  """Get Supabase URL and key from config.
26
28
 
27
29
  Args:
28
30
  config: The agent configuration
31
+ context: The skill context containing configuration and mode info
29
32
 
30
33
  Returns:
31
34
  Tuple of (supabase_url, supabase_key)
@@ -34,7 +37,13 @@ class SupabaseBaseTool(IntentKitSkill):
34
37
  ValueError: If required config is missing
35
38
  """
36
39
  supabase_url = config.get("supabase_url")
37
- supabase_key = config.get("supabase_key")
40
+
41
+ # Use public_key for public operations if available, otherwise fall back to supabase_key
42
+ if context.is_private:
43
+ supabase_key = config.get("supabase_key")
44
+ else:
45
+ # Try public_key first, fall back to supabase_key if public_key doesn't exist
46
+ supabase_key = config.get("public_key") or config.get("supabase_key")
38
47
 
39
48
  if not supabase_url:
40
49
  raise ValueError("supabase_url is required in config")
@@ -51,7 +51,9 @@ class SupabaseDeleteData(SupabaseBaseTool):
51
51
  # Validate table access for public mode
52
52
  self.validate_table_access(table, context)
53
53
 
54
- supabase_url, supabase_key = self.get_supabase_config(context.config)
54
+ supabase_url, supabase_key = self.get_supabase_config(
55
+ context.config, context
56
+ )
55
57
 
56
58
  # Create Supabase client
57
59
  supabase: Client = create_client(supabase_url, supabase_key)
@@ -62,7 +62,9 @@ class SupabaseFetchData(SupabaseBaseTool):
62
62
  ):
63
63
  try:
64
64
  context = self.context_from_config(config)
65
- supabase_url, supabase_key = self.get_supabase_config(context.config)
65
+ supabase_url, supabase_key = self.get_supabase_config(
66
+ context.config, context
67
+ )
66
68
 
67
69
  # Create Supabase client
68
70
  supabase: Client = create_client(supabase_url, supabase_key)
@@ -51,7 +51,9 @@ class SupabaseInsertData(SupabaseBaseTool):
51
51
  # Validate table access for public mode
52
52
  self.validate_table_access(table, context)
53
53
 
54
- supabase_url, supabase_key = self.get_supabase_config(context.config)
54
+ supabase_url, supabase_key = self.get_supabase_config(
55
+ context.config, context
56
+ )
55
57
 
56
58
  # Create Supabase client
57
59
  supabase: Client = create_client(supabase_url, supabase_key)
@@ -46,7 +46,9 @@ class SupabaseInvokeFunction(SupabaseBaseTool):
46
46
  ):
47
47
  try:
48
48
  context = self.context_from_config(config)
49
- supabase_url, supabase_key = self.get_supabase_config(context.config)
49
+ supabase_url, supabase_key = self.get_supabase_config(
50
+ context.config, context
51
+ )
50
52
 
51
53
  # Create Supabase client
52
54
  supabase: Client = create_client(supabase_url, supabase_key)
@@ -143,11 +143,17 @@
143
143
  "x-sensitive": true,
144
144
  "format": "password"
145
145
  },
146
+ "public_key": {
147
+ "type": "string",
148
+ "title": "Public API Key",
149
+ "description": "You can add a key with more restrictive permissions for public skills. If not provided, supabase_key will be used.",
150
+ "x-sensitive": true,
151
+ "format": "password"
152
+ },
146
153
  "public_write_tables": {
147
154
  "type": "string",
148
155
  "title": "Public Write Tables",
149
- "description": "Add tables separated by commas. When insert, update, upsert, or delete operations are enabled for public use, only tables from this list can be used. This list does not restrict the skills executed by the owner or in autonomous chat.",
150
- "default": ""
156
+ "description": "Add tables separated by commas. When insert, update, upsert, or delete operations are enabled for public use, only tables from this list can be used. This list does not restrict the skills executed by the owner or in autonomous chat."
151
157
  }
152
158
  },
153
159
  "required": [
@@ -54,7 +54,9 @@ class SupabaseUpdateData(SupabaseBaseTool):
54
54
  # Validate table access for public mode
55
55
  self.validate_table_access(table, context)
56
56
 
57
- supabase_url, supabase_key = self.get_supabase_config(context.config)
57
+ supabase_url, supabase_key = self.get_supabase_config(
58
+ context.config, context
59
+ )
58
60
 
59
61
  # Create Supabase client
60
62
  supabase: Client = create_client(supabase_url, supabase_key)
@@ -56,7 +56,9 @@ class SupabaseUpsertData(SupabaseBaseTool):
56
56
  # Validate table access for public mode
57
57
  self.validate_table_access(table, context)
58
58
 
59
- supabase_url, supabase_key = self.get_supabase_config(context.config)
59
+ supabase_url, supabase_key = self.get_supabase_config(
60
+ context.config, context
61
+ )
60
62
 
61
63
  # Create Supabase client
62
64
  supabase: Client = create_client(supabase_url, supabase_key)
@@ -14,7 +14,7 @@
14
14
  "type": "boolean",
15
15
  "title": "Enabled",
16
16
  "description": "Whether this skill is enabled",
17
- "default": true
17
+ "default": false
18
18
  },
19
19
  "states": {
20
20
  "type": "object",
@@ -16,7 +16,7 @@
16
16
  "type": "boolean",
17
17
  "title": "Enabled",
18
18
  "description": "Whether this skill is enabled",
19
- "default": true
19
+ "default": false
20
20
  },
21
21
  "states": {
22
22
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intentkit
3
- Version: 0.6.0.dev17
3
+ Version: 0.6.1
4
4
  Summary: Intent-based AI Agent Platform - Core Package
5
5
  Project-URL: Homepage, https://github.com/crestal-network/intentkit
6
6
  Project-URL: Repository, https://github.com/crestal-network/intentkit
@@ -1,4 +1,4 @@
1
- intentkit/__init__.py,sha256=oMztmHNzrAOrgpnkdinwmAhTrI5tdiQ98QZm6WfZWGA,385
1
+ intentkit/__init__.py,sha256=-3Un4YJwcb3e0Uok1j5DREXHBSd5AtyTZOdqwc8ZpuU,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
@@ -8,7 +8,7 @@ intentkit/abstracts/graph.py,sha256=QhaVLtKyo9iTotIWhjgUi7BbmRCcb8yrHCTSq4Hsvnw,
8
8
  intentkit/abstracts/skill.py,sha256=WS8G_XP0Ukw1eUB-dhbx6FrJUbvV4tqzRnkWa2dt9ck,3573
9
9
  intentkit/abstracts/twitter.py,sha256=cEtP7ygR_b-pHdc9i8kBuyooz1cPoGUGwsBHDpowJyY,1262
10
10
  intentkit/clients/__init__.py,sha256=sQ_6_bRC2MPWLPH-skQ3qsEe8ce-dUGL7i8VJOautHg,298
11
- intentkit/clients/cdp.py,sha256=P-JbnrATEJhczsgByhnioZEkYKsMvI6TtCqV8AszXHY,5856
11
+ intentkit/clients/cdp.py,sha256=_CkvnBkzdq7-sFMGct4lz85FpaOoHxOGstWubhClzrA,5921
12
12
  intentkit/clients/twitter.py,sha256=JAc-skIhZZjAFcwzLSTiOPOonteGjrl_JwXoA8IVBmI,16934
13
13
  intentkit/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  intentkit/config/config.py,sha256=6RreVvQH1xuHVOnIJ3AcaRYzdMw1RLo0vYYtvPKvTds,7453
@@ -18,7 +18,7 @@ intentkit/core/api.py,sha256=3GIMJpwduLUSbVPNW6mQVxZncYHH3OlLwdiqFtYtEAE,1208
18
18
  intentkit/core/client.py,sha256=rIwtJVVm-7piXtFNDbeykt9vWdNTecgjW0aA3N-lHnM,1495
19
19
  intentkit/core/credit.py,sha256=fpRe8BRNGGaumAvJFgce1T2zkclExSFWQdoUVnl6k5g,60789
20
20
  intentkit/core/engine.py,sha256=ZoMk8fBUg1fqbELT8Pi8vB667ytFqAT4mQfUNt5g_H0,41192
21
- intentkit/core/node.py,sha256=30ivwRfVRBCMrzgzXlBKfkkobZVbpIon5E4cuavmvvA,9155
21
+ intentkit/core/node.py,sha256=RqAdcR1Fcpgw4k7q9l1Sry8LgcuZWdNxSjOHDcoavCI,9108
22
22
  intentkit/core/prompt.py,sha256=RfLhlUktkB2kCr3wfldqq6ZP2l8heZIMc8jVp31KIyQ,3631
23
23
  intentkit/core/skill.py,sha256=fFM_HVc8Qam2zICb_dH3nRcInEXdtfgzFnL0vvMNz2Y,3830
24
24
  intentkit/models/agent.py,sha256=I9wAsDqdfILpXsj5H0sE0fNwX-enzuEdEvmx-rWt_5E,57221
@@ -63,10 +63,10 @@ intentkit/skills/carv/fetch_news.py,sha256=-xCWPvdVQxI0tEynR8mnjNEFpDkE4k4vNo1A-
63
63
  intentkit/skills/carv/onchain_query.py,sha256=EYV7N2Y-CisyhNVyUm2NbJhdikeFg0Y_a6lToJ5iqDM,6371
64
64
  intentkit/skills/carv/schema.json,sha256=oSReeG50ZJTOxSRniQBJW6KfilscZfp66PiBVOjphS4,5021
65
65
  intentkit/skills/carv/token_info_and_price.py,sha256=R7M5-nkjrauvxaNkORYtLcP9yOYj8PvYu1xRkOBT6lU,4275
66
- intentkit/skills/cdp/__init__.py,sha256=VTBCyycdxsrrUaM8OZIbJDkEXeLDVun5Lo5a8oBW6mg,4489
66
+ intentkit/skills/cdp/__init__.py,sha256=sBuRJdpCrqDQUY576GCph_VS2vnDTGeBnriSfSv7S3A,4399
67
67
  intentkit/skills/cdp/base.py,sha256=BcleKSXm0oNcHYky4uUPCJ3roXxMeTJs2OUS-8MkfMI,581
68
68
  intentkit/skills/cdp/cdp.png,sha256=dxPF6jPbKVfxJNMvbGTmBhXM-rSDvweF06txoX1cIM4,4425
69
- intentkit/skills/cdp/get_balance.py,sha256=IAsU7mQAPSQqCbYQsokkklsqESEVl82VxMt8dEDJ6cM,4211
69
+ intentkit/skills/cdp/get_balance.py,sha256=-mRFJjlc2gQ4LZRMqD6HZqyR_y_rsMl1HlVONoE0kIw,4473
70
70
  intentkit/skills/cdp/schema.json,sha256=3ULPR95TW_Fp2GzzHwmwhAqm8vlxs2tN7fG6WoPY87c,11774
71
71
  intentkit/skills/chainlist/README.md,sha256=FEVQObs2W_oL2kyV-vZpHNwZCCgqm5Kt0sv0GD_Xo1M,958
72
72
  intentkit/skills/chainlist/__init__.py,sha256=2aRC-jXW3WYiR_-RM-_Ls1lby_54ZemZ6qtggntGa-U,1502
@@ -195,7 +195,7 @@ intentkit/skills/firecrawl/clear.py,sha256=oJTeZxqrmB_5bHB_qLPxveuwC20N7WzYjJJeF
195
195
  intentkit/skills/firecrawl/crawl.py,sha256=ZolHI_0VFBk3CasRyQe7pjHDiQ2GAk-w0fKDFqNmSPk,18335
196
196
  intentkit/skills/firecrawl/firecrawl.png,sha256=6GoGlIMYuIDo-TqMlZbD4QYkmxvQ7krqAa5MANumJqk,5065
197
197
  intentkit/skills/firecrawl/query.py,sha256=oe3JzM_QAuhtBAyykQFDEXRYdqlGaQhnAw2v-xqBono,4503
198
- intentkit/skills/firecrawl/schema.json,sha256=2hjb7ixXS4SZkOqCjc6TqIeNYoChpUqIS4_KO1LRKDs,4439
198
+ intentkit/skills/firecrawl/schema.json,sha256=3LfZPS-mdKNh8r7IQ-oAMFAq_xS5dVs9sV8PXeEUh6o,4439
199
199
  intentkit/skills/firecrawl/scrape.py,sha256=HyMiE9j1bmyQFzwLgZbq3RSTnR8l-dL_pYk-wpyD_P0,13699
200
200
  intentkit/skills/firecrawl/utils.py,sha256=Ot_vEg4Z30_BY3Xbh59gb_Tu17tSCmytRw49RGAzZ88,10093
201
201
  intentkit/skills/github/README.md,sha256=SzYGJ9qSPaZl68iD8AQJGKTMLv0keQZesnSK-VhrAfs,1802
@@ -280,26 +280,26 @@ intentkit/skills/slack/schedule_message.py,sha256=NRlHb1MeX_iZ5DzhhaVGCy5jYdFvZv
280
280
  intentkit/skills/slack/schema.json,sha256=zaWSka1GM6_X-xNQBeIAn8lovskZo78stklBoH4qPqA,3382
281
281
  intentkit/skills/slack/send_message.py,sha256=Svq__sfdgA1tuil-FkB_-Fkkwp6ocQpm9DM6mKrjBJo,2542
282
282
  intentkit/skills/slack/slack.jpg,sha256=b_tlvObAfE2KL-D9jhZQ8qAlc1UnXStvF3TENqFtTNE,10818
283
- intentkit/skills/supabase/__init__.py,sha256=adne4kr3r2cHVFY09YXq_MMpdMI2ORBe0OaC29RQXB4,3363
284
- intentkit/skills/supabase/base.py,sha256=C4WYZ-4zW7045TEx0wxW7Wd1DUAB4z2snsb8-r6lHmc,2379
285
- intentkit/skills/supabase/delete_data.py,sha256=MptS05UgRSy5C3Ndlbzd23kFj7P_IuOe403f-IjDsuo,3849
286
- intentkit/skills/supabase/fetch_data.py,sha256=OGe8rfeFDmRDiI0gOIwL-z_5c6NwQFh9fw6p5BsyMFU,4735
287
- intentkit/skills/supabase/insert_data.py,sha256=B423NtKmUW-MzWki9akglvzii98dStHie9ssAYrlwzo,2229
288
- intentkit/skills/supabase/invoke_function.py,sha256=i3AzobqaaEy6P-_QdGjzhyD2UiC1qipOyCKu8hD0rwg,2522
289
- intentkit/skills/supabase/schema.json,sha256=dAKAyp_L94YSh9jj2KCYLJE7XDZQvcrBx-Jud-Shs7Y,4845
283
+ intentkit/skills/supabase/__init__.py,sha256=CCdOpA4g27MxaUrYSMh8KgjHez7De0PNtlscoPX7Hh8,3417
284
+ intentkit/skills/supabase/base.py,sha256=o0SQwbBC_enC6-u2euDpqd4teZKAHNd55V-tAYuasok,2813
285
+ intentkit/skills/supabase/delete_data.py,sha256=HxQie5GUas6xdRYF_SJ1-Y8K0X1aEeMmkUYG4DFSCdE,3888
286
+ intentkit/skills/supabase/fetch_data.py,sha256=cEmDhG1dJE8PXMxzZIC0ttiKT8iSIj75vN3Vwb1W66s,4774
287
+ intentkit/skills/supabase/insert_data.py,sha256=LqGcQXVWZDtSyK_lYWEJLqYL8ZEK9hDhl2lQHbzHQ-E,2268
288
+ intentkit/skills/supabase/invoke_function.py,sha256=dxCsROgQduJIJkDkop_SRgeMECiAPwAAWE-I8nSfDl0,2561
289
+ intentkit/skills/supabase/schema.json,sha256=u1VMsTJBC2PqZxMeagyiQM2FKwONu03-Bl2zu1DsPdw,5101
290
290
  intentkit/skills/supabase/supabase.svg,sha256=65_80QCtJiKKV4EAuny_xbOD5JlTONEiq9xqO00hDtM,1107
291
- intentkit/skills/supabase/update_data.py,sha256=GM-JtpQHcZbX3fezjWLgdia3zZDKfgz6ZOhHfYSWXI0,3984
292
- intentkit/skills/supabase/upsert_data.py,sha256=STKu3e0n2krpzTOznJPV9hw2__GL6e1foIyNo3hh_xU,2499
291
+ intentkit/skills/supabase/update_data.py,sha256=Hbwsoa52GZNTPIhWdR9vj9VlcPRUn_vCMOYDzmMoPsI,4023
292
+ intentkit/skills/supabase/upsert_data.py,sha256=JgKLFPcQkUwnQhqTZojT4Ae53hYULeGEkQ1gxZJEe-c,2538
293
293
  intentkit/skills/system/__init__.py,sha256=y5sBakdOL1vtXV8DNn-g_MN11CrJ8QrOceoJjD5MzXs,2402
294
294
  intentkit/skills/system/base.py,sha256=Sm4lSNgbxwGK5YimnBfwi3Hc8E1EwSMZIXsCJbIPiLM,700
295
295
  intentkit/skills/system/read_agent_api_key.py,sha256=r7IfD9LCtYocqZsgSpSp7jt-fF00NuvoUwdAhZU-3Fs,3528
296
296
  intentkit/skills/system/regenerate_agent_api_key.py,sha256=55Jz5A6TnbSXc2FG3e7wkIxzkIIfDX0hWOENBTNkFi4,3188
297
- intentkit/skills/system/schema.json,sha256=1JL4UVR1zbLJEDIfRJ4u6Cby8UKEz9xAfvmF2AXjLZY,1461
297
+ intentkit/skills/system/schema.json,sha256=4lv144DEDz9m1NYQdTgke3nDyCrVsGm82QiIoLbIRww,1462
298
298
  intentkit/skills/system/system.svg,sha256=PVbC6r6rOhvht0lB1fcxDNTcbMUa7haHAkJ8rxp7gm0,3740
299
299
  intentkit/skills/tavily/README.md,sha256=VagMkuHrS_ge2Sir9M9CoeqmWc_rysKhTO9-LGICQsA,2840
300
300
  intentkit/skills/tavily/__init__.py,sha256=PDtH-O3fdAPCc3lGMbgcXKK1fDdkTO1CW-40825FtGU,2386
301
301
  intentkit/skills/tavily/base.py,sha256=GRlMhcjleK2kNfBzY2p8vP761dd0ULGBfSqPMX3-tHA,888
302
- intentkit/skills/tavily/schema.json,sha256=2I_RrN9QJIY62350_HEMEi-A6DeiSgmOMGROsi9MqYw,3005
302
+ intentkit/skills/tavily/schema.json,sha256=1RwXTyzocphGhG7akMTvVOwZPQz80xpJoOASOL4oNvw,3006
303
303
  intentkit/skills/tavily/tavily.jpg,sha256=3vJ6v-zgXJY9dwAdMqcB1OB-gQxyc1kFTJthauU0E0k,3758
304
304
  intentkit/skills/tavily/tavily_extract.py,sha256=DajUp-8xcPb1PpkBG7Mq5ZO2QVCMXql0O1JxFhq4Mm0,5794
305
305
  intentkit/skills/tavily/tavily_search.py,sha256=reYLWNu2zXu0fo0se8DG06jnD_tmxjcrh9WIwzTwKHI,5104
@@ -390,7 +390,7 @@ intentkit/utils/random.py,sha256=DymMxu9g0kuQLgJUqalvgksnIeLdS-v0aRk5nQU0mLI,452
390
390
  intentkit/utils/s3.py,sha256=9trQNkKQ5VgxWsewVsV8Y0q_pXzGRvsCYP8xauyUYkg,8549
391
391
  intentkit/utils/slack_alert.py,sha256=s7UpRgyzLW7Pbmt8cKzTJgMA9bm4EP-1rQ5KXayHu6E,2264
392
392
  intentkit/utils/tx.py,sha256=2yLLGuhvfBEY5n_GJ8wmIWLCzn0FsYKv5kRNzw_sLUI,1454
393
- intentkit-0.6.0.dev17.dist-info/METADATA,sha256=ml-xJtWAndVheeiJIfeEz1QKhlerzjoBejx9CXcrK2w,7286
394
- intentkit-0.6.0.dev17.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
395
- intentkit-0.6.0.dev17.dist-info/licenses/LICENSE,sha256=Bln6DhK-LtcO4aXy-PBcdZv2f24MlJFm_qn222biJtE,1071
396
- intentkit-0.6.0.dev17.dist-info/RECORD,,
393
+ intentkit-0.6.1.dist-info/METADATA,sha256=-p9llZmm6JTAunT1u4PldG3e0jANGpjbKU9E-lsCrAI,7280
394
+ intentkit-0.6.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
395
+ intentkit-0.6.1.dist-info/licenses/LICENSE,sha256=Bln6DhK-LtcO4aXy-PBcdZv2f24MlJFm_qn222biJtE,1071
396
+ intentkit-0.6.1.dist-info/RECORD,,