intentkit 0.12.1.dev1__tar.gz → 0.12.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (592) hide show
  1. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/PKG-INFO +1 -1
  2. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/__init__.py +1 -1
  3. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/graph.py +1 -0
  4. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/config/config.py +3 -0
  5. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/__init__.py +2 -0
  6. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/expense.py +54 -0
  7. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/engine.py +2 -0
  8. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/prompt.py +5 -3
  9. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/__init__.py +10 -0
  10. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/create_activity.py +38 -13
  11. intentkit-0.12.2/intentkit/core/system_skills/read_webpage.py +183 -0
  12. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent_activity.py +10 -1
  13. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/llm_picker.py +29 -0
  14. intentkit-0.12.2/intentkit/utils/opengraph.py +108 -0
  15. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/pyproject.toml +1 -1
  16. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/.gitignore +0 -0
  17. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/LICENSE +0 -0
  18. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/.dockerignore +0 -0
  19. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/LICENSE +0 -0
  20. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/MANIFEST.in +0 -0
  21. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/README.md +0 -0
  22. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/__init__.py +0 -0
  23. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/agent.py +0 -0
  24. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/api.py +0 -0
  25. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/engine.py +0 -0
  26. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/skill.py +0 -0
  27. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/twitter.py +0 -0
  28. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/abstracts/wallet.py +0 -0
  29. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/clients/__init__.py +0 -0
  30. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/clients/s3.py +0 -0
  31. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/clients/twitter.py +0 -0
  32. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/config/__init__.py +0 -0
  33. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/config/base.py +0 -0
  34. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/config/db.py +0 -0
  35. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/config/db_mig.py +0 -0
  36. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/config/redis.py +0 -0
  37. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/__init__.py +0 -0
  38. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/account_checking.py +0 -0
  39. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/__init__.py +0 -0
  40. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/analytics.py +0 -0
  41. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/constants.py +0 -0
  42. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/management.py +0 -0
  43. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/notifications.py +0 -0
  44. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/public_info.py +0 -0
  45. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/queries.py +0 -0
  46. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent/wallet.py +0 -0
  47. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent_activity.py +0 -0
  48. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/agent_post.py +0 -0
  49. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/api.py +0 -0
  50. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/asset.py +0 -0
  51. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/autonomous.py +0 -0
  52. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/avatar.py +0 -0
  53. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/budget.py +0 -0
  54. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/chat.py +0 -0
  55. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/cleanup.py +0 -0
  56. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/client.py +0 -0
  57. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/adjustment.py +0 -0
  58. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/base.py +0 -0
  59. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/list_events.py +0 -0
  60. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/recharge.py +0 -0
  61. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/refill.py +0 -0
  62. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/reward.py +0 -0
  63. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/credit/withdraw.py +0 -0
  64. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/draft.py +0 -0
  65. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/draft_chat.py +0 -0
  66. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/__init__.py +0 -0
  67. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/engine.py +0 -0
  68. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/service.py +0 -0
  69. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/__init__.py +0 -0
  70. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/add_autonomous_task.py +0 -0
  71. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/base.py +0 -0
  72. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/delete_autonomous_task.py +0 -0
  73. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/draft.py +0 -0
  74. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/edit_autonomous_task.py +0 -0
  75. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/list_autonomous_tasks.py +0 -0
  76. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/llm.py +0 -0
  77. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/public_info.py +0 -0
  78. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/read_agent_api_key.py +0 -0
  79. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/manager/skills/regenerate_agent_api_key.py +0 -0
  80. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/memory.py +0 -0
  81. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/middleware.py +0 -0
  82. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/scheduler.py +0 -0
  83. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/statistics.py +0 -0
  84. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/base.py +0 -0
  85. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/call_agent.py +0 -0
  86. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/create_post.py +0 -0
  87. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/get_post.py +0 -0
  88. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/recent_activities.py +0 -0
  89. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/recent_posts.py +0 -0
  90. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/system_skills/update_memory.py +0 -0
  91. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/template.py +0 -0
  92. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/core/user.py +0 -0
  93. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/__init__.py +0 -0
  94. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/__init__.py +0 -0
  95. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/agent.py +0 -0
  96. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/autonomous.py +0 -0
  97. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/core.py +0 -0
  98. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/db.py +0 -0
  99. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/public.json +0 -0
  100. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/public_info.py +0 -0
  101. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/response.py +0 -0
  102. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/schema.json +0 -0
  103. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent/user_input.py +0 -0
  104. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent_data.py +0 -0
  105. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/agent_post.py +0 -0
  106. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/app_setting.py +0 -0
  107. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/chat.py +0 -0
  108. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/credit/__init__.py +0 -0
  109. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/credit/account.py +0 -0
  110. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/credit/base.py +0 -0
  111. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/credit/event.py +0 -0
  112. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/credit/price.py +0 -0
  113. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/credit/transaction.py +0 -0
  114. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/draft.py +0 -0
  115. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/llm.csv +0 -0
  116. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/llm.py +0 -0
  117. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/skill.py +0 -0
  118. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/team.py +0 -0
  119. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/template.py +0 -0
  120. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/user.py +0 -0
  121. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/user_data.py +0 -0
  122. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/models/x402_order.py +0 -0
  123. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/__init__.py +0 -0
  124. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/aixbt/README.md +0 -0
  125. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/aixbt/__init__.py +0 -0
  126. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/aixbt/aixbt.jpg +0 -0
  127. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/aixbt/base.py +0 -0
  128. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/aixbt/projects.py +0 -0
  129. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/aixbt/schema.json +0 -0
  130. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/allora/__init__.py +0 -0
  131. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/allora/allora.jpeg +0 -0
  132. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/allora/base.py +0 -0
  133. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/allora/price.py +0 -0
  134. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/allora/schema.json +0 -0
  135. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/base.py +0 -0
  136. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/basename/__init__.py +0 -0
  137. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/basename/base.py +0 -0
  138. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/basename/basename.svg +0 -0
  139. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/basename/constants.py +0 -0
  140. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/basename/register.py +0 -0
  141. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/basename/schema.json +0 -0
  142. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/README.md +0 -0
  143. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/__init__.py +0 -0
  144. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/base.py +0 -0
  145. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/carv.webp +0 -0
  146. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/fetch_news.py +0 -0
  147. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/onchain_query.py +0 -0
  148. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/schema.json +0 -0
  149. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/carv/token_info_and_price.py +0 -0
  150. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/README.md +0 -0
  151. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/__init__.py +0 -0
  152. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/base.py +0 -0
  153. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/casino.png +0 -0
  154. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/deck_draw.py +0 -0
  155. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/deck_shuffle.py +0 -0
  156. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/dice_roll.py +0 -0
  157. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/schema.json +0 -0
  158. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/casino/utils.py +0 -0
  159. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cdp/__init__.py +0 -0
  160. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cdp/base.py +0 -0
  161. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cdp/cdp.png +0 -0
  162. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cdp/get_balance.py +0 -0
  163. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cdp/get_wallet_details.py +0 -0
  164. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cdp/native_transfer.py +0 -0
  165. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cdp/schema.json +0 -0
  166. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/chainlist/README.md +0 -0
  167. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/chainlist/__init__.py +0 -0
  168. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/chainlist/base.py +0 -0
  169. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/chainlist/chain_lookup.py +0 -0
  170. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/chainlist/chainlist.png +0 -0
  171. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/chainlist/schema.json +0 -0
  172. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/common/__init__.py +0 -0
  173. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/common/base.py +0 -0
  174. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/common/common.jpg +0 -0
  175. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/common/current_time.py +0 -0
  176. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/common/schema.json +0 -0
  177. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/README.md +0 -0
  178. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/__init__.py +0 -0
  179. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/base.py +0 -0
  180. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/constants.py +0 -0
  181. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/cookiefun.png +0 -0
  182. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/get_account_details.py +0 -0
  183. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/get_account_feed.py +0 -0
  184. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/get_account_smart_followers.py +0 -0
  185. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/get_sectors.py +0 -0
  186. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/schema.json +0 -0
  187. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cookiefun/search_accounts.py +0 -0
  188. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/__init__.py +0 -0
  189. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/api.py +0 -0
  190. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/base.py +0 -0
  191. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/cryptocompare.png +0 -0
  192. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/fetch_news.py +0 -0
  193. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/fetch_price.py +0 -0
  194. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/fetch_top_exchanges.py +0 -0
  195. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/fetch_top_market_cap.py +0 -0
  196. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/fetch_top_volume.py +0 -0
  197. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/fetch_trading_signals.py +0 -0
  198. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptocompare/schema.json +0 -0
  199. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptopanic/__init__.py +0 -0
  200. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptopanic/base.py +0 -0
  201. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptopanic/cryptopanic.png +0 -0
  202. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptopanic/fetch_crypto_news.py +0 -0
  203. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +0 -0
  204. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/cryptopanic/schema.json +0 -0
  205. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dapplooker/README.md +0 -0
  206. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dapplooker/__init__.py +0 -0
  207. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dapplooker/base.py +0 -0
  208. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dapplooker/dapplooker.jpg +0 -0
  209. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dapplooker/dapplooker_token_data.py +0 -0
  210. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dapplooker/schema.json +0 -0
  211. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/__init__.py +0 -0
  212. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/api.py +0 -0
  213. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/base.py +0 -0
  214. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/__init__.py +0 -0
  215. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +0 -0
  216. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/fetch_block.py +0 -0
  217. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/fetch_current_prices.py +0 -0
  218. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/fetch_first_price.py +0 -0
  219. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/fetch_historical_prices.py +0 -0
  220. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/fetch_price_chart.py +0 -0
  221. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/coins/fetch_price_percentage.py +0 -0
  222. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/config/__init__.py +0 -0
  223. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/config/chains.py +0 -0
  224. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/defillama.jpeg +0 -0
  225. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/fees/__init__.py +0 -0
  226. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/fees/fetch_fees_overview.py +0 -0
  227. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/schema.json +0 -0
  228. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/stablecoins/__init__.py +0 -0
  229. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +0 -0
  230. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +0 -0
  231. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +0 -0
  232. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +0 -0
  233. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tests/__init__.py +0 -0
  234. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tests/api_integration.test.py +0 -0
  235. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tests/api_unit.test.py +0 -0
  236. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tvl/__init__.py +0 -0
  237. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +0 -0
  238. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tvl/fetch_chains.py +0 -0
  239. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tvl/fetch_historical_tvl.py +0 -0
  240. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tvl/fetch_protocol.py +0 -0
  241. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +0 -0
  242. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/tvl/fetch_protocols.py +0 -0
  243. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/volumes/__init__.py +0 -0
  244. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/volumes/fetch_dex_overview.py +0 -0
  245. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/volumes/fetch_dex_summary.py +0 -0
  246. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/volumes/fetch_options_overview.py +0 -0
  247. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/yields/__init__.py +0 -0
  248. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/yields/fetch_pool_chart.py +0 -0
  249. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/defillama/yields/fetch_pools.py +0 -0
  250. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/README.md +0 -0
  251. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/__init__.py +0 -0
  252. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/base.py +0 -0
  253. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/dexscreener.png +0 -0
  254. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/get_pair_info.py +0 -0
  255. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/get_token_pairs.py +0 -0
  256. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/get_tokens_info.py +0 -0
  257. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/model/__init__.py +0 -0
  258. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/model/search_token_response.py +0 -0
  259. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/schema.json +0 -0
  260. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/search_token.py +0 -0
  261. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dexscreener/utils.py +0 -0
  262. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dune_analytics/__init__.py +0 -0
  263. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dune_analytics/base.py +0 -0
  264. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dune_analytics/dune.png +0 -0
  265. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dune_analytics/fetch_kol_buys.py +0 -0
  266. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dune_analytics/fetch_nation_metrics.py +0 -0
  267. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/dune_analytics/schema.json +0 -0
  268. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/README.md +0 -0
  269. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/__init__.py +0 -0
  270. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/base.py +0 -0
  271. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/elfa.jpg +0 -0
  272. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/mention.py +0 -0
  273. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/schema.json +0 -0
  274. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/stats.py +0 -0
  275. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/tokens.py +0 -0
  276. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/elfa/utils.py +0 -0
  277. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/README.md +0 -0
  278. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/__init__.py +0 -0
  279. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/abi/__init__.py +0 -0
  280. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/abi/approval.py +0 -0
  281. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/abi/erc20.py +0 -0
  282. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/abi/route.py +0 -0
  283. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/base.py +0 -0
  284. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/best_yield.py +0 -0
  285. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/enso.jpg +0 -0
  286. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/networks.py +0 -0
  287. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/prices.py +0 -0
  288. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/route.py +0 -0
  289. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/schema.json +0 -0
  290. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/tokens.py +0 -0
  291. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/enso/wallet.py +0 -0
  292. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/__init__.py +0 -0
  293. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/base.py +0 -0
  294. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/constants.py +0 -0
  295. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/erc20.svg +0 -0
  296. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/get_balance.py +0 -0
  297. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/get_token_address.py +0 -0
  298. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/schema.json +0 -0
  299. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/transfer.py +0 -0
  300. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc20/utils.py +0 -0
  301. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/__init__.py +0 -0
  302. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/base.py +0 -0
  303. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/constants.py +0 -0
  304. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/erc721.svg +0 -0
  305. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/get_balance.py +0 -0
  306. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/mint.py +0 -0
  307. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/schema.json +0 -0
  308. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/erc721/transfer.py +0 -0
  309. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/README.md +0 -0
  310. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/__init__.py +0 -0
  311. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/base.py +0 -0
  312. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/clear.py +0 -0
  313. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/crawl.py +0 -0
  314. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/firecrawl.png +0 -0
  315. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/query.py +0 -0
  316. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/schema.json +0 -0
  317. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/scrape.py +0 -0
  318. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/firecrawl/utils.py +0 -0
  319. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/github/README.md +0 -0
  320. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/github/__init__.py +0 -0
  321. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/github/base.py +0 -0
  322. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/github/github.jpg +0 -0
  323. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/github/github_search.py +0 -0
  324. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/github/schema.json +0 -0
  325. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/__init__.py +0 -0
  326. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/base.py +0 -0
  327. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/heurist.png +0 -0
  328. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/image_generation_animagine_xl.py +0 -0
  329. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/image_generation_arthemy_comics.py +0 -0
  330. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/image_generation_arthemy_real.py +0 -0
  331. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/image_generation_braindance.py +0 -0
  332. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +0 -0
  333. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/image_generation_flux_1_dev.py +0 -0
  334. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/image_generation_sdxl.py +0 -0
  335. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/heurist/schema.json +0 -0
  336. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/README.md +0 -0
  337. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/__init__.py +0 -0
  338. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/base.py +0 -0
  339. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/get.py +0 -0
  340. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/http.svg +0 -0
  341. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/post.py +0 -0
  342. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/put.py +0 -0
  343. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/http/schema.json +0 -0
  344. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/jupiter/README.md +0 -0
  345. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/jupiter/__init__.py +0 -0
  346. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/jupiter/base.py +0 -0
  347. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/jupiter/jupiter.png +0 -0
  348. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/jupiter/price.py +0 -0
  349. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/jupiter/schema.json +0 -0
  350. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/jupiter/swap.py +0 -0
  351. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/README.md +0 -0
  352. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/__init__.py +0 -0
  353. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/base.py +0 -0
  354. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/lifi.png +0 -0
  355. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/schema.json +0 -0
  356. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/token_execute.py +0 -0
  357. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/token_quote.py +0 -0
  358. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/lifi/utils.py +0 -0
  359. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/README.md +0 -0
  360. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/__init__.py +0 -0
  361. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/api.py +0 -0
  362. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/base.py +0 -0
  363. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/fetch_chain_portfolio.py +0 -0
  364. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/fetch_nft_portfolio.py +0 -0
  365. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/fetch_solana_portfolio.py +0 -0
  366. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/fetch_wallet_portfolio.py +0 -0
  367. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/moralis.png +0 -0
  368. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/moralis/schema.json +0 -0
  369. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/morpho/__init__.py +0 -0
  370. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/morpho/base.py +0 -0
  371. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/morpho/constants.py +0 -0
  372. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/morpho/deposit.py +0 -0
  373. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/morpho/morpho.svg +0 -0
  374. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/morpho/schema.json +0 -0
  375. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/morpho/withdraw.py +0 -0
  376. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/nation/__init__.py +0 -0
  377. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/nation/base.py +0 -0
  378. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/nation/nation.png +0 -0
  379. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/nation/nft_check.py +0 -0
  380. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/nation/schema.json +0 -0
  381. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/onchain.py +0 -0
  382. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/__init__.py +0 -0
  383. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/base.py +0 -0
  384. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/dalle_image_generation.py +0 -0
  385. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/gpt_avatar_generator.py +0 -0
  386. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/gpt_image_generation.py +0 -0
  387. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/gpt_image_mini_generator.py +0 -0
  388. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/gpt_image_to_image.py +0 -0
  389. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/image_to_text.py +0 -0
  390. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/openai.png +0 -0
  391. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/openai/schema.json +0 -0
  392. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/__init__.py +0 -0
  393. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/add_liquidity.py +0 -0
  394. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/base.py +0 -0
  395. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/constants.py +0 -0
  396. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/get_positions.py +0 -0
  397. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/pancakeswap.png +0 -0
  398. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/quote.py +0 -0
  399. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/remove_liquidity.py +0 -0
  400. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/schema.json +0 -0
  401. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/swap.py +0 -0
  402. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pancakeswap/utils.py +0 -0
  403. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/README.md +0 -0
  404. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/__init__.py +0 -0
  405. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/base.py +0 -0
  406. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/constants.py +0 -0
  407. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/moralis.png +0 -0
  408. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/schema.json +0 -0
  409. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/token_balances.py +0 -0
  410. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_approvals.py +0 -0
  411. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_defi_positions.py +0 -0
  412. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_history.py +0 -0
  413. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_net_worth.py +0 -0
  414. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_nfts.py +0 -0
  415. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_profitability.py +0 -0
  416. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_profitability_summary.py +0 -0
  417. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_stats.py +0 -0
  418. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/portfolio/wallet_swaps.py +0 -0
  419. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pyth/__init__.py +0 -0
  420. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pyth/base.py +0 -0
  421. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pyth/fetch_price.py +0 -0
  422. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pyth/fetch_price_feed.py +0 -0
  423. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pyth/pyth.svg +0 -0
  424. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/pyth/schema.json +0 -0
  425. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/skills.toml +0 -0
  426. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/__init__.py +0 -0
  427. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/base.py +0 -0
  428. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/get_channel.py +0 -0
  429. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/get_message.py +0 -0
  430. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/schedule_message.py +0 -0
  431. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/schema.json +0 -0
  432. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/send_message.py +0 -0
  433. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/slack/slack.jpg +0 -0
  434. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/__init__.py +0 -0
  435. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/base.py +0 -0
  436. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/delete_data.py +0 -0
  437. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/fetch_data.py +0 -0
  438. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/insert_data.py +0 -0
  439. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/invoke_function.py +0 -0
  440. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/schema.json +0 -0
  441. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/supabase.svg +0 -0
  442. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/update_data.py +0 -0
  443. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/supabase/upsert_data.py +0 -0
  444. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/__init__.py +0 -0
  445. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/base.py +0 -0
  446. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/constants.py +0 -0
  447. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/create_flow.py +0 -0
  448. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/delete_flow.py +0 -0
  449. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/schema.json +0 -0
  450. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/superfluid.svg +0 -0
  451. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/superfluid/update_flow.py +0 -0
  452. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/tavily/README.md +0 -0
  453. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/tavily/__init__.py +0 -0
  454. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/tavily/base.py +0 -0
  455. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/tavily/schema.json +0 -0
  456. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/tavily/tavily.jpg +0 -0
  457. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/tavily/tavily_extract.py +0 -0
  458. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/tavily/tavily_search.py +0 -0
  459. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/README.md +0 -0
  460. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/__init__.py +0 -0
  461. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/base.py +0 -0
  462. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/constants.py +0 -0
  463. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/erc20_transfers.py +0 -0
  464. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/moralis.png +0 -0
  465. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/schema.json +0 -0
  466. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/token_analytics.py +0 -0
  467. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/token_price.py +0 -0
  468. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/token/token_search.py +0 -0
  469. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/__init__.py +0 -0
  470. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/base.py +0 -0
  471. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/follow_user.py +0 -0
  472. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/get_mentions.py +0 -0
  473. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/get_timeline.py +0 -0
  474. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/get_user_by_username.py +0 -0
  475. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/get_user_tweets.py +0 -0
  476. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/like_tweet.py +0 -0
  477. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/post_tweet.py +0 -0
  478. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/reply_tweet.py +0 -0
  479. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/retweet.py +0 -0
  480. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/schema.json +0 -0
  481. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/search_tweets.py +0 -0
  482. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/twitter/twitter.png +0 -0
  483. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/ui/__init__.py +0 -0
  484. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/ui/ask_user.py +0 -0
  485. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/ui/base.py +0 -0
  486. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/ui/schema.json +0 -0
  487. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/ui/show_card.py +0 -0
  488. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/ui/ui.svg +0 -0
  489. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/unrealspeech/__init__.py +0 -0
  490. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/unrealspeech/base.py +0 -0
  491. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/unrealspeech/schema.json +0 -0
  492. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/unrealspeech/text_to_speech.py +0 -0
  493. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/unrealspeech/unrealspeech.jpg +0 -0
  494. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_audio/__init__.py +0 -0
  495. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_audio/base.py +0 -0
  496. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_audio/input.py +0 -0
  497. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_audio/schema.json +0 -0
  498. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_audio/venice_audio.py +0 -0
  499. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_audio/venice_logo.jpg +0 -0
  500. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/README.md +0 -0
  501. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/__init__.py +0 -0
  502. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/api.py +0 -0
  503. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/base.py +0 -0
  504. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/config.py +0 -0
  505. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_enhance/README.md +0 -0
  506. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_enhance/__init__.py +0 -0
  507. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_enhance/image_enhance.py +0 -0
  508. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_enhance/image_enhance_base.py +0 -0
  509. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_enhance/image_enhance_input.py +0 -0
  510. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/README.md +0 -0
  511. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/__init__.py +0 -0
  512. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_base.py +0 -0
  513. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +0 -0
  514. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +0 -0
  515. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +0 -0
  516. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_input.py +0 -0
  517. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +0 -0
  518. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +0 -0
  519. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +0 -0
  520. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +0 -0
  521. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_upscale/README.md +0 -0
  522. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_upscale/__init__.py +0 -0
  523. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_upscale/image_upscale.py +0 -0
  524. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_upscale/image_upscale_base.py +0 -0
  525. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_upscale/image_upscale_input.py +0 -0
  526. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_vision/README.md +0 -0
  527. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_vision/__init__.py +0 -0
  528. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_vision/image_vision.py +0 -0
  529. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_vision/image_vision_base.py +0 -0
  530. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/image_vision/image_vision_input.py +0 -0
  531. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/schema.json +0 -0
  532. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/utils.py +0 -0
  533. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/venice_image/venice_image.jpg +0 -0
  534. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/README.md +0 -0
  535. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/__init__.py +0 -0
  536. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/base.py +0 -0
  537. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/document_indexer.py +0 -0
  538. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/langchain.png +0 -0
  539. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/schema.json +0 -0
  540. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/scrape_and_index.py +0 -0
  541. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/utils.py +0 -0
  542. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/web_scraper/website_indexer.py +0 -0
  543. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/weth/__init__.py +0 -0
  544. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/weth/base.py +0 -0
  545. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/weth/constants.py +0 -0
  546. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/weth/schema.json +0 -0
  547. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/weth/unwrap_eth.py +0 -0
  548. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/weth/weth.svg +0 -0
  549. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/weth/wrap_eth.py +0 -0
  550. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/__init__.py +0 -0
  551. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/base.py +0 -0
  552. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/check_price.py +0 -0
  553. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/get_orders.py +0 -0
  554. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/http_request.py +0 -0
  555. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/httpx_compat.py +0 -0
  556. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/pay.py +0 -0
  557. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/schema.json +0 -0
  558. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/x402/x402.webp +0 -0
  559. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/README.md +0 -0
  560. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/__init__.py +0 -0
  561. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/base.py +0 -0
  562. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/price.py +0 -0
  563. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/schema.json +0 -0
  564. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/swap.py +0 -0
  565. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/transfer.py +0 -0
  566. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/skills/xmtp/xmtp.png +0 -0
  567. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/__init__.py +0 -0
  568. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/alert.py +0 -0
  569. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/alert_handler.py +0 -0
  570. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/chain.py +0 -0
  571. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/ens.py +0 -0
  572. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/error.py +0 -0
  573. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/logging.py +0 -0
  574. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/random.py +0 -0
  575. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/s3_setup.py +0 -0
  576. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/schema.py +0 -0
  577. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/slack_alert.py +0 -0
  578. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/telegram_alert.py +0 -0
  579. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/utils/tx.py +0 -0
  580. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/__init__.py +0 -0
  581. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/cdp.py +0 -0
  582. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/evm_wallet.py +0 -0
  583. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/native.py +0 -0
  584. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/privy.py +0 -0
  585. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/privy_client.py +0 -0
  586. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/privy_nonce.py +0 -0
  587. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/privy_safe.py +0 -0
  588. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/privy_signer.py +0 -0
  589. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/privy_types.py +0 -0
  590. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/privy_utils.py +0 -0
  591. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/signer.py +0 -0
  592. {intentkit-0.12.1.dev1 → intentkit-0.12.2}/intentkit/wallets/web3.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intentkit
3
- Version: 0.12.1.dev1
3
+ Version: 0.12.2
4
4
  Summary: Intent-based AI Agent Platform - Core Package
5
5
  Project-URL: Homepage, https://github.com/crestalnetwork/intentkit
6
6
  Project-URL: Repository, https://github.com/crestalnetwork/intentkit
@@ -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.12.1-dev1"
6
+ __version__ = "0.12.2"
7
7
  __author__ = "Ruihua"
8
8
  __email__ = "ruihua@crestal.network"
9
9
 
@@ -38,6 +38,7 @@ class AgentContext(BaseModel):
38
38
  is_private: bool
39
39
  thinking: bool = False
40
40
  payer: str | None = None
41
+ start_message_id: str = ""
41
42
 
42
43
  @property
43
44
  def agent(self) -> Agent:
@@ -204,6 +204,9 @@ class Config:
204
204
  self.tavily_api_key: str | None = self.load("TAVILY_API_KEY")
205
205
  self.cookiefun_api_key: str | None = self.load("COOKIEFUN_API_KEY")
206
206
  self.firecrawl_api_key: str | None = self.load("FIRECRAWL_API_KEY")
207
+ # Cloudflare Browser Rendering
208
+ self.cloudflare_account_id: str | None = self.load("CLOUDFLARE_ACCOUNT_ID")
209
+ self.cloudflare_api_token: str | None = self.load("CLOUDFLARE_API_TOKEN")
207
210
  # Sentry
208
211
  self.sentry_dsn: str | None = self.load("SENTRY_DSN")
209
212
  self.sentry_sample_rate: float = self.load_float("SENTRY_SAMPLE_RATE", 0.1)
@@ -26,6 +26,7 @@ from .base import (
26
26
  from .expense import (
27
27
  expense_message,
28
28
  expense_skill,
29
+ expense_skill_internal_llm,
29
30
  expense_summarize,
30
31
  skill_cost,
31
32
  )
@@ -66,6 +67,7 @@ __all__ = [
66
67
  "adjustment",
67
68
  "expense_message",
68
69
  "expense_skill",
70
+ "expense_skill_internal_llm",
69
71
  "expense_summarize",
70
72
  "fetch_credit_event_by_id",
71
73
  "fetch_credit_event_by_upstream_tx_id",
@@ -28,6 +28,7 @@ from intentkit.models.credit import (
28
28
  TransactionType,
29
29
  UpstreamType,
30
30
  )
31
+ from intentkit.models.llm import LLMModelInfo
31
32
 
32
33
  from .base import FOURPLACES, SkillCost
33
34
 
@@ -1030,3 +1031,56 @@ async def expense_summarize(
1030
1031
 
1031
1032
  # 6. Return credit event model
1032
1033
  return CreditEvent.model_validate(event)
1034
+
1035
+
1036
+ async def expense_skill_internal_llm(
1037
+ user_id: str,
1038
+ agent: Agent,
1039
+ skill_name: str,
1040
+ skill_call_id: str,
1041
+ start_message_id: str,
1042
+ model_id: str,
1043
+ input_tokens: int,
1044
+ output_tokens: int,
1045
+ cached_input_tokens: int = 0,
1046
+ ) -> None:
1047
+ """
1048
+ Bill for an LLM call made internally within a skill execution.
1049
+
1050
+ This is a convenience function for skills that need to call an LLM
1051
+ (e.g. for content cleaning) and bill the user for the token cost.
1052
+ It calculates the cost from token usage and creates a SKILL_CALL credit event.
1053
+
1054
+ Args:
1055
+ user_id: ID of the user to charge
1056
+ agent: Agent instance
1057
+ skill_name: Name of the skill making the LLM call
1058
+ skill_call_id: ID of the tool call (from LangChain runtime)
1059
+ start_message_id: ID of the starting user message
1060
+ model_id: ID of the LLM model used
1061
+ input_tokens: Number of input tokens used
1062
+ output_tokens: Number of output tokens used
1063
+ cached_input_tokens: Number of cached input tokens used
1064
+ """
1065
+ from intentkit.config.db import get_session
1066
+
1067
+ model_info = await LLMModelInfo.get(model_id)
1068
+ llm_cost = await model_info.calculate_cost(
1069
+ input_tokens, output_tokens, cached_input_tokens
1070
+ )
1071
+
1072
+ if llm_cost <= Decimal("0"):
1073
+ return
1074
+
1075
+ async with get_session() as session:
1076
+ await expense_skill(
1077
+ session,
1078
+ user_id,
1079
+ "", # no message_id available from within skill
1080
+ start_message_id,
1081
+ skill_call_id,
1082
+ skill_name,
1083
+ llm_cost,
1084
+ agent,
1085
+ )
1086
+ await session.commit()
@@ -214,6 +214,7 @@ async def build_executor(
214
214
  enable_post=enable_post,
215
215
  enable_long_term_memory=agent.enable_long_term_memory or False,
216
216
  enable_sub_agents=bool(agent.sub_agents),
217
+ search_internet=agent.search_internet,
217
218
  )
218
219
  )
219
220
 
@@ -607,6 +608,7 @@ async def stream_agent_raw(
607
608
  entrypoint=user_message.author_type,
608
609
  is_private=is_private,
609
610
  payer=payer if payment_enabled else None,
611
+ start_message_id=user_message.id,
610
612
  )
611
613
 
612
614
  # run
@@ -59,7 +59,7 @@ def _build_system_skills_section(agent: Agent, context: AgentContext) -> str:
59
59
  )
60
60
  if enable_activity:
61
61
  lines.append(
62
- "- create_activity: Create a new activity on your timeline to record your actions.\n"
62
+ "- create_activity: Publish an activity to your public timeline. ONLY use when user explicitly requests it.\n"
63
63
  "- recent_activities: Retrieve your recent activities to maintain context.\n"
64
64
  )
65
65
  if agent.enable_long_term_memory:
@@ -74,7 +74,9 @@ def _build_system_skills_section(agent: Agent, context: AgentContext) -> str:
74
74
  cautions.append("create_activity")
75
75
  if cautions:
76
76
  lines.append(
77
- f"\nIMPORTANT: Do not use {' or '.join(cautions)} unless the user explicitly asks you to do so.\n\n"
77
+ f"\nCRITICAL RULE: NEVER use {' or '.join(cautions)} unless the user EXPLICITLY asks you to create/publish. "
78
+ f"Do NOT use them proactively, even to log, summarize, or report what you did. "
79
+ f"Violation of this rule is a serious error.\n\n"
78
80
  )
79
81
  else:
80
82
  lines.append("\n")
@@ -319,7 +321,7 @@ def _build_autonomous_task_prompt(agent: Agent, context: AgentContext) -> str:
319
321
  task_info += (
320
322
  ". In autonomous task, you cannot ask the user for clarification or input. "
321
323
  "You must make all decisions on your own. "
322
- "If an error prevents the task from proceeding, use create_activity to report the issue to the user"
324
+ "If an error prevents the task from proceeding, you may use create_activity to report the error only"
323
325
  )
324
326
 
325
327
  return f"{task_info}. "
@@ -9,6 +9,7 @@ from intentkit.core.system_skills.call_agent import CallAgentSkill
9
9
  from intentkit.core.system_skills.create_activity import CreateActivitySkill
10
10
  from intentkit.core.system_skills.create_post import CreatePostSkill
11
11
  from intentkit.core.system_skills.get_post import GetPostSkill
12
+ from intentkit.core.system_skills.read_webpage import ReadWebpageSkill
12
13
  from intentkit.core.system_skills.recent_activities import RecentActivitiesSkill
13
14
  from intentkit.core.system_skills.recent_posts import RecentPostsSkill
14
15
  from intentkit.core.system_skills.update_memory import UpdateMemorySkill
@@ -19,6 +20,7 @@ __all__ = [
19
20
  "CreateActivitySkill",
20
21
  "CreatePostSkill",
21
22
  "GetPostSkill",
23
+ "ReadWebpageSkill",
22
24
  "RecentActivitiesSkill",
23
25
  "RecentPostsSkill",
24
26
  "UpdateMemorySkill",
@@ -31,6 +33,7 @@ _recent_activities = RecentActivitiesSkill()
31
33
  _create_post = CreatePostSkill()
32
34
  _get_post = GetPostSkill()
33
35
  _recent_posts = RecentPostsSkill()
36
+ _read_webpage = ReadWebpageSkill()
34
37
  _update_memory = UpdateMemorySkill()
35
38
 
36
39
 
@@ -39,6 +42,7 @@ def get_system_skills(
39
42
  enable_post: bool = True,
40
43
  enable_long_term_memory: bool = False,
41
44
  enable_sub_agents: bool = False,
45
+ search_internet: bool = True,
42
46
  ) -> list[SystemSkill]:
43
47
  """Get system skills instances filtered by flags.
44
48
 
@@ -47,6 +51,7 @@ def get_system_skills(
47
51
  enable_post: Whether to include post skills. Defaults to True.
48
52
  enable_long_term_memory: Whether to include memory skill. Defaults to False.
49
53
  enable_sub_agents: Whether to include call_agent skill. Defaults to False.
54
+ search_internet: Whether to include read_webpage skill. Defaults to True.
50
55
  """
51
56
  skills: list[SystemSkill] = []
52
57
  if enable_sub_agents:
@@ -60,4 +65,9 @@ def get_system_skills(
60
65
  skills.append(_recent_posts)
61
66
  if enable_long_term_memory:
62
67
  skills.append(_update_memory)
68
+ if search_internet:
69
+ from intentkit.config.config import config
70
+
71
+ if config.cloudflare_account_id and config.cloudflare_api_token:
72
+ skills.append(_read_webpage)
63
73
  return skills
@@ -4,32 +4,50 @@ from typing import override
4
4
 
5
5
  from langchain_core.tools import ArgsSchema
6
6
  from langchain_core.tools.base import ToolException
7
- from pydantic import BaseModel, Field
7
+ from pydantic import BaseModel, Field, field_validator
8
8
 
9
9
  from intentkit.core.agent import get_agent
10
10
  from intentkit.core.agent_activity import create_agent_activity
11
11
  from intentkit.core.system_skills.base import SystemSkill
12
12
  from intentkit.models.agent_activity import AgentActivityCreate
13
+ from intentkit.utils.opengraph import fetch_link_meta
13
14
 
14
15
 
15
16
  class CreateActivityInput(BaseModel):
16
17
  """Input schema for creating an agent activity."""
17
18
 
18
- text: str = Field(..., description="Activity content")
19
- images: list[str] | None = Field(default=None, description="Image URLs")
19
+ text: str = Field(..., description="Activity content, plain text, max 280 bytes")
20
+ images: list[str] | None = Field(
21
+ default=None, max_length=4, description="Image URLs"
22
+ )
23
+
24
+ @field_validator("text")
25
+ @classmethod
26
+ def text_max_280_bytes(cls, v: str) -> str:
27
+ if len(v.encode("utf-8")) > 280:
28
+ raise ValueError("text must be at most 280 bytes")
29
+ return v
30
+
20
31
  video: str | None = Field(default=None, description="Video URL")
21
- post_id: str | None = Field(default=None, description="Related post ID")
32
+ link: str | None = Field(default=None, description="URL to share")
22
33
 
34
+ @field_validator("link")
35
+ @classmethod
36
+ def link_must_be_http(cls, v: str | None) -> str | None:
37
+ if v is not None and not v.startswith(("http://", "https://")):
38
+ raise ValueError("link must start with http:// or https://")
39
+ return v
23
40
 
24
- class CreateActivitySkill(SystemSkill):
25
- """Skill for creating a new agent activity.
26
41
 
27
- This skill allows an agent to create an activity with text content,
28
- optional images, video, and a reference to a related post.
29
- """
42
+ class CreateActivitySkill(SystemSkill):
43
+ """Skill for creating a new agent activity."""
30
44
 
31
45
  name: str = "create_activity"
32
- description: str = "Create an activity with text, optional images, video, or a related post reference."
46
+ description: str = (
47
+ "Publish an activity to your public timeline. "
48
+ "IMPORTANT: Only use this skill when the user EXPLICITLY asks you to create, publish, or post an activity. "
49
+ "Do NOT call this on your own initiative, even to log or summarize what you did."
50
+ )
33
51
  args_schema: ArgsSchema | None = CreateActivityInput
34
52
 
35
53
  @override
@@ -38,7 +56,7 @@ class CreateActivitySkill(SystemSkill):
38
56
  text: str,
39
57
  images: list[str] | None = None,
40
58
  video: str | None = None,
41
- post_id: str | None = None,
59
+ link: str | None = None,
42
60
  ) -> str:
43
61
  """Create a new agent activity.
44
62
 
@@ -46,7 +64,7 @@ class CreateActivitySkill(SystemSkill):
46
64
  text: Content of the activity.
47
65
  images: Optional list of image URLs.
48
66
  video: Optional video URL.
49
- post_id: Optional ID of a related post.
67
+ link: Optional URL to share.
50
68
 
51
69
  Returns:
52
70
  A message indicating success with the activity ID.
@@ -59,6 +77,12 @@ class CreateActivitySkill(SystemSkill):
59
77
  agent_name = agent.name if agent else None
60
78
  agent_picture = agent.picture if agent else None
61
79
 
80
+ link_meta = None
81
+ if link:
82
+ meta = await fetch_link_meta(link)
83
+ if meta:
84
+ link_meta = meta.model_dump()
85
+
62
86
  activity_create = AgentActivityCreate(
63
87
  agent_id=agent_id,
64
88
  agent_name=agent_name,
@@ -66,7 +90,8 @@ class CreateActivitySkill(SystemSkill):
66
90
  text=text,
67
91
  images=images,
68
92
  video=video,
69
- post_id=post_id,
93
+ link=link,
94
+ link_meta=link_meta,
70
95
  )
71
96
 
72
97
  activity = await create_agent_activity(activity_create)
@@ -0,0 +1,183 @@
1
+ """Skill for reading webpage content as markdown via Cloudflare Browser Rendering."""
2
+
3
+ import logging
4
+ import re
5
+ from typing import Annotated, override
6
+
7
+ import httpx
8
+ from langchain_core.tools import ArgsSchema, InjectedToolCallId
9
+ from langchain_core.tools.base import ToolException
10
+ from pydantic import BaseModel, Field
11
+
12
+ from intentkit.core.system_skills.base import SystemSkill
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+ CLEAN_CONTENT_PROMPT = """\
17
+ You are a content extractor. Given raw markdown converted from a webpage, \
18
+ extract only the meaningful, readable content. Remove:
19
+ - Navigation menus, headers, footers, sidebars
20
+ - Cookie notices, ads, promotional banners
21
+ - Repetitive links, social media buttons
22
+ - Any boilerplate or non-content elements
23
+
24
+ Return ONLY the clean, readable main content in markdown format. \
25
+ Do not add any commentary or explanation."""
26
+
27
+
28
+ class ReadWebpageInput(BaseModel):
29
+ """Input schema for reading a webpage."""
30
+
31
+ url: str = Field(..., description="The URL of the webpage to read")
32
+
33
+
34
+ class ReadWebpageSkill(SystemSkill):
35
+ """Skill for reading webpage content as markdown.
36
+
37
+ Uses Cloudflare Browser Rendering REST API to fetch and convert
38
+ webpages to markdown format, then cleans the content with an LLM.
39
+ """
40
+
41
+ name: str = "read_webpage"
42
+ description: str = (
43
+ "Read a webpage and return its content as markdown. "
44
+ "Useful when you need to read and understand the content of a specific URL."
45
+ )
46
+ args_schema: ArgsSchema | None = ReadWebpageInput
47
+
48
+ @override
49
+ async def _arun(
50
+ self,
51
+ url: str,
52
+ tool_call_id: Annotated[str | None, InjectedToolCallId] = None,
53
+ ) -> str:
54
+ """Read a webpage and return its content as markdown.
55
+
56
+ Args:
57
+ url: The URL of the webpage to read.
58
+ tool_call_id: Injected by LangChain runtime.
59
+
60
+ Returns:
61
+ The webpage content converted to markdown.
62
+ """
63
+ try:
64
+ from intentkit.config.config import config
65
+
66
+ account_id = config.cloudflare_account_id
67
+ api_token = config.cloudflare_api_token
68
+ if not account_id or not api_token:
69
+ raise ToolException(
70
+ "Cloudflare Browser Rendering is not configured. "
71
+ "Set CLOUDFLARE_ACCOUNT_ID and CLOUDFLARE_API_TOKEN."
72
+ )
73
+
74
+ # Fetch webpage as markdown via Cloudflare
75
+ raw_markdown = await self._fetch_markdown(account_id, api_token, url)
76
+ if not raw_markdown:
77
+ return "The webpage returned no content."
78
+
79
+ # Clean whitespace: collapse multiple spaces into one
80
+ cleaned = re.sub(r" {2,}", " ", raw_markdown)
81
+ # Also collapse 3+ consecutive newlines into 2
82
+ cleaned = re.sub(r"\n{3,}", "\n\n", cleaned)
83
+
84
+ # Clean content with LLM
85
+ cleaned = await self._clean_with_llm(cleaned, tool_call_id)
86
+
87
+ # Truncate very long content
88
+ max_chars = 50000
89
+ if len(cleaned) > max_chars:
90
+ cleaned = cleaned[:max_chars] + "\n\n... (content truncated)"
91
+
92
+ return cleaned
93
+
94
+ except ToolException:
95
+ raise
96
+ except Exception as e:
97
+ logger.error(f"read_webpage failed: {e}", exc_info=True)
98
+ raise ToolException(f"Failed to read webpage: {e}") from e
99
+
100
+ async def _fetch_markdown(self, account_id: str, api_token: str, url: str) -> str:
101
+ """Fetch a URL and convert to markdown via Cloudflare Browser Rendering."""
102
+ api_url = f"https://api.cloudflare.com/client/v4/accounts/{account_id}/browser-rendering/markdown"
103
+
104
+ async with httpx.AsyncClient(timeout=60) as client:
105
+ response = await client.post(
106
+ api_url,
107
+ json={
108
+ "url": url,
109
+ "rejectRequestPattern": [".*\\.(css|ico|svg|woff2?|ttf|eot)$"],
110
+ },
111
+ headers={
112
+ "Content-Type": "application/json",
113
+ "Authorization": f"Bearer {api_token}",
114
+ },
115
+ )
116
+
117
+ if response.status_code != 200:
118
+ raise ToolException(
119
+ f"Cloudflare API returned status {response.status_code}: {response.text}"
120
+ )
121
+
122
+ data = response.json()
123
+ if not data.get("success"):
124
+ errors = data.get("errors", [])
125
+ raise ToolException(f"Cloudflare API error: {errors}")
126
+
127
+ return data.get("result", "")
128
+
129
+ async def _clean_with_llm(self, content: str, tool_call_id: str | None) -> str:
130
+ """Use a long-context LLM to extract readable content from raw markdown."""
131
+ from intentkit.models.llm import create_llm_model
132
+ from intentkit.models.llm_picker import pick_long_context_model
133
+
134
+ model_id = pick_long_context_model()
135
+ llm_model = await create_llm_model(model_id, temperature=0)
136
+ llm = await llm_model.create_instance()
137
+
138
+ response = await llm.ainvoke(
139
+ [
140
+ {"role": "system", "content": CLEAN_CONTENT_PROMPT},
141
+ {"role": "user", "content": content},
142
+ ]
143
+ )
144
+
145
+ # Bill for the LLM usage
146
+ input_tokens = (
147
+ response.usage_metadata.get("input_tokens", 0)
148
+ if response.usage_metadata
149
+ else 0
150
+ )
151
+ output_tokens = (
152
+ response.usage_metadata.get("output_tokens", 0)
153
+ if response.usage_metadata
154
+ else 0
155
+ )
156
+ cached_input_tokens = (
157
+ response.usage_metadata.get("input_token_details", {}).get("cache_read", 0)
158
+ if response.usage_metadata
159
+ else 0
160
+ )
161
+
162
+ try:
163
+ context = self.get_context()
164
+ payer = context.payer
165
+ if payer and tool_call_id:
166
+ from intentkit.core.credit.expense import expense_skill_internal_llm
167
+
168
+ await expense_skill_internal_llm(
169
+ user_id=payer,
170
+ agent=context.agent,
171
+ skill_name=self.name,
172
+ skill_call_id=tool_call_id,
173
+ start_message_id=context.start_message_id,
174
+ model_id=model_id,
175
+ input_tokens=input_tokens,
176
+ output_tokens=output_tokens,
177
+ cached_input_tokens=cached_input_tokens,
178
+ )
179
+ except Exception as e:
180
+ logger.warning(f"Failed to bill for LLM cleaning: {e}")
181
+
182
+ result = response.content
183
+ return str(result) if result else content
@@ -5,7 +5,7 @@ from epyxid import XID
5
5
  from pydantic import BaseModel, ConfigDict
6
6
  from pydantic import Field as PydanticField
7
7
  from sqlalchemy import DateTime, String, func
8
- from sqlalchemy.dialects.postgresql import ARRAY
8
+ from sqlalchemy.dialects.postgresql import ARRAY, JSONB
9
9
  from sqlalchemy.orm import Mapped, mapped_column
10
10
 
11
11
  from intentkit.config.base import Base
@@ -24,6 +24,11 @@ class AgentActivityBase(BaseModel):
24
24
  list[str] | None, PydanticField(description="List of image URLs")
25
25
  ] = None
26
26
  video: Annotated[str | None, PydanticField(description="Video URL")] = None
27
+ link: Annotated[str | None, PydanticField(description="Link URL")] = None
28
+ link_meta: Annotated[
29
+ dict[str, str | None] | None,
30
+ PydanticField(description="Link metadata"),
31
+ ] = None
27
32
  post_id: Annotated[str | None, PydanticField(description="Related post ID")] = None
28
33
 
29
34
 
@@ -63,6 +68,10 @@ class AgentActivityTable(Base):
63
68
  video: Mapped[str | None] = mapped_column(
64
69
  String, nullable=True, comment="Video URL"
65
70
  )
71
+ link: Mapped[str | None] = mapped_column(String, nullable=True, comment="Link URL")
72
+ link_meta: Mapped[dict[str, str | None] | None] = mapped_column(
73
+ JSONB, nullable=True, comment="Link metadata"
74
+ )
66
75
  post_id: Mapped[str | None] = mapped_column(
67
76
  String, nullable=True, index=True, comment="Related post ID"
68
77
  )
@@ -71,3 +71,32 @@ def pick_default_model() -> str:
71
71
  return model_id
72
72
 
73
73
  raise RuntimeError("No default model available: missing all required API keys")
74
+
75
+
76
+ def pick_long_context_model() -> str:
77
+ """
78
+ Pick the cheapest available model with context length >= 1,000,000 tokens.
79
+ Falls back to any available model if no long-context model is configured.
80
+ """
81
+ # Priority order based on cost (cheapest first), one per provider:
82
+ order: list[tuple[str, LLMProvider]] = [
83
+ ("gemini-3.1-flash-lite-preview", LLMProvider.GOOGLE),
84
+ ("grok-4-1-fast-non-reasoning", LLMProvider.XAI),
85
+ ("qwen/qwen3.5-flash-02-23", LLMProvider.OPENROUTER),
86
+ ("gpt-5-nano", LLMProvider.OPENAI),
87
+ ("deepseek-chat", LLMProvider.DEEPSEEK),
88
+ ]
89
+
90
+ for model_id, provider in order:
91
+ if provider == LLMProvider.OPENAI and config.openai_api_key:
92
+ return model_id
93
+ if provider == LLMProvider.GOOGLE and config.google_api_key:
94
+ return model_id
95
+ if provider == LLMProvider.OPENROUTER and config.openrouter_api_key:
96
+ return model_id
97
+ if provider == LLMProvider.XAI and config.xai_api_key:
98
+ return model_id
99
+ if provider == LLMProvider.DEEPSEEK and config.deepseek_api_key:
100
+ return model_id
101
+
102
+ raise RuntimeError("No long-context model available: missing all required API keys")
@@ -0,0 +1,108 @@
1
+ """OpenGraph metadata fetcher utility."""
2
+
3
+ from html.parser import HTMLParser
4
+ from urllib.parse import urljoin, urlparse
5
+
6
+ import httpx
7
+ from pydantic import BaseModel
8
+
9
+
10
+ class LinkMeta(BaseModel):
11
+ """OpenGraph link metadata."""
12
+
13
+ title: str | None = None
14
+ description: str | None = None
15
+ image: str | None = None
16
+ favicon: str | None = None
17
+
18
+
19
+ class _OGParser(HTMLParser):
20
+ """Parse HTML for OpenGraph meta tags and favicon link tags."""
21
+
22
+ def __init__(self) -> None:
23
+ super().__init__()
24
+ self.og: dict[str, str] = {}
25
+ self.favicon: str | None = None
26
+ self.title: str | None = None
27
+ self._in_title = False
28
+ self._title_parts: list[str] = []
29
+
30
+ def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None:
31
+ attr_dict = {k: v for k, v in attrs if v is not None}
32
+
33
+ if tag == "meta":
34
+ prop = attr_dict.get("property", "")
35
+ name = attr_dict.get("name", "")
36
+ content = attr_dict.get("content", "")
37
+ if prop in ("og:title", "og:description", "og:image"):
38
+ self.og[prop] = content
39
+ elif name in ("description",) and "og:description" not in self.og:
40
+ self.og["og:description"] = content
41
+
42
+ elif tag == "link":
43
+ rel = attr_dict.get("rel", "")
44
+ href = attr_dict.get("href")
45
+ if href and ("icon" in rel):
46
+ self.favicon = href
47
+
48
+ elif tag == "title":
49
+ self._in_title = True
50
+ self._title_parts = []
51
+
52
+ def handle_data(self, data: str) -> None:
53
+ if self._in_title:
54
+ self._title_parts.append(data)
55
+
56
+ def handle_endtag(self, tag: str) -> None:
57
+ if tag == "title" and self._in_title:
58
+ self._in_title = False
59
+ self.title = "".join(self._title_parts).strip()
60
+
61
+
62
+ async def fetch_link_meta(url: str) -> LinkMeta | None:
63
+ """Fetch OpenGraph metadata from a URL.
64
+
65
+ Args:
66
+ url: The URL to fetch metadata from.
67
+
68
+ Returns:
69
+ LinkMeta with extracted metadata, or None on any error.
70
+ """
71
+ try:
72
+ async with httpx.AsyncClient(
73
+ timeout=5.0,
74
+ follow_redirects=True,
75
+ headers={
76
+ "User-Agent": (
77
+ "Mozilla/5.0 (compatible; IntentKit/1.0; +https://intentkit.io)"
78
+ ),
79
+ },
80
+ ) as client:
81
+ resp = await client.get(url)
82
+ resp.raise_for_status()
83
+
84
+ parser = _OGParser()
85
+ parser.feed(resp.text)
86
+
87
+ origin = f"{urlparse(url).scheme}://{urlparse(url).netloc}"
88
+
89
+ # Resolve favicon
90
+ favicon = parser.favicon
91
+ if favicon:
92
+ favicon = urljoin(url, favicon)
93
+ else:
94
+ favicon = f"{origin}/favicon.ico"
95
+
96
+ # Resolve image
97
+ image = parser.og.get("og:image")
98
+ if image:
99
+ image = urljoin(url, image)
100
+
101
+ return LinkMeta(
102
+ title=parser.og.get("og:title") or parser.title,
103
+ description=parser.og.get("og:description"),
104
+ image=image,
105
+ favicon=favicon,
106
+ )
107
+ except Exception:
108
+ return None
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "intentkit"
3
- version = "0.12.1-dev1"
3
+ version = "0.12.2"
4
4
  description = "Intent-based AI Agent Platform - Core Package"
5
5
  authors = [
6
6
  { name = "Ruihua", email = "ruihua@crestal.network" },