alita-sdk 0.3.405__tar.gz → 0.3.458__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.

Potentially problematic release.


This version of alita-sdk might be problematic. Click here for more details.

Files changed (388) hide show
  1. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/PKG-INFO +2 -1
  2. alita_sdk-0.3.458/alita_sdk/configurations/bitbucket.py +127 -0
  3. alita_sdk-0.3.458/alita_sdk/configurations/confluence.py +132 -0
  4. alita_sdk-0.3.458/alita_sdk/configurations/gitlab.py +110 -0
  5. alita_sdk-0.3.458/alita_sdk/configurations/jira.py +140 -0
  6. alita_sdk-0.3.458/alita_sdk/configurations/testrail.py +109 -0
  7. alita_sdk-0.3.458/alita_sdk/configurations/xray.py +125 -0
  8. alita_sdk-0.3.458/alita_sdk/configurations/zephyr_enterprise.py +113 -0
  9. alita_sdk-0.3.458/alita_sdk/configurations/zephyr_essential.py +95 -0
  10. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/clients/client.py +45 -9
  11. alita_sdk-0.3.458/alita_sdk/runtime/clients/mcp_discovery.py +342 -0
  12. alita_sdk-0.3.458/alita_sdk/runtime/clients/mcp_manager.py +262 -0
  13. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/clients/sandbox_client.py +8 -0
  14. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/assistant.py +19 -5
  15. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/constants.py +5 -1
  16. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaJSONLoader.py +4 -1
  17. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/constants.py +8 -8
  18. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/langraph_agent.py +107 -29
  19. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/utils.py +33 -7
  20. alita_sdk-0.3.458/alita_sdk/runtime/models/mcp_models.py +61 -0
  21. alita_sdk-0.3.458/alita_sdk/runtime/toolkits/__init__.py +24 -0
  22. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/application.py +8 -1
  23. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/artifact.py +5 -6
  24. alita_sdk-0.3.458/alita_sdk/runtime/toolkits/mcp.py +895 -0
  25. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/tools.py +74 -14
  26. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/application.py +7 -0
  27. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/function.py +12 -4
  28. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/llm.py +15 -6
  29. alita_sdk-0.3.458/alita_sdk/runtime/tools/mcp_inspect_tool.py +284 -0
  30. alita_sdk-0.3.458/alita_sdk/runtime/tools/mcp_remote_tool.py +166 -0
  31. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/mcp_server_tool.py +3 -1
  32. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/sandbox.py +15 -31
  33. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/vectorstore_base.py +17 -2
  34. alita_sdk-0.3.458/alita_sdk/runtime/utils/mcp_oauth.py +164 -0
  35. alita_sdk-0.3.458/alita_sdk/runtime/utils/mcp_sse_client.py +405 -0
  36. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/streamlit.py +34 -3
  37. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/toolkit_utils.py +14 -4
  38. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/__init__.py +5 -0
  39. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/ado/repos/__init__.py +1 -0
  40. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/ado/test_plan/__init__.py +1 -1
  41. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/ado/wiki/__init__.py +1 -5
  42. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/ado/work_item/__init__.py +1 -5
  43. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/ado/work_item/ado_wrapper.py +17 -8
  44. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/base_indexer_toolkit.py +26 -7
  45. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/bitbucket/__init__.py +1 -0
  46. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +1 -1
  47. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/code/sonar/__init__.py +1 -1
  48. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/confluence/__init__.py +2 -2
  49. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/github/__init__.py +2 -2
  50. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/gitlab/__init__.py +2 -1
  51. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/gitlab/api_wrapper.py +11 -7
  52. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/gitlab_org/__init__.py +1 -2
  53. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/google_places/__init__.py +2 -1
  54. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/jira/__init__.py +1 -0
  55. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/jira/api_wrapper.py +1 -1
  56. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/memory/__init__.py +1 -1
  57. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/openapi/__init__.py +10 -1
  58. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/__init__.py +1 -1
  59. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/postman/__init__.py +2 -1
  60. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pptx/__init__.py +2 -2
  61. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/qtest/__init__.py +3 -3
  62. alita_sdk-0.3.458/alita_sdk/tools/qtest/api_wrapper.py +2081 -0
  63. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/rally/__init__.py +1 -2
  64. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/report_portal/__init__.py +1 -0
  65. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/salesforce/__init__.py +1 -0
  66. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/servicenow/__init__.py +2 -3
  67. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/sharepoint/__init__.py +1 -0
  68. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/sharepoint/api_wrapper.py +108 -32
  69. alita_sdk-0.3.458/alita_sdk/tools/sharepoint/authorization_helper.py +247 -0
  70. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/sharepoint/utils.py +8 -2
  71. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/slack/__init__.py +1 -0
  72. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/sql/__init__.py +2 -1
  73. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/testio/__init__.py +1 -0
  74. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/testrail/__init__.py +1 -3
  75. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/utils/content_parser.py +27 -16
  76. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/xray/__init__.py +2 -1
  77. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr/__init__.py +2 -1
  78. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_enterprise/__init__.py +1 -0
  79. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_essential/__init__.py +1 -0
  80. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_scale/__init__.py +1 -0
  81. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_squad/__init__.py +1 -0
  82. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk.egg-info/PKG-INFO +2 -1
  83. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk.egg-info/SOURCES.txt +8 -0
  84. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk.egg-info/requires.txt +1 -0
  85. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/pyproject.toml +2 -2
  86. alita_sdk-0.3.405/alita_sdk/configurations/bitbucket.py +0 -32
  87. alita_sdk-0.3.405/alita_sdk/configurations/confluence.py +0 -37
  88. alita_sdk-0.3.405/alita_sdk/configurations/gitlab.py +0 -31
  89. alita_sdk-0.3.405/alita_sdk/configurations/jira.py +0 -37
  90. alita_sdk-0.3.405/alita_sdk/configurations/testrail.py +0 -21
  91. alita_sdk-0.3.405/alita_sdk/configurations/xray.py +0 -32
  92. alita_sdk-0.3.405/alita_sdk/configurations/zephyr_enterprise.py +0 -20
  93. alita_sdk-0.3.405/alita_sdk/configurations/zephyr_essential.py +0 -20
  94. alita_sdk-0.3.405/alita_sdk/tools/qtest/api_wrapper.py +0 -512
  95. alita_sdk-0.3.405/alita_sdk/tools/sharepoint/authorization_helper.py +0 -156
  96. alita_sdk-0.3.405/alita_sdk/tools/vector_adapters/__init__.py +0 -0
  97. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/LICENSE +0 -0
  98. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/README.md +0 -0
  99. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/__init__.py +0 -0
  100. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/community/__init__.py +0 -0
  101. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/community/utils.py +0 -0
  102. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/__init__.py +0 -0
  103. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/ado.py +0 -0
  104. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/azure_search.py +0 -0
  105. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/bigquery.py +0 -0
  106. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/browser.py +0 -0
  107. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/carrier.py +0 -0
  108. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/delta_lake.py +0 -0
  109. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/embedding.py +0 -0
  110. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/figma.py +0 -0
  111. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/github.py +0 -0
  112. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/google_places.py +0 -0
  113. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/pgvector.py +0 -0
  114. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/postman.py +0 -0
  115. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/qtest.py +0 -0
  116. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/rally.py +0 -0
  117. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/report_portal.py +0 -0
  118. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/salesforce.py +0 -0
  119. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/service_now.py +0 -0
  120. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/sharepoint.py +0 -0
  121. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/slack.py +0 -0
  122. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/sonar.py +0 -0
  123. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/sql.py +0 -0
  124. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/testio.py +0 -0
  125. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/configurations/zephyr.py +0 -0
  126. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/__init__.py +0 -0
  127. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/clients/__init__.py +0 -0
  128. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/clients/artifact.py +0 -0
  129. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/clients/datasource.py +0 -0
  130. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/clients/prompt.py +0 -0
  131. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/__init__.py +0 -0
  132. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
  133. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
  134. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
  135. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
  136. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
  137. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
  138. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
  139. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
  140. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -0
  141. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
  142. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
  143. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
  144. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaMarkdownLoader.py +0 -0
  145. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaPDFLoader.py +0 -0
  146. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaPowerPointLoader.py +0 -0
  147. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaPythonLoader.py +0 -0
  148. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
  149. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
  150. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/AlitaTextLoader.py +0 -0
  151. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/ImageParser.py +0 -0
  152. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
  153. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
  154. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/indexer.py +0 -0
  155. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
  156. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
  157. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
  158. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
  159. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
  160. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
  161. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
  162. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
  163. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
  164. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
  165. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/store_manager.py +0 -0
  166. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
  167. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
  168. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
  169. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
  170. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
  171. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
  172. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/git.py +0 -0
  173. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/log.py +0 -0
  174. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
  175. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/state.py +0 -0
  176. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
  177. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
  178. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/llms/__init__.py +0 -0
  179. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/llms/preloaded.py +0 -0
  180. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/configurations.py +0 -0
  181. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/datasource.py +0 -0
  182. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/prompt.py +0 -0
  183. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
  184. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
  185. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/__init__.py +0 -0
  186. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/agent.py +0 -0
  187. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/artifact.py +0 -0
  188. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/datasource.py +0 -0
  189. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/echo.py +0 -0
  190. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/graph.py +0 -0
  191. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/image_generation.py +0 -0
  192. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
  193. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/loop.py +0 -0
  194. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/loop_output.py +0 -0
  195. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
  196. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/prompt.py +0 -0
  197. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/router.py +0 -0
  198. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/tool.py +0 -0
  199. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/tools/vectorstore.py +0 -0
  200. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
  201. {alita_sdk-0.3.405/alita_sdk/runtime/toolkits → alita_sdk-0.3.458/alita_sdk/runtime/utils}/__init__.py +0 -0
  202. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/constants.py +0 -0
  203. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/evaluate.py +0 -0
  204. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/logging.py +0 -0
  205. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
  206. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/toolkit_runtime.py +0 -0
  207. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/runtime/utils/utils.py +0 -0
  208. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/ado/__init__.py +0 -0
  209. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
  210. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +0 -0
  211. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/ado/utils.py +0 -0
  212. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
  213. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
  214. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
  215. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/aws/__init__.py +0 -0
  216. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/aws/delta_lake/__init__.py +0 -0
  217. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/aws/delta_lake/api_wrapper.py +0 -0
  218. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/aws/delta_lake/schemas.py +0 -0
  219. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/aws/delta_lake/tool.py +0 -0
  220. {alita_sdk-0.3.405/alita_sdk/runtime/utils → alita_sdk-0.3.458/alita_sdk/tools/azure_ai}/__init__.py +0 -0
  221. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
  222. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
  223. {alita_sdk-0.3.405/alita_sdk/tools/azure_ai → alita_sdk-0.3.458/alita_sdk/tools/base}/__init__.py +0 -0
  224. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/base/tool.py +0 -0
  225. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/bitbucket/api_wrapper.py +0 -0
  226. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
  227. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +0 -0
  228. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/browser/__init__.py +0 -0
  229. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/browser/crawler.py +0 -0
  230. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
  231. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/browser/google_search_rag.py +0 -0
  232. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/browser/utils.py +0 -0
  233. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/browser/wiki.py +0 -0
  234. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/__init__.py +0 -0
  235. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/api_wrapper.py +0 -0
  236. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
  237. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/backend_tests_tool.py +0 -0
  238. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/cancel_ui_test_tool.py +0 -0
  239. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/carrier_sdk.py +0 -0
  240. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +0 -0
  241. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/create_ui_test_tool.py +0 -0
  242. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
  243. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +0 -0
  244. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/run_ui_test_tool.py +0 -0
  245. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
  246. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/tools.py +0 -0
  247. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/ui_reports_tool.py +0 -0
  248. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +0 -0
  249. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/carrier/utils.py +0 -0
  250. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/__init__.py +0 -0
  251. {alita_sdk-0.3.405/alita_sdk/tools/base → alita_sdk-0.3.458/alita_sdk/tools/chunkers/code}/__init__.py +0 -0
  252. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
  253. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/constants.py +0 -0
  254. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
  255. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
  256. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
  257. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
  258. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
  259. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
  260. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
  261. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
  262. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
  263. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
  264. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
  265. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
  266. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
  267. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
  268. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
  269. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/models.py +0 -0
  270. {alita_sdk-0.3.405/alita_sdk/tools/chunkers/code → alita_sdk-0.3.458/alita_sdk/tools/chunkers/sematic}/__init__.py +0 -0
  271. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
  272. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/sematic/json_chunker.py +0 -0
  273. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
  274. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
  275. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/chunkers/utils.py +0 -0
  276. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/__init__.py +0 -0
  277. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
  278. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
  279. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
  280. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
  281. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
  282. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
  283. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
  284. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
  285. {alita_sdk-0.3.405/alita_sdk/tools/chunkers/sematic → alita_sdk-0.3.458/alita_sdk/tools/code}/__init__.py +0 -0
  286. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/code/linter/__init__.py +0 -0
  287. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
  288. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
  289. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
  290. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/code_indexer_toolkit.py +0 -0
  291. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/confluence/api_wrapper.py +0 -0
  292. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/confluence/loader.py +0 -0
  293. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/confluence/utils.py +0 -0
  294. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
  295. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
  296. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/elastic/__init__.py +0 -0
  297. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
  298. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/elitea_base.py +0 -0
  299. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/figma/__init__.py +0 -0
  300. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/figma/api_wrapper.py +0 -0
  301. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/github/api_wrapper.py +0 -0
  302. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/github/github_client.py +0 -0
  303. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
  304. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/github/schemas.py +0 -0
  305. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/github/tool.py +0 -0
  306. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/github/tool_prompts.py +0 -0
  307. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/gitlab/tools.py +0 -0
  308. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/gitlab/utils.py +0 -0
  309. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
  310. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/gmail/__init__.py +0 -0
  311. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
  312. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/gmail/utils.py +0 -0
  313. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/google/__init__.py +0 -0
  314. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/google/bigquery/__init__.py +0 -0
  315. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/google/bigquery/api_wrapper.py +0 -0
  316. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/google/bigquery/schemas.py +0 -0
  317. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/google/bigquery/tool.py +0 -0
  318. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
  319. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/keycloak/__init__.py +0 -0
  320. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
  321. {alita_sdk-0.3.405/alita_sdk/tools/code → alita_sdk-0.3.458/alita_sdk/tools/llm}/__init__.py +0 -0
  322. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/llm/img_utils.py +0 -0
  323. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/llm/llm_utils.py +0 -0
  324. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/localgit/__init__.py +0 -0
  325. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/localgit/local_git.py +0 -0
  326. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/localgit/tool.py +0 -0
  327. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/non_code_indexer_toolkit.py +0 -0
  328. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/ocr/__init__.py +0 -0
  329. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
  330. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/ocr/text_detection.py +0 -0
  331. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
  332. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
  333. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
  334. {alita_sdk-0.3.405/alita_sdk/tools/llm → alita_sdk-0.3.458/alita_sdk/tools/pandas/dataframe/executor}/__init__.py +0 -0
  335. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
  336. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
  337. {alita_sdk-0.3.405/alita_sdk/tools/pandas/dataframe/executor → alita_sdk-0.3.458/alita_sdk/tools/pandas/dataframe/generator}/__init__.py +0 -0
  338. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
  339. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
  340. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
  341. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
  342. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
  343. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
  344. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
  345. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
  346. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
  347. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
  348. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
  349. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/postman/api_wrapper.py +0 -0
  350. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/postman/postman_analysis.py +0 -0
  351. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
  352. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/qtest/tool.py +0 -0
  353. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/rally/api_wrapper.py +0 -0
  354. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
  355. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
  356. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
  357. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/salesforce/model.py +0 -0
  358. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
  359. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
  360. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/slack/api_wrapper.py +0 -0
  361. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/sql/api_wrapper.py +0 -0
  362. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/sql/models.py +0 -0
  363. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/testio/api_wrapper.py +0 -0
  364. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
  365. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/utils/__init__.py +0 -0
  366. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/utils/available_tools_decorator.py +0 -0
  367. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/vector_adapters/VectorStoreAdapter.py +0 -0
  368. {alita_sdk-0.3.405/alita_sdk/tools/pandas/dataframe/generator → alita_sdk-0.3.458/alita_sdk/tools/vector_adapters}/__init__.py +0 -0
  369. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/xray/api_wrapper.py +0 -0
  370. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/yagmail/__init__.py +0 -0
  371. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
  372. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
  373. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
  374. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr/rest_client.py +0 -0
  375. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
  376. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
  377. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_essential/api_wrapper.py +0 -0
  378. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_essential/client.py +0 -0
  379. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
  380. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_squad/api_wrapper.py +0 -0
  381. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +0 -0
  382. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk.egg-info/dependency_links.txt +0 -0
  383. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/alita_sdk.egg-info/top_level.txt +0 -0
  384. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/setup.cfg +0 -0
  385. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/tests/test_ado_analysis.py +0 -0
  386. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/tests/test_github_analysis.py +0 -0
  387. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/tests/test_gitlab_analysis.py +0 -0
  388. {alita_sdk-0.3.405 → alita_sdk-0.3.458}/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.405
3
+ Version: 0.3.458
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"
@@ -0,0 +1,127 @@
1
+ from typing import Optional
2
+
3
+ from atlassian import Bitbucket
4
+ from pydantic import BaseModel, ConfigDict, Field, SecretStr
5
+
6
+
7
+ class BitbucketConfiguration(BaseModel):
8
+ model_config = ConfigDict(
9
+ json_schema_extra={
10
+ "metadata": {
11
+ "label": "Bitbucket",
12
+ "icon_url": "bitbucket-icon.svg",
13
+ "sections": {
14
+ "auth": {
15
+ "required": True,
16
+ "subsections": [
17
+ {
18
+ "name": "Username & Password",
19
+ "fields": ["username", "password"]
20
+ }
21
+ ]
22
+ },
23
+ },
24
+ "section": "credentials",
25
+ "type": "bitbucket",
26
+ "categories": ["code repositories"],
27
+ "extra_categories": ["bitbucket", "git", "repository", "code", "version control"],
28
+ }
29
+ }
30
+ )
31
+ url: str = Field(description="Bitbucket URL")
32
+ username: str = Field(description="Bitbucket Username")
33
+ password: SecretStr = Field(description="Bitbucket Password/App Password")
34
+
35
+ @staticmethod
36
+ def check_connection(settings: dict) -> str | None:
37
+ """
38
+ Check the connection to Bitbucket.
39
+
40
+ Args:
41
+ settings: Dictionary containing Bitbucket configuration
42
+ - url: Bitbucket instance URL (required)
43
+ - username: Bitbucket username (required)
44
+ - password: Password or App Password (required)
45
+
46
+ Returns:
47
+ None if connection successful, error message string if failed
48
+ """
49
+ import requests
50
+ from requests.auth import HTTPBasicAuth
51
+
52
+ # Validate url
53
+ url = settings.get("url", "").strip()
54
+ if not url:
55
+ return "Bitbucket URL is required"
56
+
57
+ # Normalize URL - remove trailing slashes
58
+ url = url.rstrip("/")
59
+
60
+ # Basic URL validation
61
+ if not url.startswith(("http://", "https://")):
62
+ return "Bitbucket URL must start with http:// or https://"
63
+
64
+ # Validate username
65
+ username = settings.get("username", "").strip()
66
+ if not username:
67
+ return "Bitbucket username is required"
68
+
69
+ # Validate password
70
+ password = settings.get("password")
71
+ if not password:
72
+ return "Bitbucket password is required"
73
+
74
+ # Extract password value if it's a SecretStr
75
+ password_value = password.get_secret_value() if hasattr(password, 'get_secret_value') else password
76
+
77
+ if not password_value or not str(password_value).strip():
78
+ return "Bitbucket password cannot be empty"
79
+
80
+ # Detect if this is Bitbucket Cloud or Server/Data Center
81
+ is_cloud = "bitbucket.org" in url.lower() or "api.bitbucket.org" in url.lower()
82
+ is_correct_bitbucket_domain = "bitbucket" in url.lower()
83
+
84
+ if is_cloud:
85
+ # Bitbucket Cloud: Use API v2.0
86
+ # Endpoint: /2.0/user - returns current authenticated user
87
+ test_url = f"{url}/2.0/user"
88
+ else:
89
+ # Bitbucket Server/Data Center: Use API v1.0
90
+ # Endpoint: /rest/api/1.0/users/{username}
91
+ test_url = f"{url}/rest/api/1.0/users/{username}"
92
+
93
+ try:
94
+ response = requests.get(
95
+ test_url,
96
+ auth=HTTPBasicAuth(username, str(password_value).strip()),
97
+ timeout=10
98
+ )
99
+
100
+ # Check response status
101
+ if response.status_code == 200:
102
+ # Successfully connected and authenticated
103
+ return None
104
+ elif response.status_code == 401:
105
+ return "Authentication failed: invalid username or password"
106
+ elif response.status_code == 403:
107
+ return "Access forbidden: check user permissions"
108
+ elif response.status_code == 404:
109
+ if not is_correct_bitbucket_domain:
110
+ return f"Url you provided is incorrect. Please provide correct server or cloud bitbucket url."
111
+ if is_cloud:
112
+ return "Bitbucket API endpoint not found: please provide the correct bitbucket cloud URL"
113
+ else:
114
+ return "Bitbucket API endpoint not found: please provide the correct bitbucket server URL"
115
+ else:
116
+ return f"Bitbucket API returned status code {response.status_code}"
117
+
118
+ except requests.exceptions.SSLError as e:
119
+ return f"SSL certificate verification failed: {str(e)}"
120
+ except requests.exceptions.ConnectionError:
121
+ return f"Cannot connect to Bitbucket at {url if not is_cloud else 'api.bitbucket.org'}: connection refused"
122
+ except requests.exceptions.Timeout:
123
+ return f"Connection to Bitbucket at {url if not is_cloud else 'api.bitbucket.org'} timed out"
124
+ except requests.exceptions.RequestException as e:
125
+ return f"Error connecting to Bitbucket: {str(e)}"
126
+ except Exception as e:
127
+ return f"Unexpected error: {str(e)}"
@@ -0,0 +1,132 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import BaseModel, ConfigDict, Field, SecretStr
4
+
5
+
6
+ class ConfluenceConfiguration(BaseModel):
7
+ model_config = ConfigDict(
8
+ json_schema_extra={
9
+ "metadata": {
10
+ "label": "Confluence",
11
+ "icon_url": "confluence.svg",
12
+ "sections": {
13
+ "auth": {
14
+ "required": True,
15
+ "subsections": [
16
+ {
17
+ "name": "Basic",
18
+ "fields": ["username", "api_key"]
19
+ },
20
+ {
21
+ "name": "Bearer",
22
+ "fields": ["token"]
23
+ }
24
+ ]
25
+ },
26
+ },
27
+ "section": "credentials",
28
+ "type": "confluence",
29
+ "categories": ["documentation"],
30
+ "extra_categories": ["confluence", "wiki", "documentation", "knowledge base"],
31
+ }
32
+ }
33
+ )
34
+ base_url: str = Field(description="Confluence URL")
35
+ username: Optional[str] = Field(description="Confluence Username", default=None)
36
+ api_key: Optional[SecretStr] = Field(description="Confluence API Key", default=None)
37
+ token: Optional[SecretStr] = Field(description="Confluence Token", default=None)
38
+
39
+ @staticmethod
40
+ def check_connection(settings: dict) -> str | None:
41
+ """
42
+ Check the connection to Confluence.
43
+
44
+ Args:
45
+ settings: Dictionary containing Confluence configuration
46
+ - base_url: Confluence instance URL (required)
47
+ - username: Username for Basic Auth (optional)
48
+ - api_key: API key/password for Basic Auth (optional)
49
+ - token: Bearer token for authentication (optional)
50
+
51
+ Returns:
52
+ None if connection successful, error message string if failed
53
+ """
54
+ import requests
55
+ from requests.auth import HTTPBasicAuth
56
+
57
+ # Validate base_url
58
+ base_url = settings.get("base_url", "").strip()
59
+ if not base_url:
60
+ return "Confluence URL is required"
61
+
62
+ # Normalize URL - remove trailing slashes
63
+ base_url = base_url.rstrip("/")
64
+
65
+ # Basic URL validation
66
+ if not base_url.startswith(("http://", "https://")):
67
+ return "Confluence URL must start with http:// or https://"
68
+
69
+ # Check authentication credentials
70
+ username = settings.get("username")
71
+ api_key = settings.get("api_key")
72
+ token = settings.get("token")
73
+
74
+ # Validate authentication - at least one method must be provided
75
+ has_basic_auth = bool(username and api_key)
76
+ has_token = bool(token and str(token).strip())
77
+
78
+ # Determine authentication method
79
+ auth_headers = {}
80
+ auth = None
81
+
82
+ if has_token:
83
+ # Bearer token authentication
84
+ token_value = token.get_secret_value() if hasattr(token, 'get_secret_value') else token
85
+ auth_headers["Authorization"] = f"Bearer {token_value}"
86
+ elif has_basic_auth:
87
+ # Basic authentication
88
+ api_key_value = api_key.get_secret_value() if hasattr(api_key, 'get_secret_value') else api_key
89
+ auth = HTTPBasicAuth(username, api_key_value)
90
+ else:
91
+ return "Authentication required: provide either token or both username and api_key"
92
+
93
+ # Test connection using /rest/api/user/current endpoint
94
+ # This endpoint returns current user info and validates authentication
95
+ test_url = f"{base_url}/rest/api/user/current"
96
+
97
+ try:
98
+ response = requests.get(
99
+ test_url,
100
+ auth=auth,
101
+ headers=auth_headers,
102
+ timeout=10
103
+ )
104
+
105
+ # Check response status
106
+ if response.status_code == 200:
107
+ # Successfully connected and authenticated
108
+ return None
109
+ elif response.status_code == 401:
110
+ # Authentication failed
111
+ if has_token:
112
+ return "Authentication failed: Invalid token"
113
+ else:
114
+ return "Authentication failed: Invalid username or API key"
115
+ elif response.status_code == 403:
116
+ return """Access forbidden: check permissions and verify the credentials you provided.
117
+ Most probably you provided incorrect credentials (user name and api key or token)"""
118
+ elif response.status_code == 404:
119
+ return "Confluence API endpoint not found: verify the Confluence URL"
120
+ else:
121
+ return f"Confluence API returned status code {response.status_code}"
122
+
123
+ except requests.exceptions.SSLError as e:
124
+ return f"SSL certificate verification failed: {str(e)}"
125
+ except requests.exceptions.ConnectionError:
126
+ return f"Cannot connect to Confluence at {base_url}: connection refused"
127
+ except requests.exceptions.Timeout:
128
+ return f"Connection to Confluence at {base_url} timed out"
129
+ except requests.exceptions.RequestException as e:
130
+ return f"Error connecting to Confluence: {str(e)}"
131
+ except Exception as e:
132
+ return f"Unexpected error: {str(e)}"
@@ -0,0 +1,110 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import BaseModel, ConfigDict, Field, SecretStr
4
+
5
+
6
+ class GitlabConfiguration(BaseModel):
7
+ model_config = ConfigDict(
8
+ json_schema_extra={
9
+ "metadata": {
10
+ "label": "GitLab",
11
+ "icon_url": None,
12
+ "sections": {
13
+ "auth": {
14
+ "required": True,
15
+ "subsections": [
16
+ {
17
+ "name": "GitLab private token",
18
+ "fields": ["private_token"]
19
+ }
20
+ ]
21
+ }
22
+ },
23
+ "section": "credentials",
24
+ "type": "gitlab",
25
+ "categories": ["code repositories"],
26
+ "extra_categories": ["gitlab", "git", "repository", "code", "version control"],
27
+ }
28
+ }
29
+ )
30
+ url: str = Field(description="GitLab URL")
31
+ private_token: SecretStr = Field(description="GitLab private token")
32
+
33
+ @staticmethod
34
+ def check_connection(settings: dict) -> str | None:
35
+ """
36
+ Check the connection to GitLab.
37
+
38
+ Args:
39
+ settings: Dictionary containing GitLab configuration
40
+ - url: GitLab instance URL (required)
41
+ - private_token: GitLab private token for authentication (required)
42
+
43
+ Returns:
44
+ None if connection successful, error message string if failed
45
+ """
46
+ import requests
47
+
48
+ # Validate url
49
+ url = settings.get("url", "").strip()
50
+ if not url:
51
+ return "GitLab URL is required"
52
+
53
+ # Normalize URL - remove trailing slashes
54
+ url = url.rstrip("/")
55
+
56
+ # Basic URL validation
57
+ if not url.startswith(("http://", "https://")):
58
+ return "GitLab URL must start with http:// or https://"
59
+
60
+ # Validate private_token
61
+ private_token = settings.get("private_token")
62
+ if not private_token:
63
+ return "GitLab private token is required"
64
+
65
+ # Extract token value if it's a SecretStr
66
+ token_value = private_token.get_secret_value() if hasattr(private_token, 'get_secret_value') else private_token
67
+
68
+ if not token_value or not str(token_value).strip():
69
+ return "GitLab private token cannot be empty"
70
+
71
+ # Test connection using /api/v4/user endpoint
72
+ # This endpoint returns current authenticated user info
73
+ test_url = f"{url}/api/v4/user"
74
+
75
+ # GitLab supports both PRIVATE-TOKEN header and Authorization Bearer
76
+ # Using PRIVATE-TOKEN is GitLab-specific and more explicit
77
+ headers = {
78
+ "PRIVATE-TOKEN": str(token_value).strip()
79
+ }
80
+
81
+ try:
82
+ response = requests.get(
83
+ test_url,
84
+ headers=headers,
85
+ timeout=10
86
+ )
87
+
88
+ # Check response status
89
+ if response.status_code == 200:
90
+ # Successfully connected and authenticated
91
+ return None
92
+ elif response.status_code == 401:
93
+ return "Authentication failed: invalid private token"
94
+ elif response.status_code == 403:
95
+ return "Access forbidden: token lacks required permissions"
96
+ elif response.status_code == 404:
97
+ return "GitLab API endpoint not found: verify the GitLab URL"
98
+ else:
99
+ return f"GitLab API returned status code {response.status_code}"
100
+
101
+ except requests.exceptions.SSLError as e:
102
+ return f"SSL certificate verification failed: {str(e)}"
103
+ except requests.exceptions.ConnectionError:
104
+ return f"Cannot connect to GitLab at {url}: connection refused"
105
+ except requests.exceptions.Timeout:
106
+ return f"Connection to GitLab at {url} timed out"
107
+ except requests.exceptions.RequestException as e:
108
+ return f"Error connecting to GitLab: {str(e)}"
109
+ except Exception as e:
110
+ return f"Unexpected error: {str(e)}"
@@ -0,0 +1,140 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import BaseModel, ConfigDict, Field, SecretStr
4
+
5
+
6
+ class JiraConfiguration(BaseModel):
7
+ model_config = ConfigDict(
8
+ json_schema_extra={
9
+ "metadata": {
10
+ "label": "Jira",
11
+ "icon_url": "jira.svg",
12
+ "sections": {
13
+ "auth": {
14
+ "required": True,
15
+ "subsections": [
16
+ {
17
+ "name": "Basic",
18
+ "fields": ["username", "api_key"]
19
+ },
20
+ {
21
+ "name": "Bearer",
22
+ "fields": ["token"]
23
+ }
24
+ ]
25
+ },
26
+ },
27
+ "section": "credentials",
28
+ "type": "jira",
29
+ "categories": ["project management"],
30
+ "extra_categories": ["jira", "issue tracking", "project management", "agile"],
31
+ }
32
+ }
33
+ )
34
+ base_url: str = Field(description="Jira URL")
35
+ username: Optional[str] = Field(description="Jira Username", default=None)
36
+ api_key: Optional[SecretStr] = Field(description="Jira API Key", default=None)
37
+ token: Optional[SecretStr] = Field(description="Jira Token", default=None)
38
+
39
+ @staticmethod
40
+ def check_connection(settings: dict) -> str | None:
41
+ """
42
+ Check Jira connection using provided settings.
43
+ Returns None if connection is successful, error message otherwise.
44
+
45
+ Tests authentication by calling the /rest/api/latest/myself endpoint,
46
+ which returns information about the currently authenticated user.
47
+ """
48
+ import requests
49
+ from requests.auth import HTTPBasicAuth
50
+
51
+ # Extract and validate settings
52
+ base_url = settings.get('base_url', '').rstrip('/')
53
+ username = settings.get('username')
54
+ api_key = settings.get('api_key')
55
+ token = settings.get('token')
56
+
57
+ # Validate base URL
58
+ if not base_url:
59
+ return "Base URL is required"
60
+
61
+ if not base_url.startswith(('http://', 'https://')):
62
+ return "Base URL must start with http:// or https://"
63
+
64
+ # Validate authentication - at least one method must be provided
65
+ has_basic_auth = bool(username and api_key)
66
+ has_token = bool(token and str(token).strip())
67
+
68
+ if not (has_basic_auth or has_token):
69
+ return "Authentication required: Provide either username + API key, or bearer token"
70
+
71
+ # Setup authentication headers
72
+ headers = {'Accept': 'application/json'}
73
+ auth = None
74
+
75
+ if has_token:
76
+ # Bearer token authentication
77
+ token_value = token.get_secret_value() if hasattr(token, 'get_secret_value') else token
78
+ headers['Authorization'] = f'Bearer {token_value}'
79
+ elif has_basic_auth:
80
+ # Basic authentication
81
+ api_key_value = api_key.get_secret_value() if hasattr(api_key, 'get_secret_value') else api_key
82
+ auth = HTTPBasicAuth(username, api_key_value)
83
+
84
+ # Build API endpoint - using 'latest' for version independence
85
+ api_endpoint = f"{base_url}/rest/api/latest/myself"
86
+
87
+ try:
88
+ # Make authenticated request to verify credentials
89
+ response = requests.get(
90
+ api_endpoint,
91
+ headers=headers,
92
+ auth=auth,
93
+ timeout=10
94
+ )
95
+
96
+ # Handle different response codes
97
+ if response.status_code == 200:
98
+ return None # Success - credentials are valid
99
+
100
+ elif response.status_code == 401:
101
+ # Authentication failed
102
+ if has_token:
103
+ return "Authentication failed: Invalid bearer token"
104
+ else:
105
+ return "Authentication failed: Invalid username or API key"
106
+
107
+ elif response.status_code == 403:
108
+ # Authenticated but insufficient permissions
109
+ return "Access forbidden: Your account has insufficient permissions to access Jira API"
110
+
111
+ elif response.status_code == 404:
112
+ # API endpoint not found - likely wrong URL
113
+ return "Jira API endpoint not found: Verify your base URL (e.g., 'https://yourinstance.atlassian.net')"
114
+
115
+ else:
116
+ # Other HTTP errors - try to extract Jira error messages
117
+ error_detail = ""
118
+ try:
119
+ error_json = response.json()
120
+ if 'errorMessages' in error_json and error_json['errorMessages']:
121
+ error_detail = ": " + ", ".join(error_json['errorMessages'])
122
+ elif 'message' in error_json:
123
+ error_detail = f": {error_json['message']}"
124
+ except:
125
+ pass
126
+
127
+ return f"Connection failed with status {response.status_code}{error_detail}"
128
+
129
+ except requests.exceptions.SSLError:
130
+ return "SSL certificate verification failed: Check your Jira URL or network settings"
131
+ except requests.exceptions.ConnectionError:
132
+ return "Connection error: Unable to reach Jira server - check URL and network connectivity"
133
+ except requests.exceptions.Timeout:
134
+ return "Connection timeout: Jira server did not respond within 10 seconds"
135
+ except requests.exceptions.MissingSchema:
136
+ return "Invalid URL format: URL must include protocol (http:// or https://)"
137
+ except requests.exceptions.InvalidURL:
138
+ return "Invalid URL format: Please check your Jira base URL"
139
+ except Exception as e:
140
+ return f"Unexpected error: {str(e)}"
@@ -0,0 +1,109 @@
1
+ from typing import Optional
2
+
3
+ from pydantic import BaseModel, ConfigDict, Field, SecretStr
4
+
5
+
6
+ class TestRailConfiguration(BaseModel):
7
+ model_config = ConfigDict(
8
+ json_schema_extra={
9
+ "metadata": {
10
+ "label": "TestRail",
11
+ "icon_url": "testrail.svg",
12
+ "section": "credentials",
13
+ "type": "testrail",
14
+ "categories": ["test management"],
15
+ "extra_categories": ["testrail", "test management", "quality assurance", "testing"],
16
+ }
17
+ }
18
+ )
19
+ url: str = Field(description="Testrail URL")
20
+ email: str = Field(description="TestRail Email")
21
+ password: SecretStr = Field(description="TestRail Password")
22
+
23
+ @staticmethod
24
+ def check_connection(settings: dict) -> str | None:
25
+ """
26
+ Check the connection to TestRail.
27
+
28
+ Args:
29
+ settings: Dictionary containing TestRail configuration
30
+ - url: TestRail instance URL (required)
31
+ - email: User email for authentication (required)
32
+ - password: Password or API key for authentication (required)
33
+
34
+ Returns:
35
+ None if connection successful, error message string if failed
36
+ """
37
+ import requests
38
+ from requests.auth import HTTPBasicAuth
39
+
40
+ # Validate url
41
+ url = settings.get("url", "").strip()
42
+ if not url:
43
+ return "TestRail URL is required"
44
+
45
+ # Normalize URL - remove trailing slashes
46
+ url = url.rstrip("/")
47
+
48
+ # Basic URL validation
49
+ if not url.startswith(("http://", "https://")):
50
+ return "TestRail URL must start with http:// or https://"
51
+
52
+ # Validate email
53
+ email = settings.get("email", "").strip()
54
+ if not email:
55
+ return "TestRail email is required"
56
+
57
+ # Validate password
58
+ password = settings.get("password")
59
+ if not password:
60
+ return "TestRail password is required"
61
+
62
+ # Extract password value if it's a SecretStr
63
+ password_value = password.get_secret_value() if hasattr(password, 'get_secret_value') else password
64
+
65
+ if not password_value or not password_value.strip():
66
+ return "TestRail password cannot be empty"
67
+
68
+ # Test connection using /index.php?/api/v2/get_user_by_email endpoint
69
+ # This endpoint returns user info and validates authentication
70
+ test_url = f"{url}/index.php?/api/v2/get_user_by_email&email={email}"
71
+
72
+ try:
73
+ response = requests.get(
74
+ test_url,
75
+ auth=HTTPBasicAuth(email, password_value),
76
+ timeout=10
77
+ )
78
+
79
+ # Check response status
80
+ if response.status_code == 200:
81
+ # Successfully connected and authenticated
82
+ return None
83
+ elif response.status_code == 401:
84
+ return "Authentication failed: invalid email or password"
85
+ elif response.status_code == 403:
86
+ return "Access forbidden: check user permissions"
87
+ elif response.status_code == 404:
88
+ return "TestRail API endpoint not found: verify the TestRail URL"
89
+ elif response.status_code == 400:
90
+ # Could be invalid email format or other bad request
91
+ try:
92
+ error_data = response.json()
93
+ error_msg = error_data.get("error", "Bad request")
94
+ return f"Bad request: {error_msg}"
95
+ except:
96
+ return "Bad request: check email format and URL"
97
+ else:
98
+ return f"TestRail API returned status code {response.status_code}"
99
+
100
+ except requests.exceptions.SSLError as e:
101
+ return f"SSL certificate verification failed: {str(e)}"
102
+ except requests.exceptions.ConnectionError:
103
+ return f"Cannot connect to TestRail at {url}: connection refused"
104
+ except requests.exceptions.Timeout:
105
+ return f"Connection to TestRail at {url} timed out"
106
+ except requests.exceptions.RequestException as e:
107
+ return f"Error connecting to TestRail: {str(e)}"
108
+ except Exception as e:
109
+ return f"Unexpected error: {str(e)}"