alita-sdk 0.3.161__tar.gz → 0.3.163__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.
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/PKG-INFO +1 -1
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/__init__.py +1 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/carrier/api_wrapper.py +74 -2
- alita_sdk-0.3.163/alita_sdk/tools/carrier/cancel_ui_test_tool.py +178 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/carrier/carrier_sdk.py +71 -3
- alita_sdk-0.3.163/alita_sdk/tools/carrier/create_ui_excel_report_tool.py +473 -0
- alita_sdk-0.3.163/alita_sdk/tools/carrier/create_ui_test_tool.py +199 -0
- alita_sdk-0.3.163/alita_sdk/tools/carrier/lighthouse_excel_reporter.py +155 -0
- alita_sdk-0.3.163/alita_sdk/tools/carrier/run_ui_test_tool.py +394 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/carrier/tools.py +11 -1
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/carrier/ui_reports_tool.py +6 -2
- alita_sdk-0.3.163/alita_sdk/tools/carrier/update_ui_test_schedule_tool.py +278 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/github/__init__.py +1 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/github/api_wrapper.py +4 -2
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/github/github_client.py +124 -1
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/github/schemas.py +15 -0
- alita_sdk-0.3.163/alita_sdk/tools/zephyr_squad/__init__.py +62 -0
- alita_sdk-0.3.163/alita_sdk/tools/zephyr_squad/api_wrapper.py +135 -0
- alita_sdk-0.3.163/alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py +79 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk.egg-info/PKG-INFO +1 -1
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk.egg-info/SOURCES.txt +9 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/pyproject.toml +1 -1
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/LICENSE +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/README.md +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/analysis/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/analysis/ado_analyse/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/analysis/ado_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/analysis/github_analyse/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/analysis/github_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/analysis/gitlab_analyse/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/analysis/gitlab_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/analysis/jira_analyse/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/analysis/jira_analyse/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/browseruse/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/browseruse/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/agents/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/agents/baseclass.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/agents/knowledge_gap_agent.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/agents/long_writer_agent.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/agents/planner_agent.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/agents/proofreader_agent.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/agents/thinking_agent.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/agents/tool_agents/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/agents/tool_agents/crawl_agent.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/agents/tool_agents/search_agent.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/agents/tool_selector_agent.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/agents/utils/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/agents/utils/parse_output.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/agents/writer_agent.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/deep_research.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/examples/deep_example.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/examples/iterative_example.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/examples/report_plan_example.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/iterative_research.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/llm_config.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/main.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/tools/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/tools/crawl_website.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/tools/web_search.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/utils/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/utils/md_to_pdf.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/deep_researcher/utils/os.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/community/utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/clients/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/clients/artifact.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/clients/client.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/clients/datasource.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/clients/prompt.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/agents/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/agents/xml_chat.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/assistant.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/chat_message_template.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/constants.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/document_loaders/AlitaBDDScenariosLoader.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/document_loaders/AlitaCSVLoader.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/document_loaders/AlitaConfluenceLoader.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/document_loaders/AlitaDirectoryLoader.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/document_loaders/AlitaDocxMammothLoader.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/document_loaders/AlitaExcelLoader.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/document_loaders/AlitaGitRepoLoader.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/document_loaders/AlitaImageLoader.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/document_loaders/AlitaJiraLoader.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/document_loaders/AlitaQtestLoader.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/document_loaders/AlitaTableLoader.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/document_loaders/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/document_loaders/constants.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/document_loaders/utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/indexer.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/interfaces/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/interfaces/kwextractor.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/interfaces/llm_processor.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/interfaces/loaders.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/interfaces/splitters.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/langraph_agent.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/mixedAgentParser.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/mixedAgentRenderes.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/retrievers/AlitaRetriever.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/retrievers/VectorstoreRetriever.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/retrievers/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/store_manager.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/tools/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/tools/bdd_parser/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_exceptions.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/tools/bdd_parser/bdd_parser.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/tools/bdd_parser/feature_types.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/tools/bdd_parser/parser.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/tools/git.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/tools/log.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/tools/quota.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/tools/state.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/tools/utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/tools/vector.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/langchain/utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/llms/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/llms/alita.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/llms/preloaded.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/toolkits/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/toolkits/application.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/toolkits/artifact.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/toolkits/datasource.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/toolkits/prompt.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/toolkits/subgraph.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/toolkits/tools.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/toolkits/vectorstore.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/agent.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/application.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/artifact.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/datasource.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/echo.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/function.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/indexer_tool.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/llm.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/loop.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/loop_output.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/mcp_server_tool.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/pgvector_search.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/prompt.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/router.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/tool.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/tools/vectorstore.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/utils/AlitaCallback.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/utils/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/utils/constants.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/utils/evaluate.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/utils/logging.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/utils/save_dataframe.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/utils/streamlit.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/runtime/utils/utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/ado/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/ado/repos/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/ado/repos/repos_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/ado/test_plan/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/ado/test_plan/test_plan_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/ado/utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/ado/wiki/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/ado/wiki/ado_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/ado/work_item/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/ado/work_item/ado_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/advanced_jira_mining/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/advanced_jira_mining/data_mining_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/azure_ai/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/azure_ai/search/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/azure_ai/search/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/base/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/base/tool.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/bitbucket/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/bitbucket/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/bitbucket/bitbucket_constants.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/bitbucket/cloud_api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/bitbucket/tools.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/browser/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/browser/crawler.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/browser/duck_duck_go_search.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/browser/google_search_rag.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/browser/utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/browser/wiki.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/carrier/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/carrier/backend_reports_tool.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/carrier/backend_tests_tool.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/carrier/excel_reporter.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/carrier/tickets_tool.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/carrier/utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/codeparser.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/constants.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/treesitter/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/treesitter/treesitter.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/treesitter/treesitter_c.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cpp.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/treesitter/treesitter_cs.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/treesitter/treesitter_go.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/treesitter/treesitter_hs.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/treesitter/treesitter_java.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/treesitter/treesitter_js.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/treesitter/treesitter_kt.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/treesitter/treesitter_py.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rb.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/treesitter/treesitter_registry.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/treesitter/treesitter_rs.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/code/treesitter/treesitter_ts.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/models.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/sematic/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/sematic/base.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/sematic/markdown_chunker.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/sematic/proposal_chunker.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/sematic/statistical_chunker.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/chunkers/utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/cloud/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/cloud/aws/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/cloud/aws/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/cloud/azure/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/cloud/azure/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/cloud/gcp/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/cloud/gcp/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/cloud/k8s/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/cloud/k8s/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/code/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/code/linter/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/code/linter/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/code/loaders/codesearcher.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/code/sonar/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/code/sonar/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/confluence/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/confluence/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/confluence/loader.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/confluence/utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/custom_open_api/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/custom_open_api/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/elastic/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/elastic/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/elitea_base.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/figma/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/figma/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/github/graphql_client_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/github/tool.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/github/tool_prompts.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/gitlab/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/gitlab/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/gitlab/tools.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/gitlab/utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/gitlab_org/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/gitlab_org/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/gmail/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/gmail/gmail_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/gmail/utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/google_places/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/google_places/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/jira/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/jira/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/keycloak/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/keycloak/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/llm/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/llm/img_utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/llm/llm_utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/localgit/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/localgit/local_git.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/localgit/tool.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/memory/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/ocr/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/ocr/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/ocr/text_detection.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/openapi/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/dataframe/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/dataframe/errors.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/dataframe/executor/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/dataframe/executor/code_environment.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/dataframe/executor/code_executor.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/dataframe/generator/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/dataframe/generator/base.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/dataframe/generator/code_cleaning.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/dataframe/generator/code_validator.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/dataframe/prompts.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/dataframe/serializer.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/dataframe/utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/statsmodels/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/statsmodels/base_stats.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/statsmodels/descriptive.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/statsmodels/hypothesis_testing.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pandas/statsmodels/regression.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/postman/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/postman/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/postman/postman_analysis.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pptx/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/pptx/pptx_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/qtest/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/qtest/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/qtest/tool.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/rally/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/rally/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/report_portal/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/report_portal/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/report_portal/report_portal_client.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/salesforce/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/salesforce/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/salesforce/model.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/servicenow/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/servicenow/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/servicenow/servicenow_client.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/sharepoint/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/sharepoint/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/sharepoint/authorization_helper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/sharepoint/utils.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/sql/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/sql/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/sql/models.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/testio/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/testio/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/testrail/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/testrail/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/utils/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/utils/content_parser.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/xray/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/xray/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/yagmail/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/yagmail/yagmail_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/zephyr/Zephyr.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/zephyr/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/zephyr/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/zephyr/rest_client.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/zephyr_enterprise/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/zephyr_enterprise/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/zephyr_enterprise/zephyr_enterprise.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/zephyr_scale/__init__.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk/tools/zephyr_scale/api_wrapper.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk.egg-info/dependency_links.txt +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk.egg-info/requires.txt +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/alita_sdk.egg-info/top_level.txt +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/setup.cfg +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/tests/test_ado_analysis.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/tests/test_github_analysis.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/tests/test_gitlab_analysis.py +0 -0
- {alita_sdk-0.3.161 → alita_sdk-0.3.163}/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.
|
3
|
+
Version: 0.3.163
|
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 <lifedjik@gmail.com>
|
6
6
|
License-Expression: Apache-2.0
|
@@ -74,6 +74,7 @@ _safe_import_tool('carrier', 'carrier', 'get_tools', 'AlitaCarrierToolkit')
|
|
74
74
|
_safe_import_tool('ocr', 'ocr', 'get_tools', 'OCRToolkit')
|
75
75
|
_safe_import_tool('pptx', 'pptx', 'get_tools', 'PPTXToolkit')
|
76
76
|
_safe_import_tool('postman', 'postman', 'get_tools', 'PostmanToolkit')
|
77
|
+
_safe_import_tool('zephyr_squad', 'zephyr_squad', 'get_tools', 'ZephyrSquadToolkit')
|
77
78
|
|
78
79
|
# Log import summary
|
79
80
|
available_count = len(AVAILABLE_TOOLS)
|
@@ -67,6 +67,10 @@ class CarrierAPIWrapper(BaseModel):
|
|
67
67
|
def run_test(self, test_id: str, json_body):
|
68
68
|
return self._client.run_test(test_id, json_body)
|
69
69
|
|
70
|
+
def run_ui_test(self, test_id: str, json_body):
|
71
|
+
"""Run a UI test with the given test ID and JSON body."""
|
72
|
+
return self._client.run_ui_test(test_id, json_body)
|
73
|
+
|
70
74
|
def get_engagements_list(self) -> List[Dict[str, Any]]:
|
71
75
|
return self._client.get_engagements_list()
|
72
76
|
|
@@ -81,12 +85,16 @@ class CarrierAPIWrapper(BaseModel):
|
|
81
85
|
|
82
86
|
def get_ui_reports_list(self) -> List[Dict[str, Any]]:
|
83
87
|
"""Get list of UI test reports from the Carrier platform."""
|
84
|
-
return self._client.
|
88
|
+
return self._client.get_ui_reports_list()
|
85
89
|
|
86
90
|
def get_ui_tests_list(self) -> List[Dict[str, Any]]:
|
87
91
|
"""Get list of UI tests from the Carrier platform."""
|
88
92
|
return self._client.get_ui_tests_list()
|
89
93
|
|
94
|
+
def get_locations(self) -> Dict[str, Any]:
|
95
|
+
"""Get list of available locations/cloud settings from the Carrier platform."""
|
96
|
+
return self._client.get_locations()
|
97
|
+
|
90
98
|
def get_ui_report_links(self, uid: str) -> list:
|
91
99
|
"""Get all unique file_names for a given UI report UID, ending with .html, without #index=*, and only unique values."""
|
92
100
|
endpoint = f"api/v1/ui_performance/results/{self.project_id}/{uid}?sort=loop&order=asc"
|
@@ -120,4 +128,68 @@ class CarrierAPIWrapper(BaseModel):
|
|
120
128
|
return [prefix + name for name in sorted_names]
|
121
129
|
except Exception as e:
|
122
130
|
logger.error(f"Failed to fetch UI report links: {e}")
|
123
|
-
return []
|
131
|
+
return []
|
132
|
+
|
133
|
+
def update_ui_test(self, test_id: str, json_body) -> Dict[str, Any]:
|
134
|
+
"""Update UI test configuration and schedule."""
|
135
|
+
return self._client.update_ui_test(test_id, json_body)
|
136
|
+
|
137
|
+
def get_ui_test_details(self, test_id: str) -> Dict[str, Any]:
|
138
|
+
"""Get detailed UI test configuration by test ID."""
|
139
|
+
return self._client.get_ui_test_details(test_id)
|
140
|
+
|
141
|
+
def create_ui_test(self, json_body: Dict[str, Any]) -> Dict[str, Any]:
|
142
|
+
"""Create a new UI test."""
|
143
|
+
return self._client.create_ui_test(json_body)
|
144
|
+
|
145
|
+
def cancel_ui_test(self, test_id: str) -> Dict[str, Any]:
|
146
|
+
"""Cancel a UI test by setting its status to Canceled."""
|
147
|
+
return self._client.cancel_ui_test(test_id)
|
148
|
+
|
149
|
+
def get_ui_report_json_files(self, uid: str) -> list:
|
150
|
+
"""Get all JSON file names for a given UI report UID for Excel processing."""
|
151
|
+
endpoint = f"api/v1/ui_performance/results/{self.project_id}/{uid}?sort=loop&order=asc"
|
152
|
+
try:
|
153
|
+
response = self._client.request('get', endpoint)
|
154
|
+
file_names = set()
|
155
|
+
|
156
|
+
def clean_file_name(file_name):
|
157
|
+
# Extract JSON files only and clean the names
|
158
|
+
if file_name.endswith('.json'):
|
159
|
+
return file_name
|
160
|
+
return None
|
161
|
+
|
162
|
+
# If the response is a dict with lists as values, flatten all file_names from all values
|
163
|
+
if isinstance(response, dict):
|
164
|
+
for value in response.values():
|
165
|
+
if isinstance(value, list):
|
166
|
+
for item in value:
|
167
|
+
file_name = item.get("file_name")
|
168
|
+
if file_name:
|
169
|
+
clean_name = clean_file_name(file_name)
|
170
|
+
if clean_name:
|
171
|
+
file_names.add(clean_name)
|
172
|
+
elif isinstance(response, list):
|
173
|
+
for item in response:
|
174
|
+
file_name = item.get("file_name")
|
175
|
+
if file_name:
|
176
|
+
clean_name = clean_file_name(file_name)
|
177
|
+
if clean_name:
|
178
|
+
file_names.add(clean_name)
|
179
|
+
|
180
|
+
sorted_names = sorted(file_names)
|
181
|
+
prefix = f"https://platform.getcarrier.io/api/v1/artifacts/artifact/default/{self.project_id}/reports/"
|
182
|
+
return [prefix + name for name in sorted_names]
|
183
|
+
except Exception as e:
|
184
|
+
logger.error(f"Failed to fetch UI report JSON files: {e}")
|
185
|
+
return []
|
186
|
+
|
187
|
+
def download_ui_report_json(self, bucket: str, file_name: str) -> str:
|
188
|
+
"""Download UI report JSON file content."""
|
189
|
+
endpoint = f"api/v1/artifacts/artifact/default/{self.project_id}/{bucket}/{file_name}"
|
190
|
+
try:
|
191
|
+
response = self._client.request('get', endpoint)
|
192
|
+
return response
|
193
|
+
except Exception as e:
|
194
|
+
logger.error(f"Failed to download UI report JSON: {e}")
|
195
|
+
return None
|
@@ -0,0 +1,178 @@
|
|
1
|
+
import logging
|
2
|
+
import re
|
3
|
+
import traceback
|
4
|
+
from typing import Type
|
5
|
+
from langchain_core.tools import BaseTool, ToolException
|
6
|
+
from pydantic.fields import Field
|
7
|
+
from pydantic import create_model, BaseModel
|
8
|
+
from .api_wrapper import CarrierAPIWrapper
|
9
|
+
|
10
|
+
logger = logging.getLogger(__name__)
|
11
|
+
|
12
|
+
|
13
|
+
class CancelUITestTool(BaseTool):
|
14
|
+
api_wrapper: CarrierAPIWrapper = Field(..., description="Carrier API Wrapper instance")
|
15
|
+
name: str = "cancel_ui_test"
|
16
|
+
description: str = "Cancel a UI test or show available tests to cancel in the Carrier platform."
|
17
|
+
args_schema: Type[BaseModel] = create_model(
|
18
|
+
"CancelUITestInput",
|
19
|
+
**{
|
20
|
+
"message": (str, Field(description="User input message (e.g., 'Cancel UI test' or 'Cancel UI test 12345')")),
|
21
|
+
}
|
22
|
+
)
|
23
|
+
|
24
|
+
def _run(self, message: str):
|
25
|
+
try:
|
26
|
+
# Parse the message to extract test ID if provided
|
27
|
+
test_id = self._extract_test_id(message)
|
28
|
+
|
29
|
+
if test_id:
|
30
|
+
# User provided a specific test ID to cancel
|
31
|
+
return self._cancel_specific_test(test_id)
|
32
|
+
else:
|
33
|
+
# User didn't provide ID, show available tests to cancel
|
34
|
+
return self._show_cancelable_tests()
|
35
|
+
|
36
|
+
except Exception as e:
|
37
|
+
logger.error(f"Error in cancel UI test: {e}")
|
38
|
+
raise ToolException(f"Failed to process cancel UI test request: {str(e)}")
|
39
|
+
|
40
|
+
def _extract_test_id(self, message: str) -> str:
|
41
|
+
"""Extract test ID from user message if present."""
|
42
|
+
# Look for patterns like "Cancel UI test 12345" or "cancel ui test 12345"
|
43
|
+
match = re.search(r'cancel\s+ui\s+test\s+(\d+)', message.lower())
|
44
|
+
if match:
|
45
|
+
return match.group(1)
|
46
|
+
return ""
|
47
|
+
|
48
|
+
def _show_cancelable_tests(self) -> str:
|
49
|
+
"""Show list of tests that can be canceled."""
|
50
|
+
try:
|
51
|
+
# Get all UI reports/tests
|
52
|
+
reports = self.api_wrapper.get_ui_reports_list()
|
53
|
+
|
54
|
+
if not reports:
|
55
|
+
return "❌ **No UI tests found.**"
|
56
|
+
|
57
|
+
# Filter tests that can be canceled (not in final states)
|
58
|
+
final_states = {"Canceled", "Finished", "Failed"}
|
59
|
+
cancelable_tests = []
|
60
|
+
|
61
|
+
for report in reports:
|
62
|
+
test_status = report.get("test_status", {})
|
63
|
+
status = test_status.get("status", "Unknown")
|
64
|
+
|
65
|
+
# Check if status is not in final states
|
66
|
+
if status not in final_states:
|
67
|
+
cancelable_tests.append({
|
68
|
+
"id": report.get("id"),
|
69
|
+
"name": report.get("name", "Unknown"),
|
70
|
+
"status": status,
|
71
|
+
"percentage": test_status.get("percentage", 0),
|
72
|
+
"description": test_status.get("description", "")
|
73
|
+
})
|
74
|
+
|
75
|
+
if not cancelable_tests:
|
76
|
+
return """# ℹ️ No Tests Available for Cancellation
|
77
|
+
|
78
|
+
All UI tests are already in final states (Canceled, Finished, or Failed).
|
79
|
+
|
80
|
+
## 🔍 To cancel a specific test:
|
81
|
+
Use the command: `Cancel UI test <test_id>`
|
82
|
+
|
83
|
+
Example: `Cancel UI test 12345`"""
|
84
|
+
|
85
|
+
# Build the response message
|
86
|
+
response = """# 🚫 UI Tests Available for Cancellation
|
87
|
+
|
88
|
+
The following tests are currently running and can be canceled:
|
89
|
+
|
90
|
+
## 📋 Active Tests:
|
91
|
+
"""
|
92
|
+
|
93
|
+
for test in cancelable_tests:
|
94
|
+
response += f"""
|
95
|
+
### 🔸 Test ID: `{test['id']}`
|
96
|
+
- **Name:** `{test['name']}`
|
97
|
+
- **Status:** `{test['status']}`
|
98
|
+
- **Progress:** {test['percentage']}%
|
99
|
+
- **Description:** {test['description']}
|
100
|
+
"""
|
101
|
+
|
102
|
+
response += """
|
103
|
+
## 🚫 To cancel a specific test:
|
104
|
+
Use the command: `Cancel UI test <test_id>`
|
105
|
+
|
106
|
+
Example: `Cancel UI test 12345`"""
|
107
|
+
|
108
|
+
return response
|
109
|
+
|
110
|
+
except Exception as e:
|
111
|
+
logger.error(f"Error fetching cancelable tests: {e}")
|
112
|
+
return f"❌ **Error fetching tests:** {str(e)}"
|
113
|
+
|
114
|
+
def _cancel_specific_test(self, test_id: str) -> str:
|
115
|
+
"""Cancel a specific UI test by ID."""
|
116
|
+
try:
|
117
|
+
# First, get the current status of the test
|
118
|
+
reports = self.api_wrapper.get_ui_reports_list()
|
119
|
+
target_test = None
|
120
|
+
|
121
|
+
for report in reports:
|
122
|
+
if str(report.get("id")) == test_id:
|
123
|
+
target_test = report
|
124
|
+
break
|
125
|
+
|
126
|
+
if not target_test:
|
127
|
+
return f"❌ **Test with ID `{test_id}` not found.**"
|
128
|
+
|
129
|
+
# Check if test can be canceled
|
130
|
+
test_status = target_test.get("test_status", {})
|
131
|
+
current_status = test_status.get("status", "Unknown")
|
132
|
+
final_states = {"Canceled", "Finished", "Failed"}
|
133
|
+
|
134
|
+
if current_status in final_states:
|
135
|
+
return f"""# ❌ Cannot Cancel Test
|
136
|
+
|
137
|
+
## Test Information:
|
138
|
+
- **Test ID:** `{test_id}`
|
139
|
+
- **Name:** `{target_test.get('name', 'Unknown')}`
|
140
|
+
- **Current Status:** `{current_status}`
|
141
|
+
|
142
|
+
## 🚫 Reason:
|
143
|
+
This test cannot be canceled because it is already in a final state (`{current_status}`).
|
144
|
+
|
145
|
+
Only tests with status **not** in `Canceled`, `Finished`, or `Failed` can be canceled."""
|
146
|
+
|
147
|
+
# Attempt to cancel the test
|
148
|
+
try:
|
149
|
+
cancel_response = self.api_wrapper.cancel_ui_test(test_id)
|
150
|
+
|
151
|
+
return f"""# ✅ UI Test Canceled Successfully!
|
152
|
+
|
153
|
+
## Test Information:
|
154
|
+
- **Test ID:** `{test_id}`
|
155
|
+
- **Name:** `{target_test.get('name', 'Unknown')}`
|
156
|
+
- **Previous Status:** `{current_status}`
|
157
|
+
- **New Status:** `Canceled`
|
158
|
+
|
159
|
+
## 🎯 Result:
|
160
|
+
The test has been successfully canceled and will stop executing."""
|
161
|
+
|
162
|
+
except Exception as cancel_error:
|
163
|
+
logger.error(f"Error canceling test {test_id}: {cancel_error}")
|
164
|
+
return f"""# ❌ Failed to Cancel Test
|
165
|
+
|
166
|
+
## Test Information:
|
167
|
+
- **Test ID:** `{test_id}`
|
168
|
+
- **Name:** `{target_test.get('name', 'Unknown')}`
|
169
|
+
- **Current Status:** `{current_status}`
|
170
|
+
|
171
|
+
## 🚫 Error:
|
172
|
+
{str(cancel_error)}
|
173
|
+
|
174
|
+
Please check the test ID and try again."""
|
175
|
+
|
176
|
+
except Exception as e:
|
177
|
+
logger.error(f"Error canceling specific test {test_id}: {e}")
|
178
|
+
return f"❌ **Error processing cancellation for test `{test_id}`: {str(e)}**"
|
@@ -85,6 +85,11 @@ class CarrierClient(BaseModel):
|
|
85
85
|
endpoint = f"api/v1/backend_performance/test/{self.credentials.project_id}/{test_id}"
|
86
86
|
return self.request('post', endpoint, json=json_body).get("result_id", "")
|
87
87
|
|
88
|
+
def run_ui_test(self, test_id: str, json_body):
|
89
|
+
"""Run a UI test with the given test ID and JSON body."""
|
90
|
+
endpoint = f"api/v1/ui_performance/test/{self.credentials.project_id}/{test_id}"
|
91
|
+
return self.request('post', endpoint, json=json_body).get("result_id", "")
|
92
|
+
|
88
93
|
def get_engagements_list(self) -> List[Dict[str, Any]]:
|
89
94
|
endpoint = f"api/v1/engagements/engagements/{self.credentials.project_id}"
|
90
95
|
return self.request('get', endpoint).get("items", [])
|
@@ -204,6 +209,69 @@ class CarrierClient(BaseModel):
|
|
204
209
|
return self.request('get', endpoint).get("rows", [])
|
205
210
|
|
206
211
|
def get_ui_reports_list(self) -> List[Dict[str, Any]]:
|
207
|
-
|
208
|
-
|
209
|
-
|
212
|
+
"""Get list of UI test reports from the Carrier platform."""
|
213
|
+
endpoint = f"api/v1/ui_performance/reports/{self.credentials.project_id}"
|
214
|
+
return self.request('get', endpoint).get("rows", [])
|
215
|
+
|
216
|
+
def get_locations(self) -> Dict[str, Any]:
|
217
|
+
"""Get list of available locations/cloud settings from the Carrier platform."""
|
218
|
+
endpoint = f"api/v1/shared/locations/{self.credentials.project_id}"
|
219
|
+
return self.request('get', endpoint)
|
220
|
+
|
221
|
+
def update_ui_test(self, test_id: str, json_body) -> Dict[str, Any]:
|
222
|
+
"""Update UI test configuration and schedule."""
|
223
|
+
endpoint = f"api/v1/ui_performance/test/{self.credentials.project_id}/{test_id}"
|
224
|
+
return self.request('put', endpoint, json=json_body)
|
225
|
+
|
226
|
+
def get_ui_test_details(self, test_id: str) -> Dict[str, Any]:
|
227
|
+
"""Get detailed UI test configuration by test ID."""
|
228
|
+
endpoint = f"api/v1/ui_performance/test/{self.credentials.project_id}/{test_id}"
|
229
|
+
return self.request('get', endpoint)
|
230
|
+
|
231
|
+
def create_ui_test(self, json_body: Dict[str, Any]) -> Dict[str, Any]:
|
232
|
+
"""Create a new UI test."""
|
233
|
+
endpoint = f"api/v1/ui_performance/tests/{self.credentials.project_id}"
|
234
|
+
|
235
|
+
# Print full JSON POST body for debugging
|
236
|
+
print("=" * 60)
|
237
|
+
print("DEBUG: Full JSON POST body for create_ui_test:")
|
238
|
+
print("=" * 60)
|
239
|
+
print(json.dumps(json_body, indent=2))
|
240
|
+
print("=" * 60)
|
241
|
+
|
242
|
+
# Use multipart/form-data with data field containing the JSON body
|
243
|
+
form_data = {'data': json.dumps(json_body)}
|
244
|
+
|
245
|
+
# Temporarily remove Content-Type header to let requests set it for multipart
|
246
|
+
original_headers = self.session.headers.copy()
|
247
|
+
if 'Content-Type' in self.session.headers:
|
248
|
+
del self.session.headers['Content-Type']
|
249
|
+
|
250
|
+
try:
|
251
|
+
full_url = f"{self.credentials.url.rstrip('/')}/{endpoint.lstrip('/')}"
|
252
|
+
response = self.session.post(full_url, data=form_data)
|
253
|
+
response.raise_for_status()
|
254
|
+
return response.json()
|
255
|
+
except requests.HTTPError as http_err:
|
256
|
+
logger.error(f"HTTP {response.status_code} error: {response.text[:500]}")
|
257
|
+
raise CarrierAPIError(f"Request to {full_url} failed with status {response.status_code}")
|
258
|
+
except json.JSONDecodeError:
|
259
|
+
logger.error(f"Response was not valid JSON. Body:\n{response.text[:500]}")
|
260
|
+
raise CarrierAPIError("Server returned non-JSON response")
|
261
|
+
finally:
|
262
|
+
# Restore original headers
|
263
|
+
self.session.headers.update(original_headers)
|
264
|
+
|
265
|
+
def cancel_ui_test(self, test_id: str) -> Dict[str, Any]:
|
266
|
+
"""Cancel a UI test by setting its status to Canceled."""
|
267
|
+
endpoint = f"api/v1/ui_performance/report_status/{self.credentials.project_id}/{test_id}"
|
268
|
+
|
269
|
+
cancel_body = {
|
270
|
+
"test_status": {
|
271
|
+
"status": "Canceled",
|
272
|
+
"percentage": 100,
|
273
|
+
"description": "Test was canceled"
|
274
|
+
}
|
275
|
+
}
|
276
|
+
|
277
|
+
return self.request('put', endpoint, json=cancel_body)
|