alita-sdk 0.3.448__tar.gz → 0.3.449__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 (378) hide show
  1. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/PKG-INFO +2 -1
  2. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/toolkits/mcp.py +63 -167
  3. alita_sdk-0.3.449/alita_sdk/runtime/tools/mcp_remote_tool.py +166 -0
  4. alita_sdk-0.3.449/alita_sdk/runtime/utils/mcp_sse_client.py +347 -0
  5. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk.egg-info/PKG-INFO +2 -1
  6. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk.egg-info/SOURCES.txt +1 -0
  7. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk.egg-info/requires.txt +1 -0
  8. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/pyproject.toml +2 -2
  9. alita_sdk-0.3.448/alita_sdk/runtime/tools/mcp_remote_tool.py +0 -269
  10. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/LICENSE +0 -0
  11. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/README.md +0 -0
  12. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/__init__.py +0 -0
  13. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/community/__init__.py +0 -0
  14. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/community/utils.py +0 -0
  15. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/__init__.py +0 -0
  16. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/ado.py +0 -0
  17. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/azure_search.py +0 -0
  18. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/bigquery.py +0 -0
  19. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/bitbucket.py +0 -0
  20. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/browser.py +0 -0
  21. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/carrier.py +0 -0
  22. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/confluence.py +0 -0
  23. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/delta_lake.py +0 -0
  24. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/embedding.py +0 -0
  25. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/figma.py +0 -0
  26. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/github.py +0 -0
  27. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/gitlab.py +0 -0
  28. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/google_places.py +0 -0
  29. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/jira.py +0 -0
  30. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/pgvector.py +0 -0
  31. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/postman.py +0 -0
  32. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/qtest.py +0 -0
  33. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/rally.py +0 -0
  34. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/report_portal.py +0 -0
  35. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/salesforce.py +0 -0
  36. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/service_now.py +0 -0
  37. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/sharepoint.py +0 -0
  38. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/slack.py +0 -0
  39. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/sonar.py +0 -0
  40. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/sql.py +0 -0
  41. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/testio.py +0 -0
  42. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/testrail.py +0 -0
  43. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/xray.py +0 -0
  44. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/zephyr.py +0 -0
  45. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/zephyr_enterprise.py +0 -0
  46. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/configurations/zephyr_essential.py +0 -0
  47. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/__init__.py +0 -0
  48. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/clients/__init__.py +0 -0
  49. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/clients/artifact.py +0 -0
  50. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/clients/client.py +0 -0
  51. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/clients/datasource.py +0 -0
  52. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/clients/mcp_discovery.py +0 -0
  53. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/clients/mcp_manager.py +0 -0
  54. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/clients/prompt.py +0 -0
  55. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/clients/sandbox_client.py +0 -0
  56. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/__init__.py +0 -0
  57. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
  58. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
  59. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/assistant.py +0 -0
  60. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
  61. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/constants.py +0 -0
  62. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
  63. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
  64. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
  65. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
  66. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
  67. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -0
  68. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
  69. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
  70. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaJSONLoader.py +0 -0
  71. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
  72. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaMarkdownLoader.py +0 -0
  73. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaPDFLoader.py +0 -0
  74. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaPowerPointLoader.py +0 -0
  75. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaPythonLoader.py +0 -0
  76. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
  77. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
  78. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/AlitaTextLoader.py +0 -0
  79. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/ImageParser.py +0 -0
  80. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
  81. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/constants.py +0 -0
  82. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
  83. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/indexer.py +0 -0
  84. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
  85. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
  86. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
  87. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
  88. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
  89. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/langraph_agent.py +0 -0
  90. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
  91. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
  92. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
  93. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
  94. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
  95. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/store_manager.py +0 -0
  96. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
  97. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
  98. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
  99. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
  100. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
  101. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
  102. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/tools/git.py +0 -0
  103. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/tools/log.py +0 -0
  104. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
  105. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/tools/state.py +0 -0
  106. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
  107. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
  108. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/langchain/utils.py +0 -0
  109. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/llms/__init__.py +0 -0
  110. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/llms/preloaded.py +0 -0
  111. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/models/mcp_models.py +0 -0
  112. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/toolkits/__init__.py +0 -0
  113. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/toolkits/application.py +0 -0
  114. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/toolkits/artifact.py +0 -0
  115. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/toolkits/configurations.py +0 -0
  116. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/toolkits/datasource.py +0 -0
  117. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/toolkits/prompt.py +0 -0
  118. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
  119. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/toolkits/tools.py +0 -0
  120. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
  121. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/__init__.py +0 -0
  122. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/agent.py +0 -0
  123. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/application.py +0 -0
  124. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/artifact.py +0 -0
  125. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/datasource.py +0 -0
  126. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/echo.py +0 -0
  127. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/function.py +0 -0
  128. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/graph.py +0 -0
  129. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/image_generation.py +0 -0
  130. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
  131. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/llm.py +0 -0
  132. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/loop.py +0 -0
  133. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/loop_output.py +0 -0
  134. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/mcp_inspect_tool.py +0 -0
  135. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/mcp_server_tool.py +0 -0
  136. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
  137. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/prompt.py +0 -0
  138. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/router.py +0 -0
  139. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/sandbox.py +0 -0
  140. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/tool.py +0 -0
  141. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/vectorstore.py +0 -0
  142. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/tools/vectorstore_base.py +0 -0
  143. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
  144. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/utils/__init__.py +0 -0
  145. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/utils/constants.py +0 -0
  146. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/utils/evaluate.py +0 -0
  147. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/utils/logging.py +0 -0
  148. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/utils/mcp_oauth.py +0 -0
  149. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
  150. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/utils/streamlit.py +0 -0
  151. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/utils/toolkit_runtime.py +0 -0
  152. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/utils/toolkit_utils.py +0 -0
  153. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/runtime/utils/utils.py +0 -0
  154. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/__init__.py +0 -0
  155. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/ado/__init__.py +0 -0
  156. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/ado/repos/__init__.py +0 -0
  157. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
  158. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/ado/test_plan/__init__.py +0 -0
  159. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +0 -0
  160. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/ado/utils.py +0 -0
  161. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/ado/wiki/__init__.py +0 -0
  162. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
  163. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/ado/work_item/__init__.py +0 -0
  164. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/ado/work_item/ado_wrapper.py +0 -0
  165. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
  166. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
  167. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/aws/__init__.py +0 -0
  168. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/aws/delta_lake/__init__.py +0 -0
  169. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/aws/delta_lake/api_wrapper.py +0 -0
  170. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/aws/delta_lake/schemas.py +0 -0
  171. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/aws/delta_lake/tool.py +0 -0
  172. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/azure_ai/__init__.py +0 -0
  173. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
  174. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
  175. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/base/__init__.py +0 -0
  176. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/base/tool.py +0 -0
  177. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/base_indexer_toolkit.py +0 -0
  178. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/bitbucket/__init__.py +0 -0
  179. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/bitbucket/api_wrapper.py +0 -0
  180. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
  181. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +0 -0
  182. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/browser/__init__.py +0 -0
  183. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/browser/crawler.py +0 -0
  184. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
  185. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/browser/google_search_rag.py +0 -0
  186. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/browser/utils.py +0 -0
  187. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/browser/wiki.py +0 -0
  188. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/__init__.py +0 -0
  189. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/api_wrapper.py +0 -0
  190. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
  191. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/backend_tests_tool.py +0 -0
  192. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/cancel_ui_test_tool.py +0 -0
  193. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/carrier_sdk.py +0 -0
  194. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +0 -0
  195. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/create_ui_test_tool.py +0 -0
  196. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
  197. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +0 -0
  198. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/run_ui_test_tool.py +0 -0
  199. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
  200. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/tools.py +0 -0
  201. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
  202. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +0 -0
  203. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/carrier/utils.py +0 -0
  204. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/__init__.py +0 -0
  205. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/__init__.py +0 -0
  206. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
  207. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/constants.py +0 -0
  208. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
  209. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
  210. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
  211. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
  212. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
  213. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
  214. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
  215. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
  216. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
  217. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
  218. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
  219. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
  220. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
  221. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
  222. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
  223. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/models.py +0 -0
  224. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/sematic/__init__.py +0 -0
  225. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
  226. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/sematic/json_chunker.py +0 -0
  227. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
  228. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +0 -0
  229. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
  230. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/chunkers/utils.py +0 -0
  231. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/cloud/__init__.py +0 -0
  232. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
  233. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
  234. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
  235. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
  236. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
  237. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
  238. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
  239. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
  240. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/code/__init__.py +0 -0
  241. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/code/linter/__init__.py +0 -0
  242. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
  243. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
  244. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/code/sonar/__init__.py +0 -0
  245. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
  246. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/code_indexer_toolkit.py +0 -0
  247. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/confluence/__init__.py +0 -0
  248. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/confluence/api_wrapper.py +0 -0
  249. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/confluence/loader.py +0 -0
  250. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/confluence/utils.py +0 -0
  251. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
  252. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
  253. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/elastic/__init__.py +0 -0
  254. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
  255. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/elitea_base.py +0 -0
  256. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/figma/__init__.py +0 -0
  257. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/figma/api_wrapper.py +0 -0
  258. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/github/__init__.py +0 -0
  259. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/github/api_wrapper.py +0 -0
  260. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/github/github_client.py +0 -0
  261. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
  262. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/github/schemas.py +0 -0
  263. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/github/tool.py +0 -0
  264. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/github/tool_prompts.py +0 -0
  265. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/gitlab/__init__.py +0 -0
  266. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/gitlab/api_wrapper.py +0 -0
  267. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/gitlab/tools.py +0 -0
  268. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/gitlab/utils.py +0 -0
  269. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/gitlab_org/__init__.py +0 -0
  270. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
  271. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/gmail/__init__.py +0 -0
  272. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
  273. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/gmail/utils.py +0 -0
  274. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/google/__init__.py +0 -0
  275. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/google/bigquery/__init__.py +0 -0
  276. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/google/bigquery/api_wrapper.py +0 -0
  277. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/google/bigquery/schemas.py +0 -0
  278. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/google/bigquery/tool.py +0 -0
  279. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/google_places/__init__.py +0 -0
  280. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
  281. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/jira/__init__.py +0 -0
  282. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/jira/api_wrapper.py +0 -0
  283. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/keycloak/__init__.py +0 -0
  284. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
  285. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/llm/__init__.py +0 -0
  286. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/llm/img_utils.py +0 -0
  287. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/llm/llm_utils.py +0 -0
  288. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/localgit/__init__.py +0 -0
  289. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/localgit/local_git.py +0 -0
  290. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/localgit/tool.py +0 -0
  291. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/memory/__init__.py +0 -0
  292. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/non_code_indexer_toolkit.py +0 -0
  293. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/ocr/__init__.py +0 -0
  294. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
  295. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/ocr/text_detection.py +0 -0
  296. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/openapi/__init__.py +0 -0
  297. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/__init__.py +0 -0
  298. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
  299. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
  300. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
  301. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/dataframe/executor/__init__.py +0 -0
  302. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
  303. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
  304. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/dataframe/generator/__init__.py +0 -0
  305. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
  306. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
  307. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
  308. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
  309. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
  310. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
  311. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
  312. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
  313. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
  314. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
  315. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
  316. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/postman/__init__.py +0 -0
  317. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/postman/api_wrapper.py +0 -0
  318. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/postman/postman_analysis.py +0 -0
  319. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pptx/__init__.py +0 -0
  320. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
  321. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/qtest/__init__.py +0 -0
  322. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/qtest/api_wrapper.py +0 -0
  323. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/qtest/tool.py +0 -0
  324. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/rally/__init__.py +0 -0
  325. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/rally/api_wrapper.py +0 -0
  326. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/report_portal/__init__.py +0 -0
  327. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
  328. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
  329. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/salesforce/__init__.py +0 -0
  330. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
  331. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/salesforce/model.py +0 -0
  332. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/servicenow/__init__.py +0 -0
  333. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
  334. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
  335. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/sharepoint/__init__.py +0 -0
  336. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/sharepoint/api_wrapper.py +0 -0
  337. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/sharepoint/authorization_helper.py +0 -0
  338. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/sharepoint/utils.py +0 -0
  339. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/slack/__init__.py +0 -0
  340. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/slack/api_wrapper.py +0 -0
  341. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/sql/__init__.py +0 -0
  342. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/sql/api_wrapper.py +0 -0
  343. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/sql/models.py +0 -0
  344. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/testio/__init__.py +0 -0
  345. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/testio/api_wrapper.py +0 -0
  346. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/testrail/__init__.py +0 -0
  347. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
  348. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/utils/__init__.py +0 -0
  349. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/utils/available_tools_decorator.py +0 -0
  350. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/utils/content_parser.py +0 -0
  351. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/vector_adapters/VectorStoreAdapter.py +0 -0
  352. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/vector_adapters/__init__.py +0 -0
  353. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/xray/__init__.py +0 -0
  354. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/xray/api_wrapper.py +0 -0
  355. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/yagmail/__init__.py +0 -0
  356. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
  357. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
  358. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/zephyr/__init__.py +0 -0
  359. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
  360. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/zephyr/rest_client.py +0 -0
  361. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/zephyr_enterprise/__init__.py +0 -0
  362. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
  363. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
  364. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/zephyr_essential/__init__.py +0 -0
  365. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/zephyr_essential/api_wrapper.py +0 -0
  366. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/zephyr_essential/client.py +0 -0
  367. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/zephyr_scale/__init__.py +0 -0
  368. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
  369. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/zephyr_squad/__init__.py +0 -0
  370. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/zephyr_squad/api_wrapper.py +0 -0
  371. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +0 -0
  372. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk.egg-info/dependency_links.txt +0 -0
  373. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/alita_sdk.egg-info/top_level.txt +0 -0
  374. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/setup.cfg +0 -0
  375. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/tests/test_ado_analysis.py +0 -0
  376. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/tests/test_github_analysis.py +0 -0
  377. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/tests/test_gitlab_analysis.py +0 -0
  378. {alita_sdk-0.3.448 → alita_sdk-0.3.449}/tests/test_jira_analysis.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alita_sdk
3
- Version: 0.3.448
3
+ Version: 0.3.449
4
4
  Summary: SDK for building langchain agents using resources from Alita
5
5
  Author-email: Artem Rozumenko <artyom.rozumenko@gmail.com>, Mikalai Biazruchka <mikalai_biazruchka@epam.com>, Roman Mitusov <roman_mitusov@epam.com>, Ivan Krakhmaliuk <lifedj27@gmail.com>, Artem Dubrovskiy <ad13box@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -24,6 +24,7 @@ Requires-Dist: fastapi==0.115.9
24
24
  Requires-Dist: httpcore==1.0.7
25
25
  Requires-Dist: urllib3>=2
26
26
  Requires-Dist: certifi==2024.8.30
27
+ Requires-Dist: aiohttp>=3.9.0
27
28
  Provides-Extra: runtime
28
29
  Requires-Dist: streamlit>=1.28.0; extra == "runtime"
29
30
  Requires-Dist: langchain_core<0.4.0,>=0.3.76; extra == "runtime"
@@ -7,6 +7,7 @@ Following MCP specification: https://modelcontextprotocol.io/specification/2025-
7
7
  import logging
8
8
  import re
9
9
  import requests
10
+ import asyncio
10
11
  from typing import List, Optional, Any, Dict, Literal, ClassVar, Union
11
12
 
12
13
  from langchain_core.tools import BaseToolkit, BaseTool
@@ -17,6 +18,7 @@ from ..tools.mcp_remote_tool import McpRemoteTool
17
18
  from ..tools.mcp_inspect_tool import McpInspectTool
18
19
  from ...tools.utils import TOOLKIT_SPLITTER, clean_string
19
20
  from ..models.mcp_models import McpConnectionConfig
21
+ from ..utils.mcp_sse_client import McpSseClient
20
22
  from ..utils.mcp_oauth import (
21
23
  McpAuthorizationRequired,
22
24
  canonical_resource,
@@ -459,42 +461,76 @@ class McpToolkit(BaseToolkit):
459
461
  timeout: int
460
462
  ) -> List[Dict[str, Any]]:
461
463
  """
462
- Synchronously discover tools and prompts from MCP server using HTTP requests.
464
+ Discover tools and prompts from MCP server using SSE client.
463
465
  Returns list of tool/prompt dictionaries with name, description, and inputSchema.
464
466
  Prompts are converted to tools that can be invoked.
465
467
  """
466
- all_tools = []
467
-
468
- # Use session_id from UI (passed via connection_config)
469
- # For SSE-based MCP servers, frontend generates a UUID and sends it with the OAuth token
470
468
  session_id = connection_config.session_id
471
469
 
472
470
  if not session_id:
473
471
  logger.warning(f"[MCP Session] No session_id provided for '{toolkit_name}' - server may require it")
474
472
  logger.warning(f"[MCP Session] Frontend should generate a UUID and include it with mcp_tokens")
475
473
 
476
- # Discover regular tools
477
- tools_data = cls._discover_mcp_endpoint(
478
- endpoint="tools/list",
479
- toolkit_name=toolkit_name,
480
- connection_config=connection_config,
481
- timeout=timeout,
482
- session_id=session_id
474
+ # Run async discovery in sync context
475
+ try:
476
+ all_tools = asyncio.run(
477
+ cls._discover_tools_async(
478
+ toolkit_name=toolkit_name,
479
+ connection_config=connection_config,
480
+ timeout=timeout
481
+ )
482
+ )
483
+ return all_tools, session_id
484
+ except Exception as e:
485
+ logger.error(f"[MCP SSE] Discovery failed for '{toolkit_name}': {e}")
486
+ raise
487
+
488
+ @classmethod
489
+ async def _discover_tools_async(
490
+ cls,
491
+ toolkit_name: str,
492
+ connection_config: McpConnectionConfig,
493
+ timeout: int
494
+ ) -> List[Dict[str, Any]]:
495
+ """
496
+ Async implementation of tool discovery using SSE client.
497
+ """
498
+ all_tools = []
499
+ session_id = connection_config.session_id
500
+
501
+ if not session_id:
502
+ logger.error(f"[MCP SSE] session_id is required for SSE servers")
503
+ raise ValueError("session_id is required. Frontend must generate UUID.")
504
+
505
+ logger.info(f"[MCP SSE] Discovering from {connection_config.url} with session {session_id}")
506
+
507
+ # Prepare headers
508
+ headers = {}
509
+ if connection_config.headers:
510
+ headers.update(connection_config.headers)
511
+
512
+ # Create SSE client
513
+ client = McpSseClient(
514
+ url=connection_config.url,
515
+ session_id=session_id,
516
+ headers=headers,
517
+ timeout=timeout
483
518
  )
484
- all_tools.extend(tools_data)
485
- logger.info(f"Discovered {len(tools_data)} tools from MCP toolkit '{toolkit_name}'")
486
519
 
487
- # Discover prompts and convert them to tools
520
+ # Initialize MCP session
521
+ await client.initialize()
522
+ logger.info(f"[MCP SSE] Session initialized for '{toolkit_name}'")
523
+
524
+ # Discover tools
525
+ tools = await client.list_tools()
526
+ all_tools.extend(tools)
527
+ logger.info(f"[MCP SSE] Discovered {len(tools)} tools from '{toolkit_name}'")
528
+
529
+ # Discover prompts
488
530
  try:
489
- prompts_data = cls._discover_mcp_endpoint(
490
- endpoint="prompts/list",
491
- toolkit_name=toolkit_name,
492
- connection_config=connection_config,
493
- timeout=timeout,
494
- session_id=session_id
495
- )
531
+ prompts = await client.list_prompts()
496
532
  # Convert prompts to tool format
497
- for prompt in prompts_data:
533
+ for prompt in prompts:
498
534
  prompt_tool = {
499
535
  "name": f"prompt_{prompt.get('name', 'unnamed')}",
500
536
  "description": prompt.get('description', f"Execute prompt: {prompt.get('name')}"),
@@ -519,152 +555,12 @@ class McpToolkit(BaseToolkit):
519
555
  "_mcp_prompt_name": prompt.get('name')
520
556
  }
521
557
  all_tools.append(prompt_tool)
522
- logger.info(f"Discovered {len(prompts_data)} prompts from MCP toolkit '{toolkit_name}'")
523
- except Exception as e:
524
- logger.warning(f"Failed to discover prompts from MCP toolkit '{toolkit_name}': {e}")
525
-
526
- logger.info(f"Total discovered {len(all_tools)} tools+prompts from MCP toolkit '{toolkit_name}'")
527
- return all_tools, session_id
528
-
529
- @classmethod
530
- def _discover_mcp_endpoint(
531
- cls,
532
- endpoint: str,
533
- toolkit_name: str,
534
- connection_config: McpConnectionConfig,
535
- timeout: int,
536
- session_id: Optional[str] = None
537
- ) -> List[Dict[str, Any]]:
538
- """
539
- Discover items from a specific MCP endpoint (tools/list or prompts/list).
540
- Returns list of dictionaries.
541
- """
542
- import time
543
-
544
- # MCP protocol request
545
- mcp_request = {
546
- "jsonrpc": "2.0",
547
- "id": f"discover_{endpoint.replace('/', '_')}_{int(time.time())}",
548
- "method": endpoint,
549
- "params": {}
550
- }
551
-
552
- headers = {
553
- "Content-Type": "application/json",
554
- "Accept": "application/json, text/event-stream"
555
- }
556
- if connection_config.headers:
557
- headers.update(connection_config.headers)
558
-
559
- # Add sessionId to URL if provided (for stateful SSE servers)
560
- url = connection_config.url
561
- if session_id:
562
- separator = '&' if '?' in url else '?'
563
- url = f"{url}{separator}sessionId={session_id}"
564
- logger.info(f"[MCP Session] Using session {session_id} for {endpoint} request")
565
- else:
566
- logger.debug(f"[MCP Session] No session ID available for {endpoint} request - server may not require sessions")
567
-
568
- try:
569
- logger.debug(f"Sending MCP {endpoint} request to {url}")
570
- response = requests.post(
571
- url,
572
- json=mcp_request,
573
- headers=headers,
574
- timeout=timeout
575
- )
576
-
577
- auth_header = response.headers.get('WWW-Authenticate', '')
578
- if response.status_code == 401:
579
- resource_metadata_url = extract_resource_metadata_url(auth_header, connection_config.url)
580
- metadata = fetch_resource_metadata(resource_metadata_url, timeout=timeout) if resource_metadata_url else None
581
-
582
- # If we couldn't get metadata from the resource_metadata endpoint,
583
- # infer authorization servers from the WWW-Authenticate header and server URL
584
- if not metadata or not metadata.get('authorization_servers'):
585
- inferred_servers = infer_authorization_servers_from_realm(auth_header, connection_config.url)
586
- if inferred_servers:
587
- if not metadata:
588
- metadata = {}
589
- metadata['authorization_servers'] = inferred_servers
590
- logger.info(f"Inferred authorization servers for {connection_config.url}: {inferred_servers}")
591
-
592
- # Fetch OAuth authorization server metadata from the inferred server
593
- # This avoids CORS issues in the frontend
594
- from alita_sdk.runtime.utils.mcp_oauth import fetch_oauth_authorization_server_metadata
595
- auth_server_metadata = fetch_oauth_authorization_server_metadata(inferred_servers[0], timeout=timeout)
596
- if auth_server_metadata:
597
- metadata['oauth_authorization_server'] = auth_server_metadata
598
- logger.info(f"Fetched OAuth metadata for {inferred_servers[0]}")
599
-
600
- raise McpAuthorizationRequired(
601
- message=f"MCP server {connection_config.url} requires OAuth authorization",
602
- server_url=canonical_resource(connection_config.url),
603
- resource_metadata_url=resource_metadata_url,
604
- www_authenticate=auth_header,
605
- resource_metadata=metadata,
606
- status=response.status_code,
607
- tool_name=toolkit_name,
608
- )
609
-
610
- if response.status_code != 200:
611
- logger.error(f"MCP server returned non-200 status: {response.status_code}")
612
- raise Exception(f"HTTP {response.status_code}: {response.text}")
613
-
614
- # Check content type and parse accordingly
615
- content_type = response.headers.get('Content-Type', '')
616
-
617
- if 'text/event-stream' in content_type:
618
- # Parse SSE (Server-Sent Events) format
619
- data = cls._parse_sse_response(response.text)
620
- elif 'application/json' in content_type:
621
- # Parse regular JSON
622
- try:
623
- data = response.json()
624
- except ValueError as json_err:
625
- raise Exception(f"Invalid JSON response: {json_err}. Response text: {response.text[:200]}")
626
- else:
627
- raise Exception(f"Unexpected Content-Type: {content_type}. Response: {response.text[:200]}")
628
-
629
- if "error" in data:
630
- raise Exception(f"MCP Error: {data['error']}")
631
-
632
- # Parse MCP response - different endpoints return different keys
633
- result = data.get("result", {})
634
- if endpoint == "tools/list":
635
- return result.get("tools", [])
636
- elif endpoint == "prompts/list":
637
- return result.get("prompts", [])
638
- else:
639
- return result.get("items", [])
640
-
558
+ logger.info(f"[MCP SSE] Discovered {len(prompts)} prompts from '{toolkit_name}'")
641
559
  except Exception as e:
642
- logger.error(f"Failed to discover from {endpoint} on MCP toolkit '{toolkit_name}': {e}")
643
- raise
644
-
645
- @staticmethod
646
- def _parse_sse_response(sse_text: str) -> Dict[str, Any]:
647
- """
648
- Parse Server-Sent Events (SSE) format response.
649
- SSE format: event: message\ndata: {json}\n\n
650
- """
651
- import json
560
+ logger.warning(f"[MCP SSE] Failed to discover prompts: {e}")
652
561
 
653
- lines = sse_text.strip().split('\n')
654
- data_line = None
655
-
656
- for line in lines:
657
- if line.startswith('data:'):
658
- data_line = line[5:].strip() # Remove 'data:' prefix
659
- break
660
-
661
- if not data_line:
662
- raise Exception(f"No data found in SSE response: {sse_text[:200]}")
663
-
664
- try:
665
- return json.loads(data_line)
666
- except json.JSONDecodeError as e:
667
- raise Exception(f"Failed to parse SSE data as JSON: {e}. Data: {data_line[:200]}")
562
+ logger.info(f"[MCP SSE] Total discovered {len(all_tools)} items from '{toolkit_name}'")
563
+ return all_tools
668
564
 
669
565
  @classmethod
670
566
  def _create_tool_from_dict(
@@ -0,0 +1,166 @@
1
+ """
2
+ MCP Remote Tool for direct HTTP/SSE invocation.
3
+ This tool is used for remote MCP servers accessed via HTTP/SSE.
4
+ """
5
+
6
+ import asyncio
7
+ import json
8
+ import logging
9
+ import time
10
+ import uuid
11
+ from concurrent.futures import ThreadPoolExecutor
12
+ from typing import Any, Dict, Optional
13
+
14
+ from .mcp_server_tool import McpServerTool
15
+ from pydantic import Field
16
+ from ..utils.mcp_oauth import (
17
+ McpAuthorizationRequired,
18
+ canonical_resource,
19
+ extract_resource_metadata_url,
20
+ fetch_resource_metadata_async,
21
+ infer_authorization_servers_from_realm,
22
+ )
23
+ from ..utils.mcp_sse_client import McpSseClient
24
+
25
+ logger = logging.getLogger(__name__)
26
+
27
+
28
+ class McpRemoteTool(McpServerTool):
29
+ """
30
+ Tool for invoking remote MCP server tools via HTTP/SSE.
31
+ Extends McpServerTool and overrides _run to use direct HTTP calls instead of client.mcp_tool_call.
32
+ """
33
+
34
+ # Remote MCP connection details
35
+ server_url: str = Field(..., description="URL of the remote MCP server")
36
+ server_headers: Optional[Dict[str, str]] = Field(default=None, description="HTTP headers for authentication")
37
+ original_tool_name: Optional[str] = Field(default=None, description="Original tool name from MCP server (before optimization)")
38
+ is_prompt: bool = False # Flag to indicate if this is a prompt tool
39
+ prompt_name: Optional[str] = None # Original prompt name if this is a prompt
40
+ session_id: Optional[str] = Field(default=None, description="MCP session ID for stateful SSE servers")
41
+
42
+ def model_post_init(self, __context: Any) -> None:
43
+ """Update metadata with session info after model initialization."""
44
+ super().model_post_init(__context)
45
+ self._update_metadata_with_session()
46
+
47
+ def _update_metadata_with_session(self):
48
+ """Update the metadata dict with current session information."""
49
+ if self.session_id:
50
+ if self.metadata is None:
51
+ self.metadata = {}
52
+ self.metadata.update({
53
+ 'mcp_session_id': self.session_id,
54
+ 'mcp_server_url': canonical_resource(self.server_url)
55
+ })
56
+
57
+ def __getstate__(self):
58
+ """Custom serialization for pickle compatibility."""
59
+ state = super().__getstate__()
60
+ # Ensure headers are serializable
61
+ if 'server_headers' in state and state['server_headers'] is not None:
62
+ state['server_headers'] = dict(state['server_headers'])
63
+ return state
64
+
65
+ def _run(self, *args, **kwargs):
66
+ """
67
+ Execute the MCP tool via direct HTTP/SSE call to the remote server.
68
+ Overrides the parent method to avoid using client.mcp_tool_call.
69
+ """
70
+ try:
71
+ # Always create a new event loop for sync context
72
+ with ThreadPoolExecutor() as executor:
73
+ future = executor.submit(self._run_in_new_loop, kwargs)
74
+ return future.result(timeout=self.tool_timeout_sec)
75
+ except McpAuthorizationRequired:
76
+ # Bubble up so LangChain can surface a tool error with useful metadata
77
+ raise
78
+ except Exception as e:
79
+ logger.error(f"Error executing remote MCP tool '{self.name}': {e}")
80
+ return f"Error executing tool: {e}"
81
+
82
+ def _run_in_new_loop(self, kwargs: Dict[str, Any]) -> str:
83
+ """Run the async tool invocation in a new event loop."""
84
+ return asyncio.run(self._execute_remote_tool(kwargs))
85
+
86
+ async def _execute_remote_tool(self, kwargs: Dict[str, Any]) -> str:
87
+ """Execute the actual remote MCP tool call using SSE client."""
88
+ from ...tools.utils import TOOLKIT_SPLITTER
89
+
90
+ # Check for session_id requirement
91
+ if not self.session_id:
92
+ logger.error(f"[MCP Session] Missing session_id for tool '{self.name}'")
93
+ raise Exception("sessionId required. Frontend must generate UUID and send with mcp_tokens.")
94
+
95
+ # Use the original tool name from discovery for MCP server invocation
96
+ tool_name_for_server = self.original_tool_name
97
+ if not tool_name_for_server:
98
+ tool_name_for_server = self.name.rsplit(TOOLKIT_SPLITTER, 1)[-1] if TOOLKIT_SPLITTER in self.name else self.name
99
+ logger.warning(f"original_tool_name not set for '{self.name}', using extracted: {tool_name_for_server}")
100
+
101
+ logger.info(f"[MCP SSE] Executing tool '{tool_name_for_server}' with session {self.session_id}")
102
+
103
+ try:
104
+ # Prepare headers
105
+ headers = {}
106
+ if self.server_headers:
107
+ headers.update(self.server_headers)
108
+
109
+ # Create SSE client
110
+ client = McpSseClient(
111
+ url=self.server_url,
112
+ session_id=self.session_id,
113
+ headers=headers,
114
+ timeout=self.tool_timeout_sec
115
+ )
116
+
117
+ # Execute tool call via SSE
118
+ result = await client.call_tool(tool_name_for_server, kwargs)
119
+
120
+ # Format the result
121
+ if isinstance(result, dict):
122
+ # Check for content array (common in MCP responses)
123
+ if "content" in result:
124
+ content_items = result["content"]
125
+ if isinstance(content_items, list):
126
+ # Extract text from content items
127
+ text_parts = []
128
+ for item in content_items:
129
+ if isinstance(item, dict):
130
+ if item.get("type") == "text" and "text" in item:
131
+ text_parts.append(item["text"])
132
+ elif "text" in item:
133
+ text_parts.append(item["text"])
134
+ else:
135
+ text_parts.append(json.dumps(item))
136
+ else:
137
+ text_parts.append(str(item))
138
+ return "\n".join(text_parts)
139
+
140
+ # Return formatted JSON if no content field
141
+ return json.dumps(result, indent=2)
142
+
143
+ # Return as string for other types
144
+ return str(result)
145
+
146
+ except Exception as e:
147
+ logger.error(f"[MCP SSE] Tool execution failed: {e}", exc_info=True)
148
+ raise
149
+
150
+ def _parse_sse(self, text: str) -> Dict[str, Any]:
151
+ """Parse Server-Sent Events (SSE) format response."""
152
+ for line in text.split('\n'):
153
+ line = line.strip()
154
+ if line.startswith('data:'):
155
+ json_str = line[5:].strip()
156
+ return json.loads(json_str)
157
+ raise ValueError("No data found in SSE response")
158
+
159
+ def get_session_metadata(self) -> dict:
160
+ """Return session metadata to be included in tool responses."""
161
+ if self.session_id:
162
+ return {
163
+ 'mcp_session_id': self.session_id,
164
+ 'mcp_server_url': canonical_resource(self.server_url)
165
+ }
166
+ return {}