agentcrew-ai 0.8.4__tar.gz → 0.8.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. agentcrew_ai-0.8.6/AgentCrew/__init__.py +1 -0
  2. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/a2a/task_manager.py +154 -30
  3. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/agents/local_agent.py +9 -9
  4. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/element_extractor.py +1 -1
  5. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/service.py +17 -7
  6. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/chat/message/command_processor.py +4 -2
  7. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/chat/message/conversation.py +1 -0
  8. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/chat/message/handler.py +3 -6
  9. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/command_execution/constants.py +2 -2
  10. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/command_execution/service.py +37 -83
  11. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/command_execution/tool.py +5 -7
  12. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/command_execution/types.py +3 -4
  13. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/console/command_handlers.py +2 -2
  14. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/console/confirmation_handler.py +83 -38
  15. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/console/console_ui.py +27 -23
  16. agentcrew_ai-0.8.6/AgentCrew/modules/console/diff_display.py +203 -0
  17. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/console/display_handlers.py +3 -0
  18. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/console/input_handler.py +3 -4
  19. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/console/tool_display.py +35 -4
  20. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/console/ui_effects.py +30 -14
  21. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/custom_llm/deepinfra_service.py +20 -19
  22. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/custom_llm/github_copilot_service.py +157 -2
  23. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/custom_llm/service.py +1 -9
  24. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/llm/constants.py +24 -3
  25. {agentcrew_ai-0.8.4/agentcrew_ai.egg-info → agentcrew_ai-0.8.6}/PKG-INFO +2 -2
  26. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6/agentcrew_ai.egg-info}/PKG-INFO +2 -2
  27. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/agentcrew_ai.egg-info/SOURCES.txt +1 -1
  28. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/agentcrew_ai.egg-info/requires.txt +1 -1
  29. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/pyproject.toml +2 -2
  30. agentcrew_ai-0.8.4/AgentCrew/__init__.py +0 -1
  31. agentcrew_ai-0.8.4/AgentCrew/modules/command_execution/metric.py +0 -55
  32. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/app.py +0 -0
  33. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/assets/agentcrew_logo.png +0 -0
  34. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/main.py +0 -0
  35. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/main_docker.py +0 -0
  36. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/__init__.py +0 -0
  37. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/a2a/__init__.py +0 -0
  38. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/a2a/adapters.py +0 -0
  39. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/a2a/agent_cards.py +0 -0
  40. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/a2a/common/__init__.py +0 -0
  41. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/a2a/common/client/__init__.py +0 -0
  42. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/a2a/common/client/card_resolver.py +0 -0
  43. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/a2a/common/client/client.py +0 -0
  44. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/a2a/common/server/__init__.py +0 -0
  45. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/a2a/common/server/auth_middleware.py +0 -0
  46. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/a2a/common/server/task_manager.py +0 -0
  47. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/a2a/common/server/utils.py +0 -0
  48. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/a2a/errors.py +0 -0
  49. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/a2a/registry.py +0 -0
  50. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/a2a/server.py +0 -0
  51. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/agents/__init__.py +0 -0
  52. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/agents/base.py +0 -0
  53. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/agents/example.py +0 -0
  54. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/agents/manager.py +0 -0
  55. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/agents/remote_agent.py +0 -0
  56. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/agents/tools/__init__.py +0 -0
  57. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/agents/tools/ask.py +0 -0
  58. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/agents/tools/delegate.py +0 -0
  59. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/agents/tools/transfer.py +0 -0
  60. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/anthropic/__init__.py +0 -0
  61. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/anthropic/service.py +0 -0
  62. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/__init__.py +0 -0
  63. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/chrome_manager.py +0 -0
  64. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/js/click_element.js +0 -0
  65. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/js/draw_element_boxes.js +0 -0
  66. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/js/extract_clickable_elements.js +0 -0
  67. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/js/extract_elements_by_text.js +0 -0
  68. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/js/extract_input_elements.js +0 -0
  69. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/js/extract_scrollable_elements.js +0 -0
  70. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/js/filter_hidden_elements.js +0 -0
  71. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/js/focus_and_clear_element.js +0 -0
  72. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/js/remove_element_boxes.js +0 -0
  73. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/js/scroll_page.js +0 -0
  74. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/js/trigger_input_events.js +0 -0
  75. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/js_loader.py +0 -0
  76. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/browser_automation/tool.py +0 -0
  77. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/chat/__init__.py +0 -0
  78. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/chat/consolidation.py +0 -0
  79. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/chat/file_handler.py +0 -0
  80. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/chat/history.py +0 -0
  81. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/chat/message/__init__.py +0 -0
  82. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/chat/message/base.py +0 -0
  83. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/chat/message/tool_manager.py +0 -0
  84. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/chat/message_handler.py +0 -0
  85. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/clipboard/__init__.py +0 -0
  86. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/clipboard/service.py +0 -0
  87. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/clipboard/tool.py +0 -0
  88. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/code_analysis/__init__.py +0 -0
  89. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/code_analysis/service.py +0 -0
  90. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/code_analysis/tool.py +0 -0
  91. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/command_execution/__init__.py +0 -0
  92. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/config/__init__.py +0 -0
  93. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/config/config_management.py +0 -0
  94. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/console/__init__.py +0 -0
  95. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/console/completers.py +0 -0
  96. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/console/constants.py +0 -0
  97. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/console/conversation_handler.py +0 -0
  98. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/console/utils.py +0 -0
  99. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/custom_llm/__init__.py +0 -0
  100. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/custom_llm/copilot_response_service.py +0 -0
  101. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/file_editing/__init__.py +0 -0
  102. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/file_editing/safety_validator.py +0 -0
  103. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/file_editing/search_replace_engine.py +0 -0
  104. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/file_editing/service.py +0 -0
  105. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/file_editing/tool.py +0 -0
  106. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/file_editing/tree_sitter_checker.py +0 -0
  107. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/google/__init__.py +0 -0
  108. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/google/native_service.py +0 -0
  109. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/google/service.py +0 -0
  110. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/groq/__init__.py +0 -0
  111. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/groq/service.py +0 -0
  112. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/__init__.py +0 -0
  113. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/components/__init__.py +0 -0
  114. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/components/chat_components.py +0 -0
  115. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/components/command_handler.py +0 -0
  116. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/components/completers.py +0 -0
  117. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/components/conversation_components.py +0 -0
  118. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/components/input_components.py +0 -0
  119. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/components/keyboard_handler.py +0 -0
  120. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/components/menu_components.py +0 -0
  121. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/components/message_handlers.py +0 -0
  122. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/components/tool_handlers.py +0 -0
  123. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/components/ui_state_manager.py +0 -0
  124. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/qt_ui.py +0 -0
  125. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/themes/README.md +0 -0
  126. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/themes/__init__.py +0 -0
  127. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/themes/atom_light.py +0 -0
  128. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/themes/catppuccin.py +0 -0
  129. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/themes/dracula.py +0 -0
  130. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/themes/nord.py +0 -0
  131. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/themes/saigontech.py +0 -0
  132. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/themes/style_provider.py +0 -0
  133. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/themes/unicorn.py +0 -0
  134. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/utils/__init__.py +0 -0
  135. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/utils/macos_clipboard.py +0 -0
  136. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/utils/strings.py +0 -0
  137. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/utils/wins_clipboard.py +0 -0
  138. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/__init__.py +0 -0
  139. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/config_window.py +0 -0
  140. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/configs/__init__.py +0 -0
  141. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/configs/agent_config.py +0 -0
  142. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/configs/custom_llm_provider.py +0 -0
  143. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/configs/global_settings.py +0 -0
  144. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/configs/mcp_config.py +0 -0
  145. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/configs/save_worker.py +0 -0
  146. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/history_sidebar.py +0 -0
  147. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/json_editor.py +0 -0
  148. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/loading_overlay.py +0 -0
  149. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/markdown_editor.py +0 -0
  150. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/message_bubble.py +0 -0
  151. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/paste_aware_textedit.py +0 -0
  152. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/system_message.py +0 -0
  153. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/token_usage.py +0 -0
  154. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/widgets/tool_widget.py +0 -0
  155. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/gui/worker.py +0 -0
  156. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/image_generation/__init__.py +0 -0
  157. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/image_generation/service.py +0 -0
  158. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/image_generation/tool.py +0 -0
  159. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/llm/__init__.py +0 -0
  160. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/llm/base.py +0 -0
  161. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/llm/model_registry.py +0 -0
  162. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/llm/service_manager.py +0 -0
  163. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/llm/types.py +0 -0
  164. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/mcpclient/__init__.py +0 -0
  165. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/mcpclient/auth.py +0 -0
  166. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/mcpclient/config.py +0 -0
  167. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/mcpclient/manager.py +0 -0
  168. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/mcpclient/service.py +0 -0
  169. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/mcpclient/tool.py +0 -0
  170. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/memory/__init__.py +0 -0
  171. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/memory/base_service.py +0 -0
  172. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/memory/chroma_service.py +0 -0
  173. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/memory/context_persistent.py +0 -0
  174. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/memory/github_copilot_ef.py +0 -0
  175. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/memory/google_genai_ef.py +0 -0
  176. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/memory/tool.py +0 -0
  177. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/memory/voyageai_ef.py +0 -0
  178. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/openai/__init__.py +0 -0
  179. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/openai/response_service.py +0 -0
  180. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/openai/service.py +0 -0
  181. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/prompts/__init__.py +0 -0
  182. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/prompts/constants.py +0 -0
  183. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/tools/README.md +0 -0
  184. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/tools/registration.py +0 -0
  185. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/tools/registry.py +0 -0
  186. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/voice/__init__.py +0 -0
  187. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/voice/audio_handler.py +0 -0
  188. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/voice/base.py +0 -0
  189. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/voice/deepinfra_service.py +0 -0
  190. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/voice/elevenlabs_service.py +0 -0
  191. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/voice/text_cleaner.py +0 -0
  192. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/web_search/__init__.py +0 -0
  193. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/web_search/service.py +0 -0
  194. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/AgentCrew/modules/web_search/tool.py +0 -0
  195. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/CONTRIBUTING.md +0 -0
  196. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/LICENSE +0 -0
  197. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/MANIFEST.in +0 -0
  198. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/README.md +0 -0
  199. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/agentcrew_ai.egg-info/dependency_links.txt +0 -0
  200. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/agentcrew_ai.egg-info/entry_points.txt +0 -0
  201. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/agentcrew_ai.egg-info/top_level.txt +0 -0
  202. {agentcrew_ai-0.8.4 → agentcrew_ai-0.8.6}/setup.cfg +0 -0
@@ -0,0 +1 @@
1
+ __version__ = "0.8.6"
@@ -27,6 +27,11 @@ from a2a.types import (
27
27
  TaskState,
28
28
  TaskStatusUpdateEvent,
29
29
  TaskArtifactUpdateEvent,
30
+ Part,
31
+ TextPart,
32
+ DataPart,
33
+ Role,
34
+ Message,
30
35
  )
31
36
 
32
37
  from AgentCrew.modules.agents import LocalAgent
@@ -58,6 +63,7 @@ class AgentTaskManager(TaskManager):
58
63
  """Manages tasks for a specific agent"""
59
64
 
60
65
  TERMINAL_STATES = {TaskState.completed, TaskState.canceled, TaskState.failed}
66
+ INPUT_REQUIRED_STATES = {TaskState.input_required}
61
67
 
62
68
  def __init__(self, agent_name: str, agent_manager: AgentManager):
63
69
  self.agent_name = agent_name
@@ -72,6 +78,9 @@ class AgentTaskManager(TaskManager):
72
78
  ] = defaultdict(list)
73
79
  self.streaming_enabled_tasks: set[str] = set()
74
80
 
81
+ self.pending_ask_responses: Dict[str, asyncio.Event] = {}
82
+ self.ask_responses: Dict[str, str] = {}
83
+
75
84
  self.agent = self.agent_manager.get_agent(self.agent_name)
76
85
  if self.agent is None or not isinstance(self.agent, LocalAgent):
77
86
  raise ValueError(f"Agent {agent_name} not found or is not a LocalAgent")
@@ -82,6 +91,19 @@ class AgentTaskManager(TaskManager):
82
91
  """Check if a state is terminal."""
83
92
  return state in self.TERMINAL_STATES
84
93
 
94
+ def _extract_text_from_message(self, message: Dict[str, Any]) -> str:
95
+ """Extract text content from a message."""
96
+ content = message.get("content", [])
97
+ if isinstance(content, str):
98
+ return content
99
+ text_parts = []
100
+ for part in content:
101
+ if isinstance(part, str):
102
+ text_parts.append(part)
103
+ elif isinstance(part, dict) and part.get("type") == "text":
104
+ text_parts.append(part.get("text", ""))
105
+ return " ".join(text_parts)
106
+
85
107
  def _validate_task_not_terminal(
86
108
  self, task: Task, operation: str
87
109
  ) -> Optional[TaskNotCancelableError]:
@@ -121,7 +143,6 @@ class AgentTaskManager(TaskManager):
121
143
  )
122
144
  )
123
145
 
124
- # Generate task ID from message
125
146
  task_id = (
126
147
  request.params.message.task_id
127
148
  or f"task_{request.params.message.message_id}"
@@ -135,8 +156,19 @@ class AgentTaskManager(TaskManager):
135
156
  root=JSONRPCErrorResponse(id=request.id, error=error)
136
157
  )
137
158
 
159
+ if existing_task.status.state == TaskState.input_required:
160
+ message = convert_a2a_message_to_agent(request.params.message)
161
+ user_response = self._extract_text_from_message(message)
162
+
163
+ if task_id in self.pending_ask_responses:
164
+ self.ask_responses[task_id] = user_response
165
+ self.pending_ask_responses[task_id].set()
166
+
167
+ return SendMessageResponse(
168
+ root=SendMessageSuccessResponse(id=request.id, result=existing_task)
169
+ )
170
+
138
171
  if task_id not in self.tasks:
139
- # Create task with initial state
140
172
  task = Task(
141
173
  id=task_id,
142
174
  context_id=request.params.message.context_id or f"ctx_{task_id}",
@@ -147,8 +179,8 @@ class AgentTaskManager(TaskManager):
147
179
  self.tasks[task.id] = task
148
180
 
149
181
  task = self.tasks[task_id]
150
- if task_id not in self.task_history:
151
- self.task_history[task_id] = []
182
+ if task.context_id not in self.task_history:
183
+ self.task_history[task.context_id] = []
152
184
 
153
185
  # Convert A2A message to SwissKnife format
154
186
  message = convert_a2a_message_to_agent(request.params.message)
@@ -185,9 +217,8 @@ class AgentTaskManager(TaskManager):
185
217
 
186
218
  message["content"] = new_parts
187
219
 
188
- self.task_history[task_id].append(message)
220
+ self.task_history[task.context_id].append(message)
189
221
 
190
- # Process with agent (non-blocking)
191
222
  asyncio.create_task(self._process_agent_task(self.agent, task))
192
223
 
193
224
  # Return initial task state
@@ -243,6 +274,35 @@ class AgentTaskManager(TaskManager):
243
274
  # Clean up
244
275
  self.streaming_tasks.pop(task_id, None)
245
276
 
277
+ def _create_ask_tool_message(
278
+ self, question: str, guided_answers: list[str]
279
+ ) -> Message:
280
+ """
281
+ Create an A2A message for the ask tool's input-required state.
282
+
283
+ Args:
284
+ question: The question to ask the user
285
+ guided_answers: List of suggested answers
286
+
287
+ Returns:
288
+ A2A Message with the question and guided answers
289
+ """
290
+ ask_data = {
291
+ "type": "ask",
292
+ "question": question,
293
+ "guided_answers": guided_answers,
294
+ "instruction": "Please respond with one of the guided answers or provide a custom response.",
295
+ }
296
+
297
+ return Message(
298
+ message_id=f"ask_{hash(question)}",
299
+ role=Role.agent,
300
+ parts=[
301
+ Part(root=TextPart(text=f"❓ {question}")),
302
+ Part(root=DataPart(data=ask_data)),
303
+ ],
304
+ )
305
+
246
306
  def _record_and_emit_event(
247
307
  self, task_id: str, event: Union[TaskStatusUpdateEvent, TaskArtifactUpdateEvent]
248
308
  ):
@@ -281,7 +341,7 @@ class AgentTaskManager(TaskManager):
281
341
 
282
342
  try:
283
343
  artifacts = []
284
- if task.id not in self.task_history:
344
+ if task.context_id not in self.task_history:
285
345
  raise ValueError("Task history is not existed")
286
346
 
287
347
  input_tokens = 0
@@ -308,7 +368,7 @@ class AgentTaskManager(TaskManager):
308
368
  chunk_text,
309
369
  thinking_chunk,
310
370
  ) in agent.process_messages(
311
- self.task_history[task.id], callback=process_result
371
+ self.task_history[task.context_id], callback=process_result
312
372
  ):
313
373
  # Update current response
314
374
  if response_message:
@@ -388,9 +448,8 @@ class AgentTaskManager(TaskManager):
388
448
  MessageType.Thinking, {"thinking": thinking_data}
389
449
  )
390
450
  if thinking_message:
391
- self.task_history[task.id].append(thinking_message)
451
+ self.task_history[task.context_id].append(thinking_message)
392
452
 
393
- # Format assistant message with the response and tool uses
394
453
  assistant_message = agent.format_message(
395
454
  MessageType.Assistant,
396
455
  {
@@ -401,34 +460,99 @@ class AgentTaskManager(TaskManager):
401
460
  },
402
461
  )
403
462
  if assistant_message:
404
- self.task_history[task.id].append(assistant_message)
463
+ self.task_history[task.context_id].append(assistant_message)
405
464
 
406
- # Process each tool use
407
465
  for tool_use in tool_uses:
408
- try:
409
- tool_result = await agent.execute_tool_call(
410
- tool_use["name"],
411
- tool_use["input"],
466
+ tool_name = tool_use["name"]
467
+
468
+ if tool_name == "ask":
469
+ question = tool_use["input"].get("question", "")
470
+ guided_answers = tool_use["input"].get("guided_answers", [])
471
+
472
+ task.status.state = TaskState.input_required
473
+ task.status.timestamp = datetime.now().isoformat()
474
+ task.status.message = self._create_ask_tool_message(
475
+ question, guided_answers
412
476
  )
413
477
 
478
+ self._record_and_emit_event(
479
+ task.id,
480
+ TaskStatusUpdateEvent(
481
+ task_id=task.id,
482
+ context_id=task.context_id,
483
+ status=task.status,
484
+ final=False,
485
+ ),
486
+ )
487
+
488
+ wait_event = asyncio.Event()
489
+ self.pending_ask_responses[task.id] = wait_event
490
+
491
+ try:
492
+ await asyncio.wait_for(wait_event.wait(), timeout=300)
493
+ user_answer = self.ask_responses.get(
494
+ task.id, "No response received"
495
+ )
496
+ except asyncio.TimeoutError:
497
+ user_answer = "User did not respond in time."
498
+ finally:
499
+ self.pending_ask_responses.pop(task.id, None)
500
+ self.ask_responses.pop(task.id, None)
501
+
502
+ tool_result = f"User's answer: {user_answer}"
503
+
504
+ task.status.state = TaskState.working
505
+ task.status.timestamp = datetime.now().isoformat()
506
+ task.status.message = None
507
+
414
508
  tool_result_message = agent.format_message(
415
509
  MessageType.ToolResult,
416
510
  {"tool_use": tool_use, "tool_result": tool_result},
417
511
  )
418
512
  if tool_result_message:
419
- self.task_history[task.id].append(tool_result_message)
513
+ self.task_history[task.context_id].append(
514
+ tool_result_message
515
+ )
420
516
 
421
- except Exception as e:
422
- error_message = agent.format_message(
423
- MessageType.ToolResult,
424
- {
425
- "tool_use": tool_use,
426
- "tool_result": str(e),
427
- "is_error": True,
428
- },
517
+ self._record_and_emit_event(
518
+ task.id,
519
+ TaskStatusUpdateEvent(
520
+ task_id=task.id,
521
+ context_id=task.context_id,
522
+ status=task.status,
523
+ final=False,
524
+ ),
429
525
  )
430
- if error_message:
431
- self.task_history[task.id].append(error_message)
526
+
527
+ else:
528
+ try:
529
+ tool_result = await agent.execute_tool_call(
530
+ tool_name,
531
+ tool_use["input"],
532
+ )
533
+
534
+ tool_result_message = agent.format_message(
535
+ MessageType.ToolResult,
536
+ {"tool_use": tool_use, "tool_result": tool_result},
537
+ )
538
+ if tool_result_message:
539
+ self.task_history[task.context_id].append(
540
+ tool_result_message
541
+ )
542
+
543
+ except Exception as e:
544
+ error_message = agent.format_message(
545
+ MessageType.ToolResult,
546
+ {
547
+ "tool_use": tool_use,
548
+ "tool_result": str(e),
549
+ "is_error": True,
550
+ },
551
+ )
552
+ if error_message:
553
+ self.task_history[task.context_id].append(
554
+ error_message
555
+ )
432
556
 
433
557
  return await _process_task()
434
558
  return current_response
@@ -442,9 +566,9 @@ class AgentTaskManager(TaskManager):
442
566
  },
443
567
  )
444
568
  if assistant_message:
445
- self.task_history[task.id].append(assistant_message)
569
+ self.task_history[task.context_id].append(assistant_message)
446
570
  user_message = (
447
- self.task_history[task.id][0]
571
+ self.task_history[task.context_id][0]
448
572
  .get("content", [{}])[0]
449
573
  .get("text", "")
450
574
  )
@@ -604,7 +728,7 @@ class AgentTaskManager(TaskManager):
604
728
  Yields:
605
729
  Streaming responses with task updates
606
730
  """
607
- task_id = request.params.task_id
731
+ task_id = request.params.id
608
732
 
609
733
  if task_id not in self.tasks:
610
734
  error = A2AError.task_not_found(task_id)
@@ -111,25 +111,25 @@ class LocalAgent(BaseAgent):
111
111
  # self.tool_prompts.append(
112
112
  # delegate_tool_prompt(self.services["agent_manager"])
113
113
  # )
114
+ from AgentCrew.modules.agents.tools.ask import (
115
+ register as register_ask,
116
+ ask_tool_prompt,
117
+ )
118
+
119
+ register_ask(self)
120
+ self.tool_prompts.append(ask_tool_prompt())
121
+
114
122
  if not self.is_remoting_mode:
115
123
  from AgentCrew.modules.agents.tools.transfer import (
116
124
  register as register_transfer,
117
125
  transfer_tool_prompt,
118
126
  )
119
- from AgentCrew.modules.agents.tools.ask import (
120
- register as register_ask,
121
- ask_tool_prompt,
122
- )
123
127
 
124
128
  register_transfer(self.services["agent_manager"], self)
125
129
  self.tool_prompts.append(
126
130
  transfer_tool_prompt(self.services["agent_manager"])
127
131
  )
128
132
 
129
- # Register the ask tool (always available)
130
- register_ask(self)
131
- self.tool_prompts.append(ask_tool_prompt())
132
-
133
133
  for tool_name in self.tools:
134
134
  if self.services and tool_name in self.services:
135
135
  service = self.services[tool_name]
@@ -642,7 +642,7 @@ Check if `when` condition in <Global_Behavior> or <Project_Behavior> matches, up
642
642
  adaptive_messages["content"].append(
643
643
  {
644
644
  "type": "text",
645
- "text": f"Here are conversations that we have discussed:\n- {'\n- '.join(memory_headers)}",
645
+ "text": f"Here are conversations that we have discussed from oldest to latest:\n - {'\n - '.join(memory_headers)}",
646
646
  }
647
647
  )
648
648
  if len(adaptive_messages["content"]) > 0:
@@ -68,7 +68,7 @@ def clean_markdown_images(markdown_content: str) -> str:
68
68
  Cleaned markdown content
69
69
  """
70
70
  # Pattern for markdown images: ![alt](url)
71
- markdown_img_pattern = r"!\[([^\]]*)\]\(([^)]+)\)"
71
+ markdown_img_pattern = r"!?\[([^\]]*)\]\(([^)]+)\)"
72
72
 
73
73
  def replace_markdown_img(match):
74
74
  alt_text = match.group(1)
@@ -7,7 +7,7 @@ scroll content, and extract page information using Chrome DevTools Protocol.
7
7
 
8
8
  import time
9
9
  from typing import Dict, Any, Optional, List
10
- from html_to_markdown import convert_to_markdown
10
+ from html_to_markdown import convert, ConversionOptions, PreprocessingOptions
11
11
  import urllib.parse
12
12
 
13
13
  from html.parser import HTMLParser
@@ -344,13 +344,23 @@ class BrowserAutomationService:
344
344
  filtered_html = self._filter_hidden_elements(raw_html)
345
345
 
346
346
  # Convert HTML to markdown
347
- raw_markdown_content = convert_to_markdown(
347
+ # raw_markdown_content = convert_to_markdown(
348
+ # filtered_html,
349
+ # source_encoding="utf-8",
350
+ # strip_newlines=True,
351
+ # extract_metadata=False,
352
+ # remove_forms=False,
353
+ # remove_navigation=False,
354
+ # )
355
+ raw_markdown_content = convert(
348
356
  filtered_html,
349
- source_encoding="utf-8",
350
- strip_newlines=True,
351
- extract_metadata=False,
352
- remove_forms=False,
353
- remove_navigation=False,
357
+ ConversionOptions(
358
+ strip_newlines=True,
359
+ extract_metadata=False,
360
+ ),
361
+ PreprocessingOptions(
362
+ remove_navigation=False, remove_forms=False, preset="minimal"
363
+ ),
354
364
  )
355
365
  if not raw_markdown_content:
356
366
  return {"success": False, "error": "Could not convert HTML to markdown"}
@@ -101,6 +101,9 @@ class CommandProcessor:
101
101
 
102
102
  async def _handle_copy_command(self, user_input: str) -> CommandResult:
103
103
  copy_idx = user_input[5:].strip() or 1
104
+ user_input_idxs = [
105
+ turn.message_index for turn in self.message_handler.conversation_turns
106
+ ]
104
107
 
105
108
  asssistant_messages_iterator = reversed(
106
109
  [
@@ -108,8 +111,7 @@ class CommandProcessor:
108
111
  for i, msg in enumerate(self.message_handler.streamline_messages)
109
112
  if msg.get("role") == "assistant"
110
113
  and (
111
- self.message_handler.streamline_messages[i + 1].get("role")
112
- == "user"
114
+ i + 1 in user_input_idxs
113
115
  if i + 1 < len(self.message_handler.streamline_messages)
114
116
  else True
115
117
  )
@@ -162,6 +162,7 @@ class ConversationManager:
162
162
  "Memories related to the user request:"
163
163
  )
164
164
  and not message_content.startswith("Content of ")
165
+ and not message_content.startswith("<Transfer_Tool>")
165
166
  ):
166
167
  self.store_conversation_turn(message_content, i)
167
168
 
@@ -279,7 +279,7 @@ class MessageHandler(Observable):
279
279
  # Notify about response progress
280
280
  if not self.agent.is_streaming():
281
281
  # Delays it a bit when using without stream
282
- time.sleep(0.5)
282
+ time.sleep(0.3)
283
283
  self._notify("response_chunk", (chunk_text, assistant_response))
284
284
  if voice_sentence is not None:
285
285
  if (
@@ -321,6 +321,8 @@ class MessageHandler(Observable):
321
321
  .lstrip("\n")
322
322
  )
323
323
 
324
+ self.stream_generator = None
325
+
324
326
  # End thinking when break the response stream
325
327
  if not end_thinking and start_thinking:
326
328
  self._notify("thinking_completed", thinking_content)
@@ -386,11 +388,6 @@ class MessageHandler(Observable):
386
388
 
387
389
  return await self.get_assistant_response()
388
390
 
389
- self.stream_generator = None
390
-
391
- if thinking_content:
392
- self._notify("agent_continue", self.agent.name)
393
-
394
391
  # Add assistant response to messages
395
392
  if assistant_response.strip():
396
393
  self._messages_append(
@@ -15,8 +15,8 @@ MAX_CONCURRENT_COMMANDS = 3
15
15
  # Maximum lifetime for a single command execution (seconds)
16
16
  MAX_COMMAND_LIFETIME = 600
17
17
 
18
- # Maximum output size per command (bytes)
19
- MAX_OUTPUT_SIZE = 1 * 1024 * 1024 # 1MB
18
+ # Maximum output lines to keep in rolling buffer per stream (stdout/stderr)
19
+ MAX_OUTPUT_LINES = 300
20
20
 
21
21
  # Maximum number of commands allowed per minute (application-wide rate limit)
22
22
  MAX_COMMANDS_PER_MINUTE = 10