intentkit 0.7.5.dev16__py3-none-any.whl → 0.7.5.dev18__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.

@@ -4,6 +4,7 @@ LiFi Skills Utilities
4
4
  Common utilities and helper functions for LiFi token transfer skills.
5
5
  """
6
6
 
7
+ from decimal import ROUND_DOWN, Decimal, InvalidOperation
7
8
  from typing import Any, Dict, List, Optional, Tuple
8
9
 
9
10
  import httpx
@@ -179,7 +180,7 @@ def handle_api_response(
179
180
  from_chain: str,
180
181
  to_token: str,
181
182
  to_chain: str,
182
- ) -> Tuple[Optional[Dict], Optional[str]]:
183
+ ) -> Tuple[Optional[Dict[str, Any]], Optional[str]]:
183
184
  """
184
185
  Handle LiFi API response and return data or error message.
185
186
 
@@ -293,17 +294,20 @@ def convert_chain_to_id(chain: str) -> int:
293
294
 
294
295
 
295
296
  def convert_amount_to_wei(amount: str, token_symbol: str = "ETH") -> str:
296
- """
297
- Convert human-readable amount to wei format for LiFi API.
297
+ """Convert a token amount into the smallest denomination expected by LiFi."""
298
298
 
299
- Args:
300
- amount: Amount in human readable format (e.g., "0.0015")
301
- token_symbol: Token symbol to determine decimals
299
+ if amount is None:
300
+ raise ValueError("Amount is required")
301
+
302
+ normalized_amount = amount.strip()
303
+ if not normalized_amount:
304
+ raise ValueError("Amount cannot be empty")
305
+
306
+ # If the user already provided an integer amount without a decimal point,
307
+ # assume it is already in the token's smallest denomination.
308
+ if normalized_amount.isdigit():
309
+ return normalized_amount
302
310
 
303
- Returns:
304
- Amount in wei format as string
305
- """
306
- # Default decimals for common tokens
307
311
  token_decimals = {
308
312
  "ETH": 18,
309
313
  "USDC": 6,
@@ -318,13 +322,16 @@ def convert_amount_to_wei(amount: str, token_symbol: str = "ETH") -> str:
318
322
  decimals = token_decimals.get(token_symbol.upper(), 18)
319
323
 
320
324
  try:
321
- # Convert string to float, then to wei
322
- amount_float = float(amount)
323
- amount_wei = int(amount_float * (10**decimals))
324
- return str(amount_wei)
325
- except (ValueError, TypeError):
326
- # If conversion fails, return original amount
327
- return amount
325
+ decimal_amount = Decimal(normalized_amount)
326
+ scaled_amount = (decimal_amount * (Decimal(10) ** decimals)).quantize(
327
+ Decimal("1"),
328
+ rounding=ROUND_DOWN,
329
+ )
330
+ return str(int(scaled_amount))
331
+ except (InvalidOperation, ValueError, TypeError):
332
+ # If conversion fails, fall back to the original value to avoid
333
+ # accidentally submitting an incorrect amount.
334
+ return normalized_amount
328
335
 
329
336
 
330
337
  def build_quote_params(
@@ -350,15 +357,12 @@ def build_quote_params(
350
357
  Raises:
351
358
  ValueError: If chain identifiers are not recognized
352
359
  """
353
- # Convert amount to wei format for API
354
- wei_amount = convert_amount_to_wei(from_amount, from_token)
355
-
356
360
  return {
357
361
  "fromChain": convert_chain_to_id(from_chain),
358
362
  "toChain": convert_chain_to_id(to_chain),
359
363
  "fromToken": from_token,
360
364
  "toToken": to_token,
361
- "fromAmount": wei_amount,
365
+ "fromAmount": convert_amount_to_wei(from_amount, from_token),
362
366
  "fromAddress": from_address or DUMMY_ADDRESS,
363
367
  "slippage": slippage,
364
368
  }
@@ -381,36 +385,85 @@ def is_native_token(token_address: str) -> bool:
381
385
  )
382
386
 
383
387
 
384
- def prepare_transaction_params(transaction_request: Dict[str, Any]) -> Dict[str, Any]:
385
- """
386
- Prepare transaction parameters for CDP wallet provider.
388
+ def _convert_hex_or_decimal(value: Any) -> Optional[int]:
389
+ """Convert LiFi transaction numeric values into integers."""
387
390
 
388
- Args:
389
- transaction_request: Transaction request from LiFi API
391
+ if value is None:
392
+ return None
390
393
 
391
- Returns:
392
- Formatted transaction parameters
394
+ if isinstance(value, int):
395
+ return value
396
+
397
+ if isinstance(value, str):
398
+ stripped = value.strip()
399
+ if not stripped:
400
+ return None
401
+ if stripped.startswith("0x"):
402
+ return int(stripped, 16)
403
+ try:
404
+ return int(Decimal(stripped))
405
+ except (InvalidOperation, ValueError):
406
+ return None
407
+
408
+ return None
409
+
410
+
411
+ def prepare_transaction_params(
412
+ transaction_request: Dict[str, Any],
413
+ wallet_address: Optional[str] = None,
414
+ ) -> Dict[str, Any]:
415
+ """Prepare transaction parameters for the CDP wallet provider."""
393
416
 
394
- Raises:
395
- Exception: If required parameters are missing
396
- """
397
417
  to_address = transaction_request.get("to")
398
- value = transaction_request.get("value", "0")
418
+ value = transaction_request.get("value", "0x0")
399
419
  data = transaction_request.get("data", "0x")
400
420
 
401
421
  if not to_address:
402
- raise Exception("No destination address in transaction request")
422
+ raise Exception("Transaction request is missing destination address")
403
423
 
404
- # Convert value to integer if it's a string
405
- if isinstance(value, str):
406
- value = int(value, 16) if value.startswith("0x") else int(value)
407
-
408
- return {
424
+ tx_params: Dict[str, Any] = {
409
425
  "to": Web3.to_checksum_address(to_address),
410
- "value": value,
411
426
  "data": data,
412
427
  }
413
428
 
429
+ int_value = _convert_hex_or_decimal(value)
430
+ if int_value is not None:
431
+ tx_params["value"] = int_value
432
+
433
+ chain_id = _convert_hex_or_decimal(transaction_request.get("chainId"))
434
+ if chain_id is not None:
435
+ tx_params["chainId"] = chain_id
436
+
437
+ gas_limit = _convert_hex_or_decimal(
438
+ transaction_request.get("gasLimit") or transaction_request.get("gas")
439
+ )
440
+ if gas_limit is not None:
441
+ tx_params["gas"] = gas_limit
442
+
443
+ gas_price = _convert_hex_or_decimal(transaction_request.get("gasPrice"))
444
+ if gas_price is not None:
445
+ tx_params["gasPrice"] = gas_price
446
+
447
+ max_fee_per_gas = _convert_hex_or_decimal(transaction_request.get("maxFeePerGas"))
448
+ if max_fee_per_gas is not None:
449
+ tx_params["maxFeePerGas"] = max_fee_per_gas
450
+
451
+ max_priority_fee_per_gas = _convert_hex_or_decimal(
452
+ transaction_request.get("maxPriorityFeePerGas")
453
+ )
454
+ if max_priority_fee_per_gas is not None:
455
+ tx_params["maxPriorityFeePerGas"] = max_priority_fee_per_gas
456
+
457
+ nonce = _convert_hex_or_decimal(transaction_request.get("nonce"))
458
+ if nonce is not None:
459
+ tx_params["nonce"] = nonce
460
+
461
+ from_address = transaction_request.get("from") or wallet_address
462
+ if from_address:
463
+ tx_params["from"] = Web3.to_checksum_address(from_address)
464
+
465
+ return tx_params
466
+
414
467
 
415
468
  def format_quote_basic_info(data: Dict[str, Any]) -> Dict[str, Any]:
416
469
  """
@@ -464,7 +517,7 @@ def format_fees_and_gas(data: Dict[str, Any]) -> Tuple[str, str]:
464
517
 
465
518
  # Extract gas and fee costs
466
519
  gas_costs = estimate.get("gasCosts", [])
467
- fee_costs = []
520
+ fee_costs: List[Dict[str, Any]] = []
468
521
 
469
522
  # Collect fee information from included steps
470
523
  for step in data.get("includedSteps", []):
@@ -476,7 +529,7 @@ def format_fees_and_gas(data: Dict[str, Any]) -> Tuple[str, str]:
476
529
  fees_text = ""
477
530
  if fee_costs:
478
531
  fees_text = "**Fees:**\n"
479
- total_fee_usd = 0
532
+ total_fee_usd = 0.0
480
533
  for fee in fee_costs:
481
534
  fee_name = fee.get("name", "Unknown fee")
482
535
  fee_amount = fee.get("amount", "0")
@@ -508,7 +561,7 @@ def format_fees_and_gas(data: Dict[str, Any]) -> Tuple[str, str]:
508
561
  gas_text = ""
509
562
  if gas_costs:
510
563
  gas_text = "**Gas Cost:**\n"
511
- total_gas_usd = 0
564
+ total_gas_usd = 0.0
512
565
  for gas in gas_costs:
513
566
  gas_amount = gas.get("amount", "0")
514
567
  gas_token = gas.get("token", {}).get("symbol", "ETH")
@@ -628,7 +681,7 @@ def get_explorer_url(chain_id: int, tx_hash: str) -> str:
628
681
 
629
682
 
630
683
  def format_transaction_result(
631
- tx_hash: str, chain_id: int, token_info: dict = None
684
+ tx_hash: str, chain_id: int, token_info: Optional[Dict[str, str]] = None
632
685
  ) -> str:
633
686
  """
634
687
  Format transaction result with explorer link.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intentkit
3
- Version: 0.7.5.dev16
3
+ Version: 0.7.5.dev18
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=nCq4_D7vaKCADBGRl2MWoWd3YHhRu1YKO3bVXKPL618,384
1
+ intentkit/__init__.py,sha256=-mscj0_i9qDAR-j1pgBVo_G85FZS3SZEf7ncYlpJjsI,384
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
@@ -11,17 +11,17 @@ intentkit/clients/cdp.py,sha256=KzRaT1z9iiQicYRLmC8QSz6KMqoPQY9W5UPUSC2Gz7w,6527
11
11
  intentkit/clients/twitter.py,sha256=Lfa7srHOFnY96SXcElW0jfg7XKS_WliWnXjPZEe6SQc,18976
12
12
  intentkit/clients/web3.py,sha256=A-w4vBPXHpDh8svsEFj_LkmvRgoDTZw4E-84S-UC9ws,1023
13
13
  intentkit/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- intentkit/config/config.py,sha256=raZi4bISv3g0-5Ze_uaLj5ks6MBQUjFwy7BSChkaydQ,8921
14
+ intentkit/config/config.py,sha256=qtAU5XdPJSCrDPPIN-232RlSYEGgHvYbNALvabvd7zQ,8806
15
15
  intentkit/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  intentkit/core/agent.py,sha256=d7P116dG4rmBu0zUF_WuHhcUgUOnaOhhYVzgKymOKZI,32047
17
17
  intentkit/core/api.py,sha256=WfoaHNquujYJIpNPuTR1dSaaxog0S3X2W4lG9Ehmkm4,3284
18
18
  intentkit/core/chat.py,sha256=YN20CnDazWLjiOZFOHgV6uHmA2DKkvPCsD5Q5sfNcZg,1685
19
19
  intentkit/core/client.py,sha256=J5K7f08-ucszBKAbn9K3QNOFKIC__7amTbKYii1jFkI,3056
20
20
  intentkit/core/credit.py,sha256=b4f4T6G6eeBTMe0L_r8awWtXgUnqiog4IUaymDPYym0,75587
21
- intentkit/core/engine.py,sha256=Ecwt-ZuPrJmFcN69P6dsEs_NeCyp52HJ9TL_8X2cP34,36086
21
+ intentkit/core/engine.py,sha256=r5d_DmekzuGzpwbh-zkSQCa8-zO4WlnoIvukxxmDmJ8,36963
22
22
  intentkit/core/node.py,sha256=7h9zgDSd928bzUi3m3EZnKkhbwqlbRAQUr_uz7gKB5Y,8880
23
23
  intentkit/core/prompt.py,sha256=idNx1ono4Maz2i6IBKfaKOBBbEQiWbaSxr2Eb1vZTI4,15482
24
- intentkit/models/agent.py,sha256=pZUbIRd56Ti1irCTH6yOf7SXskqoeBENe8aWG98sZ5k,65133
24
+ intentkit/models/agent.py,sha256=yXulE5vlOOku6DSiid_Jp6OCfqy3-XN47rmKax5xX1w,67582
25
25
  intentkit/models/agent_data.py,sha256=5zq3EPKnygT2P1OHc2IfEmL8hXkjeBND6sJ0JJsvQJg,28370
26
26
  intentkit/models/agent_public.json,sha256=0X8Bd2WOobDJLsok8avWNzmzu4uvKSGEyy6Myn53eT4,2802
27
27
  intentkit/models/agent_schema.json,sha256=hFGUE57JIiN8V4olgLf2LBXPejA2QLiQoFc6riM1UFo,17139
@@ -34,7 +34,7 @@ intentkit/models/db.py,sha256=1uX1DJZGMx9A3lq6WKSTSwpXhWgWaiki55-iiED8BYM,5082
34
34
  intentkit/models/db_mig.py,sha256=vT6Tanm-BHC2T7dTztuB1UG494EFBAlHADKsNzR6xaQ,3577
35
35
  intentkit/models/generator.py,sha256=lyZu9U9rZUGkqd_QT5SAhay9DY358JJY8EhDSpN8I1M,10298
36
36
  intentkit/models/llm.csv,sha256=J2DsXgnmkPeOw-3OBKRg4q8uGlFYxNW8ebwi4OrOupw,2598
37
- intentkit/models/llm.py,sha256=veuUmJ-tkFQjaXTYRm5p3WQjGw83m-QUdzv9531nzzU,20372
37
+ intentkit/models/llm.py,sha256=-RkShXkUyz1zec892zve2SvPktVl7its1l3O8cLuMrM,20336
38
38
  intentkit/models/redis.py,sha256=UoN8jqLREO1VO9_w6m-JhldpP19iEHj4TiGVCMutQW4,3702
39
39
  intentkit/models/skill.py,sha256=-6FYzjnh2OL-l-K69dBUhmQZ-acJnXTRYBSOcjzy5mI,20329
40
40
  intentkit/models/skills.csv,sha256=lvQg_1byPvJaHToQbEqRZarfYDuXpP4EXeVJVMc8aDs,19132
@@ -195,16 +195,16 @@ intentkit/skills/elfa/stats.py,sha256=aCu-EklosttykdRRP-R5yZGsokm-SCZ55xNZGy97ET
195
195
  intentkit/skills/elfa/tokens.py,sha256=bgOuP83d16APpmKl_-2Yha-_diurG3ArYZknRYjCZhs,4537
196
196
  intentkit/skills/elfa/utils.py,sha256=y6hfiWBu31vMXc4rrdUpbWQzmMQLk_L-iaAQLUs8dJM,4388
197
197
  intentkit/skills/enso/README.md,sha256=jsLXPjW16rvBDd7soVms0IpH2LmQLRjtbRlzDMOLkso,1998
198
- intentkit/skills/enso/__init__.py,sha256=WLds5RVOMdswAtO8Dwkzl2H18gym0vpfa-CeF19PC0I,3076
199
- intentkit/skills/enso/base.py,sha256=6AcmvFzzK0EXlXrf1GiaZI0FJQhktuQmKbh6OH8hqOc,2992
200
- intentkit/skills/enso/best_yield.py,sha256=rwACME3iY9BU3r-bOF16YFikGV5038skjuVU0gqfPo4,9996
198
+ intentkit/skills/enso/__init__.py,sha256=yrOZ9rxsnz73WgRGN1rJC22trd7APmh4SnhKdpN5gb8,3089
199
+ intentkit/skills/enso/base.py,sha256=81U-uXVDLLO4IfgXWf-g6V_W_vwLn0W4WdT4lDxy-oY,3887
200
+ intentkit/skills/enso/best_yield.py,sha256=-dxvrqf6IltKRd3KyCQ6BdB2JoTgBAG361LxCWO0-ww,10009
201
201
  intentkit/skills/enso/enso.jpg,sha256=QID1rD7c3YVbIgzJeLD7HnNdCJfDy8mItYV784g7wWM,10741
202
- intentkit/skills/enso/networks.py,sha256=Qenyjc_4n1m9y5qxA1YWWzNniDrGSbs-YsXs3ViL5sk,3249
203
- intentkit/skills/enso/prices.py,sha256=zvXAiAejtOF7qLCzLvF_JqtsMX9imxxM0TzBm6E-RuU,3161
204
- intentkit/skills/enso/route.py,sha256=VJrGTLktg7BqKtGftlnkTtFZSCyeUGnEfzMn_01s8E8,12320
202
+ intentkit/skills/enso/networks.py,sha256=SQecevnoqJ7_GDEV94pOsyHc6QP15izdWIcn1lBK1Uk,3250
203
+ intentkit/skills/enso/prices.py,sha256=v2zinSbSCgVzDoMRIjvcUVpWEu4DrehlblB8evhpSto,3288
204
+ intentkit/skills/enso/route.py,sha256=uxdCiGLT7abu6lXyq-XOgTLxq1D70JPhSA-J5LdFB_U,12670
205
205
  intentkit/skills/enso/schema.json,sha256=MvEms4RqX5jT4gs8veYisXGz40K_2d9lkhDBh89viHA,6062
206
- intentkit/skills/enso/tokens.py,sha256=g16cTdK1irdGqrPwpZqw3kybarMinree97YxElmh80E,9569
207
- intentkit/skills/enso/wallet.py,sha256=Tv1FSMnI6fWtX5Jnfk_hyb2CzypvaYbacihaNnwazpQ,14119
206
+ intentkit/skills/enso/tokens.py,sha256=5o6C00J3JmzX4hSlZB3hPej9Ng0JDwLsrFNQeIre7aY,9848
207
+ intentkit/skills/enso/wallet.py,sha256=Wk6MVkr8crpuRS8kcu5QwhhAVG4gixmI8VhfHh_I7U8,10273
208
208
  intentkit/skills/enso/abi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
209
209
  intentkit/skills/enso/abi/approval.py,sha256=IsyQLFxzAttocrtCB2PhbgprA7Vqujzpxvg0hJbeJ00,9867
210
210
  intentkit/skills/enso/abi/erc20.py,sha256=IScqZhHpMt_eFfYtMXw0-w5jptkAK0xsqqUDjbWdb2s,439
@@ -253,13 +253,13 @@ intentkit/skills/http/post.py,sha256=Rh3Zclvri_s1gSpCFzjXOoQQns2Clp4JWEcDb4E_FFc
253
253
  intentkit/skills/http/put.py,sha256=PKe7XuQcomsBrh8XgpkltQpOH-KGO1hJeIo0pKGaVpw,4161
254
254
  intentkit/skills/http/schema.json,sha256=zryLRzGm4_BpBZmzlmNlyHmWrPFu3bdv0yx0sqrCwa4,2074
255
255
  intentkit/skills/lifi/README.md,sha256=7Cjn6-VDzXIeNNlt8aXrwErEOk22ofPzk4hCubyT3vQ,8355
256
- intentkit/skills/lifi/__init__.py,sha256=m7fim2BabigaWsv1VNr0TtVlvkNbHwvFvohPZTQHw_8,4944
256
+ intentkit/skills/lifi/__init__.py,sha256=U2zOLqnMNS9q-5lDhVOOU2_mch0JowLor5ktneaTa0k,4985
257
257
  intentkit/skills/lifi/base.py,sha256=8MrF3vJmh0ZmVHoGZ51K73u0o9AljVV1bch6ji9rS5E,584
258
258
  intentkit/skills/lifi/lifi.png,sha256=CtFw-pbaD51BqduIOu5zNeGGBigw0e_OQLsZJe3XnsE,7311
259
259
  intentkit/skills/lifi/schema.json,sha256=Hzy4s8LOoI-JOMyo-JAVWqylFFbS6SRAaL7hOmA2_4k,2579
260
- intentkit/skills/lifi/token_execute.py,sha256=lnoRfo17vSXF6-0bfzLliGt_xfkeuCgknCMafjC1Fog,17179
261
- intentkit/skills/lifi/token_quote.py,sha256=p6QrzbxHmKtSMxat_9x3BYu2YP3US1I24HyXjeVaLQs,6874
262
- intentkit/skills/lifi/utils.py,sha256=bGefOONC_FtdQ8EGLGwfyBOE0l0TGkFzoWZ_hBgom04,19084
260
+ intentkit/skills/lifi/token_execute.py,sha256=cqaMjKebatW6VjTsegald97LIj88MMIhxg44rTfToWM,17654
261
+ intentkit/skills/lifi/token_quote.py,sha256=OyuRhNrjU0QbDfzyrmU6mEBtBed0xfwldv1R1AoeQvA,6892
262
+ intentkit/skills/lifi/utils.py,sha256=gYd7quenIyqwPl7FOvgGnehmtz4dcf_IiHPWGORPAMM,21057
263
263
  intentkit/skills/moralis/README.md,sha256=zrXuTBBruB4XmQln3ELFagsO1eDnaZnCKqvEdvZPl94,13253
264
264
  intentkit/skills/moralis/__init__.py,sha256=n72KfGiehQ1HSQiOrMcNIUwnaFpwg2TwKeN9zxCkaaE,3301
265
265
  intentkit/skills/moralis/api.py,sha256=48MGdHYF29Q77OQOGdAVWFogyuZQ3SbmfrJW6mUxoT0,7935
@@ -450,7 +450,7 @@ intentkit/utils/random.py,sha256=DymMxu9g0kuQLgJUqalvgksnIeLdS-v0aRk5nQU0mLI,452
450
450
  intentkit/utils/s3.py,sha256=A8Nsx5QJyLsxhj9g7oHNy2-m24tjQUhC9URm8Qb1jFw,10057
451
451
  intentkit/utils/slack_alert.py,sha256=s7UpRgyzLW7Pbmt8cKzTJgMA9bm4EP-1rQ5KXayHu6E,2264
452
452
  intentkit/utils/tx.py,sha256=2yLLGuhvfBEY5n_GJ8wmIWLCzn0FsYKv5kRNzw_sLUI,1454
453
- intentkit-0.7.5.dev16.dist-info/METADATA,sha256=X35JNufFbTXZDWVHPidXBIuQ5jSwEkSIHt2IiUlEwHg,6360
454
- intentkit-0.7.5.dev16.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
455
- intentkit-0.7.5.dev16.dist-info/licenses/LICENSE,sha256=Bln6DhK-LtcO4aXy-PBcdZv2f24MlJFm_qn222biJtE,1071
456
- intentkit-0.7.5.dev16.dist-info/RECORD,,
453
+ intentkit-0.7.5.dev18.dist-info/METADATA,sha256=PVVfMq5it9ZfQ2dcbtvqX9Zem0OGfa1vInUjVgl0Lg0,6360
454
+ intentkit-0.7.5.dev18.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
455
+ intentkit-0.7.5.dev18.dist-info/licenses/LICENSE,sha256=Bln6DhK-LtcO4aXy-PBcdZv2f24MlJFm_qn222biJtE,1071
456
+ intentkit-0.7.5.dev18.dist-info/RECORD,,