intentkit 0.17.43__tar.gz → 0.17.45__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 (729) hide show
  1. {intentkit-0.17.43 → intentkit-0.17.45}/PKG-INFO +3 -3
  2. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/__init__.py +1 -1
  3. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/agent/__init__.py +8 -1
  4. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/agent/management.py +45 -1
  5. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/avatar.py +63 -12
  6. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/engine.py +12 -1
  7. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/team/membership.py +61 -17
  8. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/llm.py +43 -41
  9. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/team.py +8 -1
  10. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/image/base.py +104 -83
  11. {intentkit-0.17.43 → intentkit-0.17.45}/pyproject.toml +3 -3
  12. {intentkit-0.17.43 → intentkit-0.17.45}/.gitignore +0 -0
  13. {intentkit-0.17.43 → intentkit-0.17.45}/LICENSE +0 -0
  14. {intentkit-0.17.43 → intentkit-0.17.45}/app/team/intentkit/docker-compose.yml +0 -0
  15. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/.dockerignore +0 -0
  16. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/LICENSE +0 -0
  17. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/MANIFEST.in +0 -0
  18. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/README.md +0 -0
  19. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/abstracts/__init__.py +0 -0
  20. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/abstracts/agent.py +0 -0
  21. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/abstracts/api.py +0 -0
  22. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/abstracts/engine.py +0 -0
  23. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/abstracts/graph.py +0 -0
  24. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/abstracts/skill.py +0 -0
  25. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/abstracts/twitter.py +0 -0
  26. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/abstracts/wallet.py +0 -0
  27. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/clients/__init__.py +0 -0
  28. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/clients/mcp/__init__.py +0 -0
  29. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/clients/mcp/client.py +0 -0
  30. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/clients/mcp/registry.py +0 -0
  31. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/clients/mcp/tool.py +0 -0
  32. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/clients/mcp/wrapper.py +0 -0
  33. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/clients/moralis.py +0 -0
  34. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/clients/s3.py +0 -0
  35. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/clients/s3_setup.py +0 -0
  36. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/clients/supabase.py +0 -0
  37. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/clients/twitter.py +0 -0
  38. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/clients/web3_ens.py +0 -0
  39. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/config/__init__.py +0 -0
  40. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/config/base.py +0 -0
  41. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/config/config.py +0 -0
  42. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/config/db.py +0 -0
  43. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/config/db_mig.py +0 -0
  44. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/config/redis.py +0 -0
  45. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/__init__.py +0 -0
  46. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/account_checking.py +0 -0
  47. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/agent/analytics.py +0 -0
  48. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/agent/constants.py +0 -0
  49. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/agent/notifications.py +0 -0
  50. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/agent/public_info.py +0 -0
  51. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/agent/queries.py +0 -0
  52. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/agent/wallet.py +0 -0
  53. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/agent_activity.py +0 -0
  54. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/agent_post.py +0 -0
  55. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/api.py +0 -0
  56. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/asset.py +0 -0
  57. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/autonomous.py +0 -0
  58. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/budget.py +0 -0
  59. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/chat.py +0 -0
  60. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/cleanup.py +0 -0
  61. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/client.py +0 -0
  62. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/credit/__init__.py +0 -0
  63. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/credit/adjustment.py +0 -0
  64. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/credit/base.py +0 -0
  65. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/credit/expense.py +0 -0
  66. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/credit/list_events.py +0 -0
  67. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/credit/plan_credit.py +0 -0
  68. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/credit/recharge.py +0 -0
  69. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/credit/refill.py +0 -0
  70. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/credit/reward.py +0 -0
  71. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/credit/withdraw.py +0 -0
  72. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/draft.py +0 -0
  73. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/draft_chat.py +0 -0
  74. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/executor.py +0 -0
  75. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/__init__.py +0 -0
  76. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/cache.py +0 -0
  77. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/constants.py +0 -0
  78. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/engine.py +0 -0
  79. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/service.py +0 -0
  80. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/__init__.py +0 -0
  81. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/add_autonomous_task.py +0 -0
  82. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/base.py +0 -0
  83. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/call_agent.py +0 -0
  84. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/create_team_agent.py +0 -0
  85. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/delete_autonomous_task.py +0 -0
  86. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/edit_autonomous_task.py +0 -0
  87. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/get_post.py +0 -0
  88. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/get_self_info.py +0 -0
  89. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/get_team_agent.py +0 -0
  90. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/get_team_info.py +0 -0
  91. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/list_autonomous_tasks.py +0 -0
  92. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/list_skills.py +0 -0
  93. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/list_team_agents.py +0 -0
  94. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/llm.py +0 -0
  95. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/recent_team_activities.py +0 -0
  96. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/recent_team_posts.py +0 -0
  97. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/update_self.py +0 -0
  98. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/update_self_memory.py +0 -0
  99. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/skills/update_team_agent.py +0 -0
  100. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/sub_agents/__init__.py +0 -0
  101. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/sub_agents/agent_manager.py +0 -0
  102. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/sub_agents/content_manager.py +0 -0
  103. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/sub_agents/self_updater.py +0 -0
  104. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/lead/sub_agents/task_manager.py +0 -0
  105. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/manager/__init__.py +0 -0
  106. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/manager/engine.py +0 -0
  107. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/manager/service.py +0 -0
  108. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/manager/skills/__init__.py +0 -0
  109. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/manager/skills/add_autonomous_task.py +0 -0
  110. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/manager/skills/base.py +0 -0
  111. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/manager/skills/delete_autonomous_task.py +0 -0
  112. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/manager/skills/draft.py +0 -0
  113. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/manager/skills/edit_autonomous_task.py +0 -0
  114. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/manager/skills/list_autonomous_tasks.py +0 -0
  115. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/manager/skills/llm.py +0 -0
  116. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/manager/skills/public_info.py +0 -0
  117. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/memory.py +0 -0
  118. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/middleware.py +0 -0
  119. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/prompt.py +0 -0
  120. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/public_agents.py +0 -0
  121. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/public_api.py +0 -0
  122. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/scheduler.py +0 -0
  123. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/statistics.py +0 -0
  124. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/system_skills/__init__.py +0 -0
  125. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/system_skills/base.py +0 -0
  126. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/system_skills/call_agent.py +0 -0
  127. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/system_skills/create_activity.py +0 -0
  128. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/system_skills/create_post.py +0 -0
  129. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/system_skills/current_time.py +0 -0
  130. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/system_skills/get_post.py +0 -0
  131. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/system_skills/read_webpage.py +0 -0
  132. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/system_skills/recent_activities.py +0 -0
  133. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/system_skills/recent_posts.py +0 -0
  134. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/system_skills/search_web.py +0 -0
  135. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/system_skills/update_memory.py +0 -0
  136. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/task_registry.py +0 -0
  137. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/team/__init__.py +0 -0
  138. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/team/channel.py +0 -0
  139. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/team/feed.py +0 -0
  140. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/team/push.py +0 -0
  141. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/team/subscription.py +0 -0
  142. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/template.py +0 -0
  143. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/core/user.py +0 -0
  144. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/__init__.py +0 -0
  145. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/agent/__init__.py +0 -0
  146. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/agent/agent.py +0 -0
  147. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/agent/autonomous.py +0 -0
  148. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/agent/core.py +0 -0
  149. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/agent/db.py +0 -0
  150. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/agent/public.json +0 -0
  151. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/agent/public_info.py +0 -0
  152. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/agent/response.py +0 -0
  153. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/agent/schema.json +0 -0
  154. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/agent/user_input.py +0 -0
  155. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/agent_activity.py +0 -0
  156. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/agent_data.py +0 -0
  157. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/agent_post.py +0 -0
  158. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/app_setting.py +0 -0
  159. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/chat.py +0 -0
  160. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/credit/__init__.py +0 -0
  161. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/credit/account.py +0 -0
  162. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/credit/base.py +0 -0
  163. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/credit/event.py +0 -0
  164. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/credit/price.py +0 -0
  165. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/credit/transaction.py +0 -0
  166. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/draft.py +0 -0
  167. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/llm.csv +0 -0
  168. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/llm_picker.py +0 -0
  169. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/skill.py +0 -0
  170. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/team_channel.py +0 -0
  171. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/team_feed.py +0 -0
  172. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/template.py +0 -0
  173. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/user.py +0 -0
  174. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/user_data.py +0 -0
  175. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/models/x402_order.py +0 -0
  176. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/__init__.py +0 -0
  177. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aave_v3/__init__.py +0 -0
  178. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aave_v3/aave_v3.svg +0 -0
  179. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aave_v3/base.py +0 -0
  180. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aave_v3/borrow.py +0 -0
  181. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aave_v3/constants.py +0 -0
  182. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aave_v3/get_reserve_data.py +0 -0
  183. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aave_v3/get_user_account_data.py +0 -0
  184. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aave_v3/repay.py +0 -0
  185. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aave_v3/schema.json +0 -0
  186. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aave_v3/set_collateral.py +0 -0
  187. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aave_v3/supply.py +0 -0
  188. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aave_v3/utils.py +0 -0
  189. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aave_v3/withdraw.py +0 -0
  190. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/acp/__init__.py +0 -0
  191. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/acp/acp.png +0 -0
  192. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/acp/base.py +0 -0
  193. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/acp/cancel_checkout.py +0 -0
  194. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/acp/complete_checkout.py +0 -0
  195. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/acp/create_checkout.py +0 -0
  196. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/acp/get_checkout.py +0 -0
  197. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/acp/list_products.py +0 -0
  198. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/acp/schema.json +0 -0
  199. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aerodrome/__init__.py +0 -0
  200. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aerodrome/add_liquidity.py +0 -0
  201. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aerodrome/aerodrome.svg +0 -0
  202. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aerodrome/base.py +0 -0
  203. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aerodrome/constants.py +0 -0
  204. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aerodrome/get_positions.py +0 -0
  205. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aerodrome/quote.py +0 -0
  206. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aerodrome/remove_liquidity.py +0 -0
  207. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aerodrome/schema.json +0 -0
  208. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aerodrome/swap.py +0 -0
  209. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aerodrome/utils.py +0 -0
  210. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aixbt/README.md +0 -0
  211. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aixbt/__init__.py +0 -0
  212. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aixbt/aixbt.jpg +0 -0
  213. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aixbt/base.py +0 -0
  214. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aixbt/projects.py +0 -0
  215. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/aixbt/schema.json +0 -0
  216. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/allora/__init__.py +0 -0
  217. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/allora/allora.jpeg +0 -0
  218. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/allora/base.py +0 -0
  219. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/allora/price.py +0 -0
  220. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/allora/schema.json +0 -0
  221. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/base.py +0 -0
  222. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/basename/__init__.py +0 -0
  223. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/basename/base.py +0 -0
  224. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/basename/basename.svg +0 -0
  225. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/basename/constants.py +0 -0
  226. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/basename/register.py +0 -0
  227. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/basename/schema.json +0 -0
  228. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/carv/README.md +0 -0
  229. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/carv/__init__.py +0 -0
  230. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/carv/base.py +0 -0
  231. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/carv/carv.webp +0 -0
  232. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/carv/fetch_news.py +0 -0
  233. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/carv/onchain_query.py +0 -0
  234. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/carv/schema.json +0 -0
  235. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/carv/token_info_and_price.py +0 -0
  236. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/casino/README.md +0 -0
  237. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/casino/__init__.py +0 -0
  238. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/casino/base.py +0 -0
  239. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/casino/casino.png +0 -0
  240. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/casino/deck_draw.py +0 -0
  241. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/casino/deck_shuffle.py +0 -0
  242. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/casino/dice_roll.py +0 -0
  243. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/casino/schema.json +0 -0
  244. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/casino/utils.py +0 -0
  245. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cdp/__init__.py +0 -0
  246. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cdp/base.py +0 -0
  247. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cdp/cdp.png +0 -0
  248. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cdp/get_balance.py +0 -0
  249. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cdp/get_wallet_details.py +0 -0
  250. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cdp/native_transfer.py +0 -0
  251. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cdp/schema.json +0 -0
  252. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/chainlist/README.md +0 -0
  253. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/chainlist/__init__.py +0 -0
  254. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/chainlist/base.py +0 -0
  255. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/chainlist/chain_lookup.py +0 -0
  256. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/chainlist/chainlist.png +0 -0
  257. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/chainlist/schema.json +0 -0
  258. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cookiefun/README.md +0 -0
  259. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cookiefun/__init__.py +0 -0
  260. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cookiefun/base.py +0 -0
  261. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cookiefun/constants.py +0 -0
  262. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cookiefun/cookiefun.png +0 -0
  263. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cookiefun/get_account_details.py +0 -0
  264. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cookiefun/get_account_feed.py +0 -0
  265. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cookiefun/get_account_smart_followers.py +0 -0
  266. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cookiefun/get_sectors.py +0 -0
  267. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cookiefun/schema.json +0 -0
  268. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cookiefun/search_accounts.py +0 -0
  269. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptocompare/__init__.py +0 -0
  270. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptocompare/api.py +0 -0
  271. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptocompare/base.py +0 -0
  272. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptocompare/cryptocompare.png +0 -0
  273. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptocompare/fetch_news.py +0 -0
  274. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptocompare/fetch_price.py +0 -0
  275. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptocompare/fetch_top_exchanges.py +0 -0
  276. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptocompare/fetch_top_market_cap.py +0 -0
  277. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptocompare/fetch_top_volume.py +0 -0
  278. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptocompare/fetch_trading_signals.py +0 -0
  279. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptocompare/schema.json +0 -0
  280. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptopanic/__init__.py +0 -0
  281. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptopanic/base.py +0 -0
  282. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptopanic/cryptopanic.png +0 -0
  283. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptopanic/fetch_crypto_news.py +0 -0
  284. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +0 -0
  285. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/cryptopanic/schema.json +0 -0
  286. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dapplooker/README.md +0 -0
  287. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dapplooker/__init__.py +0 -0
  288. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dapplooker/base.py +0 -0
  289. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dapplooker/dapplooker.jpg +0 -0
  290. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dapplooker/dapplooker_token_data.py +0 -0
  291. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dapplooker/schema.json +0 -0
  292. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/__init__.py +0 -0
  293. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/api.py +0 -0
  294. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/base.py +0 -0
  295. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/coins/__init__.py +0 -0
  296. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +0 -0
  297. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/coins/fetch_block.py +0 -0
  298. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/coins/fetch_current_prices.py +0 -0
  299. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/coins/fetch_first_price.py +0 -0
  300. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/coins/fetch_historical_prices.py +0 -0
  301. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/coins/fetch_price_chart.py +0 -0
  302. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/coins/fetch_price_percentage.py +0 -0
  303. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/config/__init__.py +0 -0
  304. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/config/chains.py +0 -0
  305. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/defillama.jpeg +0 -0
  306. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/fees/__init__.py +0 -0
  307. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/fees/fetch_fees_overview.py +0 -0
  308. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/schema.json +0 -0
  309. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/stablecoins/__init__.py +0 -0
  310. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +0 -0
  311. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +0 -0
  312. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +0 -0
  313. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +0 -0
  314. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/tests/__init__.py +0 -0
  315. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/tests/api_integration.test.py +0 -0
  316. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/tests/api_unit.test.py +0 -0
  317. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/tvl/__init__.py +0 -0
  318. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +0 -0
  319. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/tvl/fetch_chains.py +0 -0
  320. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/tvl/fetch_historical_tvl.py +0 -0
  321. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/tvl/fetch_protocol.py +0 -0
  322. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +0 -0
  323. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/tvl/fetch_protocols.py +0 -0
  324. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/volumes/__init__.py +0 -0
  325. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/volumes/fetch_dex_overview.py +0 -0
  326. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/volumes/fetch_dex_summary.py +0 -0
  327. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/volumes/fetch_options_overview.py +0 -0
  328. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/yields/__init__.py +0 -0
  329. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/yields/fetch_pool_chart.py +0 -0
  330. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/defillama/yields/fetch_pools.py +0 -0
  331. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dexscreener/README.md +0 -0
  332. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dexscreener/__init__.py +0 -0
  333. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dexscreener/base.py +0 -0
  334. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dexscreener/dexscreener.png +0 -0
  335. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dexscreener/get_pair_info.py +0 -0
  336. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dexscreener/get_token_pairs.py +0 -0
  337. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dexscreener/get_tokens_info.py +0 -0
  338. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dexscreener/model/__init__.py +0 -0
  339. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dexscreener/model/search_token_response.py +0 -0
  340. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dexscreener/schema.json +0 -0
  341. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dexscreener/search_token.py +0 -0
  342. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dexscreener/utils.py +0 -0
  343. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dune/__init__.py +0 -0
  344. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dune/base.py +0 -0
  345. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dune/dune.png +0 -0
  346. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dune/execute_query.py +0 -0
  347. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dune/get_query_results.py +0 -0
  348. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dune/run_sql.py +0 -0
  349. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/dune/schema.json +0 -0
  350. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/elfa/README.md +0 -0
  351. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/elfa/__init__.py +0 -0
  352. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/elfa/base.py +0 -0
  353. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/elfa/elfa.jpg +0 -0
  354. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/elfa/mention.py +0 -0
  355. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/elfa/schema.json +0 -0
  356. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/elfa/stats.py +0 -0
  357. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/elfa/tokens.py +0 -0
  358. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/elfa/utils.py +0 -0
  359. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/enso/README.md +0 -0
  360. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/enso/__init__.py +0 -0
  361. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/enso/abi/__init__.py +0 -0
  362. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/enso/abi/approval.py +0 -0
  363. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/enso/abi/erc20.py +0 -0
  364. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/enso/abi/route.py +0 -0
  365. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/enso/base.py +0 -0
  366. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/enso/best_yield.py +0 -0
  367. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/enso/enso.jpg +0 -0
  368. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/enso/networks.py +0 -0
  369. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/enso/prices.py +0 -0
  370. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/enso/route.py +0 -0
  371. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/enso/schema.json +0 -0
  372. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/enso/tokens.py +0 -0
  373. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/enso/wallet.py +0 -0
  374. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc20/__init__.py +0 -0
  375. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc20/base.py +0 -0
  376. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc20/constants.py +0 -0
  377. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc20/erc20.svg +0 -0
  378. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc20/get_balance.py +0 -0
  379. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc20/get_token_address.py +0 -0
  380. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc20/schema.json +0 -0
  381. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc20/transfer.py +0 -0
  382. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc20/utils.py +0 -0
  383. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc721/__init__.py +0 -0
  384. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc721/base.py +0 -0
  385. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc721/constants.py +0 -0
  386. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc721/erc721.svg +0 -0
  387. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc721/get_balance.py +0 -0
  388. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc721/mint.py +0 -0
  389. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc721/schema.json +0 -0
  390. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/erc721/transfer.py +0 -0
  391. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/firecrawl/README.md +0 -0
  392. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/firecrawl/__init__.py +0 -0
  393. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/firecrawl/base.py +0 -0
  394. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/firecrawl/clear.py +0 -0
  395. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/firecrawl/crawl.py +0 -0
  396. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/firecrawl/firecrawl.png +0 -0
  397. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/firecrawl/query.py +0 -0
  398. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/firecrawl/schema.json +0 -0
  399. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/firecrawl/scrape.py +0 -0
  400. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/firecrawl/utils.py +0 -0
  401. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/github/README.md +0 -0
  402. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/github/__init__.py +0 -0
  403. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/github/base.py +0 -0
  404. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/github/github.jpg +0 -0
  405. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/github/github_search.py +0 -0
  406. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/github/schema.json +0 -0
  407. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/heurist/__init__.py +0 -0
  408. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/heurist/base.py +0 -0
  409. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/heurist/heurist.png +0 -0
  410. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/heurist/image_generation_animagine_xl.py +0 -0
  411. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/heurist/image_generation_arthemy_comics.py +0 -0
  412. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/heurist/image_generation_arthemy_real.py +0 -0
  413. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/heurist/image_generation_braindance.py +0 -0
  414. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +0 -0
  415. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/heurist/image_generation_flux_1_dev.py +0 -0
  416. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/heurist/image_generation_sdxl.py +0 -0
  417. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/heurist/schema.json +0 -0
  418. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/http/README.md +0 -0
  419. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/http/__init__.py +0 -0
  420. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/http/base.py +0 -0
  421. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/http/get.py +0 -0
  422. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/http/http.svg +0 -0
  423. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/http/post.py +0 -0
  424. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/http/put.py +0 -0
  425. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/http/schema.json +0 -0
  426. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/image/__init__.py +0 -0
  427. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/image/gemini.py +0 -0
  428. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/image/gpt.py +0 -0
  429. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/image/grok.py +0 -0
  430. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/image/image.svg +0 -0
  431. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/image/minimax.py +0 -0
  432. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/image/openrouter.py +0 -0
  433. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/image/schema.json +0 -0
  434. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/jupiter/README.md +0 -0
  435. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/jupiter/__init__.py +0 -0
  436. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/jupiter/base.py +0 -0
  437. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/jupiter/jupiter.png +0 -0
  438. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/jupiter/price.py +0 -0
  439. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/jupiter/schema.json +0 -0
  440. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/jupiter/swap.py +0 -0
  441. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/lifi/README.md +0 -0
  442. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/lifi/__init__.py +0 -0
  443. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/lifi/base.py +0 -0
  444. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/lifi/lifi.png +0 -0
  445. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/lifi/schema.json +0 -0
  446. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/lifi/token_execute.py +0 -0
  447. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/lifi/token_quote.py +0 -0
  448. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/lifi/utils.py +0 -0
  449. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/mcp_coingecko/__init__.py +0 -0
  450. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/mcp_coingecko/coingecko.svg +0 -0
  451. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/mcp_coingecko/schema.json +0 -0
  452. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/moralis/README.md +0 -0
  453. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/moralis/__init__.py +0 -0
  454. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/moralis/api.py +0 -0
  455. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/moralis/base.py +0 -0
  456. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/moralis/fetch_chain_portfolio.py +0 -0
  457. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/moralis/fetch_nft_portfolio.py +0 -0
  458. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/moralis/fetch_solana_portfolio.py +0 -0
  459. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/moralis/fetch_wallet_portfolio.py +0 -0
  460. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/moralis/moralis.png +0 -0
  461. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/moralis/schema.json +0 -0
  462. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/morpho/__init__.py +0 -0
  463. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/morpho/base.py +0 -0
  464. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/morpho/borrow.py +0 -0
  465. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/morpho/constants.py +0 -0
  466. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/morpho/deposit.py +0 -0
  467. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/morpho/get_position.py +0 -0
  468. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/morpho/get_vault_data.py +0 -0
  469. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/morpho/morpho.svg +0 -0
  470. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/morpho/repay.py +0 -0
  471. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/morpho/schema.json +0 -0
  472. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/morpho/supply_collateral.py +0 -0
  473. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/morpho/withdraw.py +0 -0
  474. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/morpho/withdraw_collateral.py +0 -0
  475. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/onchain.py +0 -0
  476. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/__init__.py +0 -0
  477. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/base.py +0 -0
  478. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/buy_nft.py +0 -0
  479. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/cancel_listing.py +0 -0
  480. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/constants.py +0 -0
  481. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/create_listing.py +0 -0
  482. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/get_collection.py +0 -0
  483. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/get_collection_stats.py +0 -0
  484. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/get_events.py +0 -0
  485. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/get_listings.py +0 -0
  486. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/get_nft.py +0 -0
  487. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/get_nfts_by_account.py +0 -0
  488. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/get_offers.py +0 -0
  489. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/onchain_base.py +0 -0
  490. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/opensea.svg +0 -0
  491. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/schema.json +0 -0
  492. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/opensea/update_listing.py +0 -0
  493. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pancakeswap/__init__.py +0 -0
  494. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pancakeswap/add_liquidity.py +0 -0
  495. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pancakeswap/base.py +0 -0
  496. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pancakeswap/constants.py +0 -0
  497. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pancakeswap/get_positions.py +0 -0
  498. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pancakeswap/pancakeswap.png +0 -0
  499. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pancakeswap/quote.py +0 -0
  500. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pancakeswap/remove_liquidity.py +0 -0
  501. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pancakeswap/schema.json +0 -0
  502. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pancakeswap/swap.py +0 -0
  503. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pancakeswap/utils.py +0 -0
  504. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/polymarket/__init__.py +0 -0
  505. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/polymarket/base.py +0 -0
  506. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/polymarket/cancel_order.py +0 -0
  507. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/polymarket/get_market.py +0 -0
  508. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/polymarket/get_orderbook.py +0 -0
  509. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/polymarket/get_orders.py +0 -0
  510. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/polymarket/get_positions.py +0 -0
  511. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/polymarket/get_price_history.py +0 -0
  512. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/polymarket/get_trades.py +0 -0
  513. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/polymarket/place_order.py +0 -0
  514. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/polymarket/polymarket.png +0 -0
  515. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/polymarket/schema.json +0 -0
  516. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/polymarket/search_markets.py +0 -0
  517. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/README.md +0 -0
  518. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/__init__.py +0 -0
  519. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/base.py +0 -0
  520. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/constants.py +0 -0
  521. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/moralis.png +0 -0
  522. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/schema.json +0 -0
  523. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/token_balances.py +0 -0
  524. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/wallet_approvals.py +0 -0
  525. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/wallet_defi_positions.py +0 -0
  526. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/wallet_history.py +0 -0
  527. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/wallet_net_worth.py +0 -0
  528. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/wallet_nfts.py +0 -0
  529. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/wallet_profitability.py +0 -0
  530. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/wallet_profitability_summary.py +0 -0
  531. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/wallet_stats.py +0 -0
  532. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/portfolio/wallet_swaps.py +0 -0
  533. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pyth/__init__.py +0 -0
  534. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pyth/base.py +0 -0
  535. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pyth/fetch_price.py +0 -0
  536. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pyth/fetch_price_feed.py +0 -0
  537. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pyth/pyth.svg +0 -0
  538. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/pyth/schema.json +0 -0
  539. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/slack/__init__.py +0 -0
  540. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/slack/base.py +0 -0
  541. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/slack/get_channel.py +0 -0
  542. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/slack/get_message.py +0 -0
  543. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/slack/schedule_message.py +0 -0
  544. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/slack/schema.json +0 -0
  545. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/slack/send_message.py +0 -0
  546. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/slack/slack.jpg +0 -0
  547. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/supabase/__init__.py +0 -0
  548. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/supabase/base.py +0 -0
  549. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/supabase/delete_data.py +0 -0
  550. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/supabase/fetch_data.py +0 -0
  551. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/supabase/insert_data.py +0 -0
  552. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/supabase/invoke_function.py +0 -0
  553. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/supabase/schema.json +0 -0
  554. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/supabase/supabase.svg +0 -0
  555. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/supabase/update_data.py +0 -0
  556. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/supabase/upsert_data.py +0 -0
  557. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/superfluid/__init__.py +0 -0
  558. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/superfluid/base.py +0 -0
  559. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/superfluid/constants.py +0 -0
  560. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/superfluid/create_flow.py +0 -0
  561. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/superfluid/delete_flow.py +0 -0
  562. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/superfluid/schema.json +0 -0
  563. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/superfluid/superfluid.svg +0 -0
  564. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/superfluid/update_flow.py +0 -0
  565. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/tavily/README.md +0 -0
  566. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/tavily/__init__.py +0 -0
  567. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/tavily/base.py +0 -0
  568. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/tavily/schema.json +0 -0
  569. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/tavily/tavily.jpg +0 -0
  570. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/tavily/tavily_extract.py +0 -0
  571. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/tavily/tavily_search.py +0 -0
  572. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/token/README.md +0 -0
  573. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/token/__init__.py +0 -0
  574. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/token/base.py +0 -0
  575. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/token/constants.py +0 -0
  576. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/token/erc20_transfers.py +0 -0
  577. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/token/moralis.png +0 -0
  578. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/token/schema.json +0 -0
  579. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/token/token_analytics.py +0 -0
  580. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/token/token_price.py +0 -0
  581. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/token/token_search.py +0 -0
  582. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/twitter/__init__.py +0 -0
  583. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/twitter/base.py +0 -0
  584. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/twitter/follow_user.py +0 -0
  585. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/twitter/get_mentions.py +0 -0
  586. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/twitter/get_timeline.py +0 -0
  587. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/twitter/get_user_by_username.py +0 -0
  588. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/twitter/get_user_tweets.py +0 -0
  589. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/twitter/like_tweet.py +0 -0
  590. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/twitter/post_tweet.py +0 -0
  591. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/twitter/reply_tweet.py +0 -0
  592. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/twitter/retweet.py +0 -0
  593. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/twitter/schema.json +0 -0
  594. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/twitter/search_tweets.py +0 -0
  595. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/twitter/twitter.png +0 -0
  596. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/ui/__init__.py +0 -0
  597. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/ui/ask_user.py +0 -0
  598. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/ui/base.py +0 -0
  599. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/ui/schema.json +0 -0
  600. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/ui/show_card.py +0 -0
  601. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/ui/ui.svg +0 -0
  602. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/uniswap/__init__.py +0 -0
  603. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/uniswap/add_liquidity.py +0 -0
  604. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/uniswap/base.py +0 -0
  605. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/uniswap/constants.py +0 -0
  606. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/uniswap/get_positions.py +0 -0
  607. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/uniswap/quote.py +0 -0
  608. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/uniswap/remove_liquidity.py +0 -0
  609. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/uniswap/schema.json +0 -0
  610. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/uniswap/swap.py +0 -0
  611. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/uniswap/uniswap.svg +0 -0
  612. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/uniswap/utils.py +0 -0
  613. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/unrealspeech/__init__.py +0 -0
  614. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/unrealspeech/base.py +0 -0
  615. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/unrealspeech/schema.json +0 -0
  616. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/unrealspeech/text_to_speech.py +0 -0
  617. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/unrealspeech/unrealspeech.jpg +0 -0
  618. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_audio/__init__.py +0 -0
  619. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_audio/base.py +0 -0
  620. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_audio/input.py +0 -0
  621. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_audio/schema.json +0 -0
  622. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_audio/venice_audio.py +0 -0
  623. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_audio/venice_logo.jpg +0 -0
  624. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/README.md +0 -0
  625. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/__init__.py +0 -0
  626. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/api.py +0 -0
  627. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/base.py +0 -0
  628. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/config.py +0 -0
  629. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_enhance/README.md +0 -0
  630. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_enhance/__init__.py +0 -0
  631. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_enhance/image_enhance.py +0 -0
  632. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_enhance/image_enhance_base.py +0 -0
  633. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_enhance/image_enhance_input.py +0 -0
  634. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_generation/README.md +0 -0
  635. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_generation/__init__.py +0 -0
  636. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_generation/image_generation_base.py +0 -0
  637. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +0 -0
  638. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +0 -0
  639. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +0 -0
  640. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_generation/image_generation_input.py +0 -0
  641. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +0 -0
  642. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +0 -0
  643. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +0 -0
  644. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +0 -0
  645. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_upscale/README.md +0 -0
  646. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_upscale/__init__.py +0 -0
  647. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_upscale/image_upscale.py +0 -0
  648. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_upscale/image_upscale_base.py +0 -0
  649. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_upscale/image_upscale_input.py +0 -0
  650. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_vision/README.md +0 -0
  651. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_vision/__init__.py +0 -0
  652. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_vision/image_vision.py +0 -0
  653. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_vision/image_vision_base.py +0 -0
  654. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/image_vision/image_vision_input.py +0 -0
  655. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/schema.json +0 -0
  656. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/utils.py +0 -0
  657. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/venice_image/venice_image.jpg +0 -0
  658. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/video/__init__.py +0 -0
  659. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/video/base.py +0 -0
  660. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/video/gemini.py +0 -0
  661. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/video/gpt.py +0 -0
  662. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/video/grok.py +0 -0
  663. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/video/minimax.py +0 -0
  664. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/video/schema.json +0 -0
  665. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/video/video.svg +0 -0
  666. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/web_scraper/README.md +0 -0
  667. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/web_scraper/__init__.py +0 -0
  668. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/web_scraper/base.py +0 -0
  669. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/web_scraper/document_indexer.py +0 -0
  670. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/web_scraper/langchain.png +0 -0
  671. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/web_scraper/schema.json +0 -0
  672. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/web_scraper/scrape_and_index.py +0 -0
  673. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/web_scraper/utils.py +0 -0
  674. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/web_scraper/website_indexer.py +0 -0
  675. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/weth/__init__.py +0 -0
  676. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/weth/base.py +0 -0
  677. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/weth/constants.py +0 -0
  678. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/weth/schema.json +0 -0
  679. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/weth/unwrap_eth.py +0 -0
  680. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/weth/weth.svg +0 -0
  681. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/weth/wrap_eth.py +0 -0
  682. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/x402/__init__.py +0 -0
  683. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/x402/base.py +0 -0
  684. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/x402/check_price.py +0 -0
  685. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/x402/get_orders.py +0 -0
  686. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/x402/http_request.py +0 -0
  687. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/x402/httpx_compat.py +0 -0
  688. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/x402/pay.py +0 -0
  689. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/x402/schema.json +0 -0
  690. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/x402/x402.webp +0 -0
  691. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/xmtp/README.md +0 -0
  692. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/xmtp/__init__.py +0 -0
  693. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/xmtp/base.py +0 -0
  694. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/xmtp/price.py +0 -0
  695. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/xmtp/schema.json +0 -0
  696. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/xmtp/swap.py +0 -0
  697. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/xmtp/transfer.py +0 -0
  698. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/skills/xmtp/xmtp.png +0 -0
  699. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/__init__.py +0 -0
  700. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/alert.py +0 -0
  701. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/alert_handler.py +0 -0
  702. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/chain.py +0 -0
  703. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/ens.py +0 -0
  704. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/error.py +0 -0
  705. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/logging.py +0 -0
  706. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/opengraph.py +0 -0
  707. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/pdf.py +0 -0
  708. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/random.py +0 -0
  709. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/s3_setup.py +0 -0
  710. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/schema.py +0 -0
  711. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/slack_alert.py +0 -0
  712. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/telegram_alert.py +0 -0
  713. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/templates/post_pdf.html +0 -0
  714. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/time.py +0 -0
  715. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/tx.py +0 -0
  716. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/utils/upload.py +0 -0
  717. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/wallets/__init__.py +0 -0
  718. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/wallets/cdp.py +0 -0
  719. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/wallets/evm_wallet.py +0 -0
  720. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/wallets/native.py +0 -0
  721. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/wallets/privy.py +0 -0
  722. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/wallets/privy_client.py +0 -0
  723. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/wallets/privy_nonce.py +0 -0
  724. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/wallets/privy_safe.py +0 -0
  725. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/wallets/privy_signer.py +0 -0
  726. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/wallets/privy_types.py +0 -0
  727. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/wallets/privy_utils.py +0 -0
  728. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/wallets/signer.py +0 -0
  729. {intentkit-0.17.43 → intentkit-0.17.45}/intentkit/wallets/web3.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intentkit
3
- Version: 0.17.43
3
+ Version: 0.17.45
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
@@ -60,7 +60,7 @@ Requires-Dist: langchain-core>=0.3.43
60
60
  Requires-Dist: langchain-deepseek>=0.1.4
61
61
  Requires-Dist: langchain-google-genai>=3.2.0
62
62
  Requires-Dist: langchain-openai>=0.3.8
63
- Requires-Dist: langchain-openrouter>=0.0.2
63
+ Requires-Dist: langchain-openrouter>=0.2.1
64
64
  Requires-Dist: langchain-text-splitters>=0.3.8
65
65
  Requires-Dist: langchain-xai>=0.2.1
66
66
  Requires-Dist: langchain>=0.3.25
@@ -71,7 +71,7 @@ Requires-Dist: langgraph>=0.6.1
71
71
  Requires-Dist: mcp>=1.0.0
72
72
  Requires-Dist: mypy-boto3-s3<2.0.0,>=1.37.24
73
73
  Requires-Dist: openai>=1.59.6
74
- Requires-Dist: openrouter<0.8.0
74
+ Requires-Dist: openrouter>=0.9.0
75
75
  Requires-Dist: pillow<13.0.0,>=11.1.0
76
76
  Requires-Dist: psycopg-pool>=3.2.4
77
77
  Requires-Dist: psycopg>=3.2.9
@@ -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.17.43"
6
+ __version__ = "0.17.45"
7
7
  __author__ = "Ruihua"
8
8
  __email__ = "ruihua@crestal.network"
9
9
 
@@ -5,7 +5,13 @@ from .analytics import (
5
5
  update_agents_assets,
6
6
  update_agents_statistics,
7
7
  )
8
- from .management import create_agent, deploy_agent, override_agent, patch_agent
8
+ from .management import (
9
+ backfill_agent_avatar,
10
+ create_agent,
11
+ deploy_agent,
12
+ override_agent,
13
+ patch_agent,
14
+ )
9
15
  from .notifications import send_agent_notification
10
16
  from .public_info import override_public_info, update_public_info
11
17
  from .queries import get_agent, get_agent_by_id_or_slug, iterate_agent_id_batches
@@ -21,6 +27,7 @@ __all__ = [
21
27
  "override_agent",
22
28
  "patch_agent",
23
29
  "create_agent",
30
+ "backfill_agent_avatar",
24
31
  "deploy_agent",
25
32
  "agent_action_cost",
26
33
  "update_agent_action_cost",
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
 
3
- from sqlalchemy import func, select
3
+ from sqlalchemy import func, or_, select, update
4
4
  from sqlalchemy.exc import IntegrityError
5
5
  from sqlalchemy.ext.asyncio import AsyncSession
6
6
 
@@ -320,6 +320,50 @@ async def create_agent(agent: AgentCreate) -> tuple[Agent, AgentData]:
320
320
  return latest_agent, agent_data
321
321
 
322
322
 
323
+ async def backfill_agent_avatar(agent_id: str) -> None:
324
+ """Generate an avatar for an agent and write it back if still empty.
325
+
326
+ Intended to be scheduled as a background task after agent create/override/
327
+ patch. No-ops (and swallows all errors) if the agent is gone, already has a
328
+ picture, or the generation/upload fails.
329
+ """
330
+ # Deferred import: intentkit.core.avatar pulls in heavy optional deps
331
+ # (PIL, google.genai, openai) that would otherwise load on every cold
332
+ # start of any service importing core.agent.
333
+ from intentkit.core.avatar import generate_avatar
334
+
335
+ async with get_session() as db:
336
+ db_agent = await db.get(AgentTable, agent_id)
337
+ if not db_agent or db_agent.picture:
338
+ return
339
+ agent_snapshot = Agent.model_validate(db_agent)
340
+
341
+ try:
342
+ avatar_path = await generate_avatar(agent_id, agent_snapshot)
343
+ except Exception as e:
344
+ logger.warning("Agent avatar backfill generate failed for %s: %s", agent_id, e)
345
+ return
346
+ if not avatar_path:
347
+ return
348
+
349
+ try:
350
+ async with get_session() as db:
351
+ # Match both NULL and empty-string so a prior PATCH that cleared the
352
+ # column to "" still gets backfilled; the scheduling sites treat
353
+ # empty string as missing, and the write must agree.
354
+ await db.execute(
355
+ update(AgentTable)
356
+ .where(
357
+ AgentTable.id == agent_id,
358
+ or_(AgentTable.picture.is_(None), AgentTable.picture == ""),
359
+ )
360
+ .values(picture=avatar_path)
361
+ )
362
+ await db.commit()
363
+ except Exception as e:
364
+ logger.warning("Agent avatar backfill write failed for %s: %s", agent_id, e)
365
+
366
+
323
367
  async def deploy_agent(
324
368
  agent_id: str, agent: AgentUpdate, owner: str | None = None
325
369
  ) -> tuple[Agent, AgentData]:
@@ -4,6 +4,7 @@ import logging
4
4
  from typing import Any
5
5
 
6
6
  import httpx
7
+ import openrouter
7
8
  from google import genai
8
9
  from google.genai import types
9
10
  from openai import AsyncOpenAI
@@ -14,6 +15,8 @@ from intentkit.config.config import config
14
15
 
15
16
  logger = logging.getLogger(__name__)
16
17
 
18
+ OPENROUTER_IMAGE_MODEL = "bytedance-seed/seedream-4.5"
19
+
17
20
  # Prompt fields to extract from agent objects for avatar generation.
18
21
  # These are (field_name, display_label) pairs.
19
22
  _PROMPT_FIELDS: list[tuple[str, str]] = [
@@ -81,27 +84,75 @@ async def _download_image(url: str) -> bytes:
81
84
 
82
85
 
83
86
  async def generate_image_openrouter(prompt: str) -> bytes | None:
84
- """Generate image using OpenRouter with bytedance-seed/seedream-4.5."""
87
+ """Generate image using OpenRouter (bytedance-seed/seedream-4.5).
88
+
89
+ OpenRouter does not expose an OpenAI-compatible `/images/generations`
90
+ endpoint; image generation routes through chat completions with the
91
+ `modalities` parameter. Image-only models reject `["image", "text"]`,
92
+ so we ask for `["image"]` which is accepted by all image-output models.
93
+ """
85
94
  try:
86
- client = AsyncOpenAI(
95
+ client = openrouter.OpenRouter(
87
96
  api_key=config.openrouter_api_key,
88
- base_url="https://openrouter.ai/api/v1",
97
+ http_referer="https://github.com/crestalnetwork/intentkit",
98
+ x_open_router_title="IntentKit",
99
+ x_open_router_categories="cloud-agent",
100
+ timeout_ms=120_000,
89
101
  )
90
- response = await client.images.generate(
91
- model="bytedance-seed/seedream-4.5",
92
- prompt=prompt,
93
- size="1024x1024",
94
- n=1,
102
+ response = await client.chat.send_async(
103
+ model=OPENROUTER_IMAGE_MODEL,
104
+ modalities=["image"],
105
+ messages=[{"role": "user", "content": prompt}],
95
106
  )
96
- if response.data and response.data[0].b64_json:
97
- return base64.b64decode(response.data[0].b64_json)
98
- if response.data and response.data[0].url:
99
- return await _download_image(response.data[0].url)
107
+ url = _extract_openrouter_image_url(response)
108
+ if not url:
109
+ logger.error("OpenRouter image generation returned no image url")
110
+ return None
111
+ if url.startswith("data:"):
112
+ return base64.b64decode(url.split(",", 1)[1])
113
+ return await _download_image(url)
100
114
  except Exception as e:
101
115
  logger.error("OpenRouter image generation failed: %s", e)
102
116
  return None
103
117
 
104
118
 
119
+ def _extract_openrouter_image_url(response: Any) -> str | None:
120
+ """Pull the first image URL from an OpenRouter chat-completions response.
121
+
122
+ Different image models put the result in different places: most use
123
+ ``message.images[0].image_url.url``, a few return it as an ``image_url``
124
+ content part. Check both so avatar and skill callers stay consistent.
125
+ """
126
+ try:
127
+ message = response.choices[0].message
128
+ except (AttributeError, IndexError):
129
+ return None
130
+
131
+ images = getattr(message, "images", None) or []
132
+ if images:
133
+ url = getattr(getattr(images[0], "image_url", None), "url", None)
134
+ if url:
135
+ return url
136
+
137
+ content = getattr(message, "content", None)
138
+ if isinstance(content, list):
139
+ for part in content:
140
+ part_type = getattr(part, "type", None) or (
141
+ part.get("type") if isinstance(part, dict) else None
142
+ )
143
+ if part_type != "image_url":
144
+ continue
145
+ image_url = getattr(part, "image_url", None) or (
146
+ part.get("image_url") if isinstance(part, dict) else None
147
+ )
148
+ url = getattr(image_url, "url", None) or (
149
+ image_url.get("url") if isinstance(image_url, dict) else None
150
+ )
151
+ if url:
152
+ return url
153
+ return None
154
+
155
+
105
156
  async def generate_image_google(prompt: str) -> bytes | None:
106
157
  """Generate image using Google Gemini gemini-3.1-flash-image-preview."""
107
158
  try:
@@ -378,6 +378,15 @@ async def _handle_model_chunk(
378
378
  user_id=user_message.user_id,
379
379
  )
380
380
  logger.info("[%s] expense message: %s", user_message.agent_id, amount)
381
+ # Reconciliation: log OpenRouter-reported cost alongside our
382
+ # token-based calculation so discrepancies can be audited.
383
+ or_cost = (getattr(msg, "response_metadata", None) or {}).get("cost")
384
+ if or_cost is not None:
385
+ logger.info(
386
+ "[%s] openrouter reported cost: %s",
387
+ user_message.agent_id,
388
+ or_cost,
389
+ )
381
390
  chat_message_create.credit_event_id = credit_event.id
382
391
  chat_message_create.credit_cost = credit_event.total_amount
383
392
  chat_message = await chat_message_create.save_in_session(session)
@@ -651,7 +660,8 @@ async def stream_agent_raw(
651
660
 
652
661
  # Determine payer team (needed for credit event recording regardless of payment_enabled)
653
662
  # Normal user conversations: user's team pays
654
- # Platform channels (Telegram/Discord/Twitter/API/X402): agent's team pays
663
+ # Platform channels (Telegram/Discord/Twitter/API/X402) and autonomous triggers:
664
+ # agent's team pays
655
665
  payer = message.team_id
656
666
  if user_message.author_type in [
657
667
  AuthorType.TELEGRAM,
@@ -659,6 +669,7 @@ async def stream_agent_raw(
659
669
  AuthorType.TWITTER,
660
670
  AuthorType.API,
661
671
  AuthorType.X402,
672
+ AuthorType.TRIGGER,
662
673
  ]:
663
674
  payer = agent.team_id
664
675
 
@@ -7,6 +7,8 @@ import re
7
7
  from datetime import UTC, datetime
8
8
  from typing import TYPE_CHECKING
9
9
 
10
+ from sqlalchemy import or_, update
11
+
10
12
  from intentkit.config.db import get_session
11
13
  from intentkit.config.redis import get_redis
12
14
  from intentkit.models.team import (
@@ -137,7 +139,12 @@ async def generate_team_avatar(team_id: str, team_name: str) -> str | None:
137
139
 
138
140
 
139
141
  async def create_team(team_id: str, name: str, creator_user_id: str) -> Team:
140
- """Create a new team with avatar generation.
142
+ """Create a new team without avatar.
143
+
144
+ Avatar generation is deferred to a background task triggered by the
145
+ caller (see `backfill_team_avatar`), since generating a team picture
146
+ involves slow LLM + image-gen + S3 I/O that should not block the
147
+ creation response or widen the window for concurrent-create races.
141
148
 
142
149
  Raises:
143
150
  ValueError: If team ID format is invalid or already taken.
@@ -146,23 +153,58 @@ async def create_team(team_id: str, name: str, creator_user_id: str) -> Team:
146
153
  if not validation["valid"]:
147
154
  raise ValueError(str(validation["reason"]))
148
155
 
149
- # Generate avatar (failure does not block creation)
150
- avatar: str | None = None
151
- try:
152
- avatar = await generate_team_avatar(team_id, name)
153
- except Exception as e:
154
- logger.warning("Avatar generation failed for team %s: %s", team_id, e)
155
-
156
156
  team_create = TeamCreate(
157
157
  id=team_id,
158
158
  name=name,
159
- avatar=avatar,
159
+ avatar=None,
160
160
  default_channel=None,
161
161
  default_channel_chat_id=None,
162
162
  )
163
163
  return await team_create.save(creator_user_id)
164
164
 
165
165
 
166
+ async def backfill_team_avatar(team_id: str) -> None:
167
+ """Generate an avatar for a team and write it back if still empty.
168
+
169
+ Intended to be scheduled as a background task after team creation.
170
+ No-ops (and swallows all errors) if the team is gone, already has an
171
+ avatar, or the generation/upload fails.
172
+ """
173
+ async with get_session() as db:
174
+ team_row = await db.get(TeamTable, team_id)
175
+ if not team_row or team_row.avatar:
176
+ return
177
+ team_name = team_row.name
178
+
179
+ try:
180
+ avatar_path = await generate_team_avatar(team_id, team_name)
181
+ except Exception as e:
182
+ logger.warning("Team avatar backfill generate failed for %s: %s", team_id, e)
183
+ return
184
+ if not avatar_path:
185
+ return
186
+
187
+ try:
188
+ async with get_session() as db:
189
+ # Match both NULL and empty-string so a prior PATCH that cleared
190
+ # the column to "" still gets backfilled; the scheduling site
191
+ # treats empty string as missing, and the write must agree.
192
+ await db.execute(
193
+ update(TeamTable)
194
+ .where(
195
+ TeamTable.id == team_id,
196
+ or_(TeamTable.avatar.is_(None), TeamTable.avatar == ""),
197
+ )
198
+ .values(avatar=avatar_path)
199
+ )
200
+ await db.commit()
201
+ except Exception as e:
202
+ logger.warning("Team avatar backfill write failed for %s: %s", team_id, e)
203
+ return
204
+
205
+ await _invalidate_team_cache(team_id)
206
+
207
+
166
208
  async def get_team(team_id: str) -> Team | None:
167
209
  """Get a team by ID, with Redis caching (TTL 3600s)."""
168
210
  redis = get_redis()
@@ -199,8 +241,6 @@ async def update_team(
199
241
  if name is None and avatar is None:
200
242
  raise ValueError("No updates provided")
201
243
 
202
- from sqlalchemy import update
203
-
204
244
  async with get_session() as db:
205
245
  values: dict[str, str] = {}
206
246
  if name is not None:
@@ -214,12 +254,7 @@ async def update_team(
214
254
  raise ValueError(f"Team {team_id} not found")
215
255
  await db.commit()
216
256
 
217
- # Invalidate cache
218
- try:
219
- redis = get_redis()
220
- await redis.delete(f"{_CACHE_TEAM_PREFIX}{team_id}")
221
- except Exception as e:
222
- logger.warning("Failed to invalidate team cache for %s: %s", team_id, e)
257
+ await _invalidate_team_cache(team_id)
223
258
 
224
259
  team = await Team.get(team_id)
225
260
  if not team:
@@ -384,6 +419,15 @@ async def _invalidate_role_cache(team_id: str, user_id: str) -> None:
384
419
  )
385
420
 
386
421
 
422
+ async def _invalidate_team_cache(team_id: str) -> None:
423
+ """Delete cached team entry from Redis."""
424
+ try:
425
+ redis = get_redis()
426
+ await redis.delete(f"{_CACHE_TEAM_PREFIX}{team_id}")
427
+ except Exception as e:
428
+ logger.warning("Failed to invalidate team cache for %s: %s", team_id, e)
429
+
430
+
387
431
  async def change_member_role(team_id: str, user_id: str, new_role: TeamRole) -> None:
388
432
  """Change a team member's role.
389
433
 
@@ -834,6 +834,11 @@ class OpenRouterLLM(LLMModel):
834
834
  "api_key": config.openrouter_api_key,
835
835
  "timeout": info.timeout * 1000,
836
836
  "max_retries": 3,
837
+ # Attribution headers so OpenRouter dashboard credits IntentKit
838
+ # instead of the LangChain defaults baked into langchain-openrouter.
839
+ "app_url": "https://github.com/crestalnetwork/intentkit",
840
+ "app_title": "IntentKit",
841
+ "app_categories": ["cloud-agent"],
837
842
  }
838
843
 
839
844
  # Add optional parameters based on model support
@@ -855,48 +860,44 @@ class OpenRouterLLM(LLMModel):
855
860
  return _create_openrouter_with_server_tools(**kwargs)
856
861
 
857
862
 
858
- _openrouter_sdk_patched = False
863
+ _openrouter_usage_cost_fields_injected = False
859
864
 
860
865
 
861
- def _patch_openrouter_sdk() -> None:
862
- """Patch the OpenRouter SDK to accept server tools.
866
+ def _inject_cost_fields_into_chat_usage() -> None:
867
+ """Add ``cost`` / ``cost_details`` to the SDK's ``ChatUsage`` schema.
863
868
 
864
- The SDK's ``ToolDefinitionJSON`` model requires ``type="function"`` and
865
- a mandatory ``function`` field. OpenRouter server tools like
866
- ``openrouter:web_search`` use different types and have no ``function``
867
- field. This patch broadens ``ToolDefinitionJSON`` to accept any ``type``
868
- string and makes ``function`` optional, so server-tool dicts pass through
869
- the SDK's validation and are serialised as-is.
869
+ OpenRouter's ``/chat/completions`` response includes ``cost`` inside the
870
+ ``usage`` object, but ``openrouter`` SDK's generated ``ChatUsage`` model
871
+ (v0.9.1) does not declare those fields, so Pydantic validation drops them
872
+ and ``langchain-openrouter`` never surfaces them in ``response_metadata``.
873
+
874
+ Injecting the fields lets cost round-trip without a fork. Remove this
875
+ helper once the SDK adds the fields natively.
870
876
  """
871
- global _openrouter_sdk_patched # noqa: PLW0603
872
- if _openrouter_sdk_patched:
877
+ global _openrouter_usage_cost_fields_injected # noqa: PLW0603
878
+ if _openrouter_usage_cost_fields_injected:
873
879
  return
874
880
  try:
875
- from openrouter.components import (
876
- ToolDefinitionJSON, # type: ignore[import-untyped]
877
- )
881
+ from openrouter.components import ChatUsage # type: ignore[import-untyped]
882
+ from pydantic.fields import FieldInfo
878
883
 
879
- tool_model: Any = ToolDefinitionJSON
880
- type_field = tool_model.model_fields.get("type")
881
- func_field = tool_model.model_fields.get("function")
882
- if type_field is None or func_field is None:
883
- logger.warning(
884
- "OpenRouter SDK ToolDefinitionJSON schema changed — "
885
- "server tools patch skipped; update the integration"
886
- )
884
+ if "cost" in ChatUsage.model_fields:
885
+ _openrouter_usage_cost_fields_injected = True
887
886
  return
888
- # Broaden type from Literal["function"] to str
889
- type_field.annotation = str
890
- tool_model.__annotations__["type"] = str
891
- # Make function optional (server tools don't have it)
892
- orig = func_field.annotation
893
- func_field.annotation = orig | None
894
- func_field.default = None
895
- tool_model.__annotations__["function"] = orig | None
896
- tool_model.model_rebuild(force=True)
897
- _openrouter_sdk_patched = True
887
+ cost_type: Any = float | None
888
+ cost_details_type: Any = dict[str, Any] | None
889
+ ChatUsage.__annotations__["cost"] = cost_type
890
+ ChatUsage.__annotations__["cost_details"] = cost_details_type
891
+ ChatUsage.model_fields["cost"] = FieldInfo(annotation=cost_type, default=None)
892
+ ChatUsage.model_fields["cost_details"] = FieldInfo(
893
+ annotation=cost_details_type, default=None
894
+ )
895
+ ChatUsage.model_rebuild(force=True)
896
+ _openrouter_usage_cost_fields_injected = True
898
897
  except Exception:
899
- logger.warning("Failed to patch OpenRouter SDK for server tools", exc_info=True)
898
+ logger.warning(
899
+ "Failed to inject cost fields into OpenRouter ChatUsage", exc_info=True
900
+ )
900
901
 
901
902
 
902
903
  def _create_openrouter_with_server_tools(**kwargs: Any) -> BaseChatModel:
@@ -904,17 +905,18 @@ def _create_openrouter_with_server_tools(**kwargs: Any) -> BaseChatModel:
904
905
 
905
906
  OpenRouter server tools (e.g. ``{"type": "openrouter:web_search"}``) are
906
907
  not recognised by ``convert_to_openai_tool`` used inside the upstream
907
- ``ChatOpenRouter.bind_tools``. This subclass overrides ``bind_tools``
908
- to pull server-tool dicts out, delegate the rest to the parent, and
909
- re-inject the server tools into the bound kwargs so they are sent as-is
910
- in the API request.
911
-
912
- Additionally, the OpenRouter Python SDK's request model is patched once to
913
- accept non-function tool types in the request body.
908
+ ``ChatOpenRouter.bind_tools``. This subclass overrides ``bind_tools`` to
909
+ pull server-tool dicts out, delegate the rest to the parent, and re-inject
910
+ the server tools into the bound kwargs so they are sent as-is in the API
911
+ request.
912
+
913
+ The underlying ``openrouter`` SDK (>=0.8.0) exposes ``ChatFunctionTool`` as
914
+ a discriminated union that natively accepts the ``openrouter:`` server-tool
915
+ types we use, so no SDK-level patch is required for tool types.
914
916
  """
915
917
  from langchain_openrouter import ChatOpenRouter
916
918
 
917
- _patch_openrouter_sdk()
919
+ _inject_cost_fields_into_chat_usage()
918
920
 
919
921
  class _WithServerTools(ChatOpenRouter):
920
922
  @override
@@ -18,6 +18,7 @@ from pydantic import (
18
18
  )
19
19
  from sqlalchemy import DateTime, Index, Integer, String, func, select
20
20
  from sqlalchemy.dialects.postgresql import JSONB
21
+ from sqlalchemy.exc import IntegrityError
21
22
  from sqlalchemy.orm import Mapped, mapped_column
22
23
 
23
24
  from intentkit.config.base import Base
@@ -326,7 +327,13 @@ class TeamCreate(BaseModel):
326
327
  )
327
328
  db.add(member_record)
328
329
 
329
- await db.commit()
330
+ try:
331
+ await db.commit()
332
+ except IntegrityError as e:
333
+ # Concurrent request with the same team_id committed first; map
334
+ # to the same validation error so the endpoint returns 400 instead
335
+ # of leaking a 500.
336
+ raise ValueError("Team ID is already taken") from e
330
337
  await db.refresh(team_record)
331
338
  return Team.model_validate(team_record)
332
339