agentcrew-ai 0.8.0__tar.gz → 0.8.2__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 (197) hide show
  1. agentcrew_ai-0.8.2/AgentCrew/__init__.py +1 -0
  2. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/service.py +9 -2
  3. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/tool.py +16 -16
  4. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/message/command_processor.py +17 -1
  5. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/clipboard/tool.py +2 -2
  6. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/console_ui.py +10 -2
  7. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/constants.py +1 -0
  8. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/display_handlers.py +1 -1
  9. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/input_handler.py +30 -7
  10. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/ui_effects.py +13 -6
  11. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/file_editing/tool.py +2 -2
  12. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/llm/constants.py +62 -3
  13. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/mcpclient/service.py +1 -1
  14. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/base_service.py +19 -0
  15. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/chroma_service.py +29 -1
  16. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/context_persistent.py +3 -1
  17. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/tool.py +30 -61
  18. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/web_search/tool.py +2 -2
  19. {agentcrew_ai-0.8.0/agentcrew_ai.egg-info → agentcrew_ai-0.8.2}/PKG-INFO +1 -1
  20. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2/agentcrew_ai.egg-info}/PKG-INFO +1 -1
  21. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/pyproject.toml +1 -1
  22. agentcrew_ai-0.8.0/AgentCrew/__init__.py +0 -1
  23. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/app.py +0 -0
  24. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/assets/agentcrew_logo.png +0 -0
  25. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/main.py +0 -0
  26. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/main_docker.py +0 -0
  27. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/__init__.py +0 -0
  28. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/__init__.py +0 -0
  29. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/adapters.py +0 -0
  30. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/agent_cards.py +0 -0
  31. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/__init__.py +0 -0
  32. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/client/__init__.py +0 -0
  33. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/client/card_resolver.py +0 -0
  34. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/client/client.py +0 -0
  35. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/server/__init__.py +0 -0
  36. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/server/auth_middleware.py +0 -0
  37. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/server/task_manager.py +0 -0
  38. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/server/utils.py +0 -0
  39. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/registry.py +0 -0
  40. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/server.py +0 -0
  41. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/task_manager.py +0 -0
  42. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/__init__.py +0 -0
  43. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/base.py +0 -0
  44. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/example.py +0 -0
  45. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/local_agent.py +0 -0
  46. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/manager.py +0 -0
  47. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/remote_agent.py +0 -0
  48. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/tools/__init__.py +0 -0
  49. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/tools/ask.py +0 -0
  50. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/tools/delegate.py +0 -0
  51. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/tools/transfer.py +0 -0
  52. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/anthropic/__init__.py +0 -0
  53. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/anthropic/service.py +0 -0
  54. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/__init__.py +0 -0
  55. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/chrome_manager.py +0 -0
  56. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/element_extractor.py +0 -0
  57. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/click_element.js +0 -0
  58. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/extract_clickable_elements.js +0 -0
  59. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/extract_elements_by_text.js +0 -0
  60. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/extract_input_elements.js +0 -0
  61. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/extract_scrollable_elements.js +0 -0
  62. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/focus_and_clear_element.js +0 -0
  63. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/scroll_page.js +0 -0
  64. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/trigger_input_events.js +0 -0
  65. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js_loader.py +0 -0
  66. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/__init__.py +0 -0
  67. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/consolidation.py +0 -0
  68. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/file_handler.py +0 -0
  69. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/history.py +0 -0
  70. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/message/__init__.py +0 -0
  71. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/message/base.py +0 -0
  72. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/message/conversation.py +0 -0
  73. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/message/handler.py +0 -0
  74. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/message/tool_manager.py +0 -0
  75. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/message_handler.py +0 -0
  76. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/clipboard/__init__.py +0 -0
  77. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/clipboard/service.py +0 -0
  78. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/code_analysis/__init__.py +0 -0
  79. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/code_analysis/service.py +0 -0
  80. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/code_analysis/tool.py +0 -0
  81. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/command_execution/__init__.py +0 -0
  82. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/command_execution/constants.py +0 -0
  83. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/command_execution/metric.py +0 -0
  84. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/command_execution/service.py +0 -0
  85. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/command_execution/tool.py +0 -0
  86. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/command_execution/types.py +0 -0
  87. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/config/__init__.py +0 -0
  88. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/config/config_management.py +0 -0
  89. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/__init__.py +0 -0
  90. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/command_handlers.py +0 -0
  91. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/completers.py +0 -0
  92. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/confirmation_handler.py +0 -0
  93. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/conversation_handler.py +0 -0
  94. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/tool_display.py +0 -0
  95. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/utils.py +0 -0
  96. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/custom_llm/__init__.py +0 -0
  97. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/custom_llm/copilot_response_service.py +0 -0
  98. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/custom_llm/deepinfra_service.py +0 -0
  99. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/custom_llm/github_copilot_service.py +0 -0
  100. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/custom_llm/service.py +0 -0
  101. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/file_editing/__init__.py +0 -0
  102. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/file_editing/safety_validator.py +0 -0
  103. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/file_editing/search_replace_engine.py +0 -0
  104. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/file_editing/service.py +0 -0
  105. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/file_editing/tree_sitter_checker.py +0 -0
  106. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/google/__init__.py +0 -0
  107. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/google/native_service.py +0 -0
  108. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/google/service.py +0 -0
  109. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/groq/__init__.py +0 -0
  110. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/groq/service.py +0 -0
  111. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/__init__.py +0 -0
  112. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/__init__.py +0 -0
  113. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/chat_components.py +0 -0
  114. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/command_handler.py +0 -0
  115. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/completers.py +0 -0
  116. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/conversation_components.py +0 -0
  117. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/input_components.py +0 -0
  118. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/keyboard_handler.py +0 -0
  119. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/menu_components.py +0 -0
  120. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/message_handlers.py +0 -0
  121. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/tool_handlers.py +0 -0
  122. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/ui_state_manager.py +0 -0
  123. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/qt_ui.py +0 -0
  124. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/README.md +0 -0
  125. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/__init__.py +0 -0
  126. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/atom_light.py +0 -0
  127. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/catppuccin.py +0 -0
  128. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/dracula.py +0 -0
  129. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/nord.py +0 -0
  130. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/saigontech.py +0 -0
  131. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/style_provider.py +0 -0
  132. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/unicorn.py +0 -0
  133. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/utils/__init__.py +0 -0
  134. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/utils/macos_clipboard.py +0 -0
  135. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/utils/strings.py +0 -0
  136. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/utils/wins_clipboard.py +0 -0
  137. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/__init__.py +0 -0
  138. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/config_window.py +0 -0
  139. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/configs/__init__.py +0 -0
  140. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/configs/agent_config.py +0 -0
  141. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/configs/custom_llm_provider.py +0 -0
  142. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/configs/global_settings.py +0 -0
  143. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/configs/mcp_config.py +0 -0
  144. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/configs/save_worker.py +0 -0
  145. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/history_sidebar.py +0 -0
  146. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/json_editor.py +0 -0
  147. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/loading_overlay.py +0 -0
  148. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/markdown_editor.py +0 -0
  149. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/message_bubble.py +0 -0
  150. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/paste_aware_textedit.py +0 -0
  151. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/system_message.py +0 -0
  152. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/token_usage.py +0 -0
  153. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/tool_widget.py +0 -0
  154. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/worker.py +0 -0
  155. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/image_generation/__init__.py +0 -0
  156. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/image_generation/service.py +0 -0
  157. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/image_generation/tool.py +0 -0
  158. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/llm/__init__.py +0 -0
  159. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/llm/base.py +0 -0
  160. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/llm/model_registry.py +0 -0
  161. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/llm/service_manager.py +0 -0
  162. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/llm/types.py +0 -0
  163. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/mcpclient/__init__.py +0 -0
  164. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/mcpclient/auth.py +0 -0
  165. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/mcpclient/config.py +0 -0
  166. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/mcpclient/manager.py +0 -0
  167. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/mcpclient/tool.py +0 -0
  168. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/__init__.py +0 -0
  169. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/github_copilot_ef.py +0 -0
  170. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/google_genai_ef.py +0 -0
  171. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/voyageai_ef.py +0 -0
  172. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/openai/__init__.py +0 -0
  173. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/openai/response_service.py +0 -0
  174. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/openai/service.py +0 -0
  175. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/prompts/__init__.py +0 -0
  176. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/prompts/constants.py +0 -0
  177. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/tools/README.md +0 -0
  178. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/tools/registration.py +0 -0
  179. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/tools/registry.py +0 -0
  180. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/voice/__init__.py +0 -0
  181. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/voice/audio_handler.py +0 -0
  182. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/voice/base.py +0 -0
  183. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/voice/deepinfra_service.py +0 -0
  184. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/voice/elevenlabs_service.py +0 -0
  185. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/voice/text_cleaner.py +0 -0
  186. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/web_search/__init__.py +0 -0
  187. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/web_search/service.py +0 -0
  188. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/CONTRIBUTING.md +0 -0
  189. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/LICENSE +0 -0
  190. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/MANIFEST.in +0 -0
  191. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/README.md +0 -0
  192. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/agentcrew_ai.egg-info/SOURCES.txt +0 -0
  193. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/agentcrew_ai.egg-info/dependency_links.txt +0 -0
  194. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/agentcrew_ai.egg-info/entry_points.txt +0 -0
  195. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/agentcrew_ai.egg-info/requires.txt +0 -0
  196. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/agentcrew_ai.egg-info/top_level.txt +0 -0
  197. {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/setup.cfg +0 -0
@@ -0,0 +1 @@
1
+ __version__ = "0.8.2"
@@ -41,7 +41,7 @@ class BrowserAutomationService:
41
41
 
42
42
  self.debug_port = debug_port
43
43
  self.chrome_manager = ChromeManager(debug_port=debug_port)
44
- self.chrome_interface: Optional[Any] = None
44
+ self.chrome_interface: Optional[PyChromeDevTools.ChromeInterface] = None
45
45
  self._is_initialized = False
46
46
  # UUID to XPath mapping for element identification
47
47
  self.uuid_to_xpath_mapping: Dict[str, str] = {}
@@ -51,6 +51,9 @@ class BrowserAutomationService:
51
51
  """Ensure Chrome browser is running and connected."""
52
52
  if not self._is_initialized:
53
53
  self._initialize_chrome(profile)
54
+ # Always get active content tabs
55
+ if self.chrome_interface:
56
+ self.chrome_interface.connect()
54
57
 
55
58
  def _initialize_chrome(self, profile: str = "Default"):
56
59
  """Initialize Chrome browser and DevTools connection."""
@@ -471,7 +474,11 @@ class BrowserAutomationService:
471
474
  if style:
472
475
  # Remove spaces and check for display:none
473
476
  style_clean = re.sub(r"\s+", "", style.lower())
474
- if "display:none" in style_clean or "display=none" in style_clean:
477
+ if (
478
+ "display:none" in style_clean
479
+ or "display=none" in style_clean
480
+ or "visibility:hidden" in style_clean
481
+ ):
475
482
  should_hide = True
476
483
 
477
484
  # Check for aria-hidden="true"
@@ -27,7 +27,7 @@ def get_browser_navigate_tool_definition(provider="claude") -> Dict[str, Any]:
27
27
 
28
28
  if provider == "claude":
29
29
  return {
30
- "name": "browser_navigate",
30
+ "name": "navigate_url",
31
31
  "description": tool_description,
32
32
  "input_schema": {
33
33
  "type": "object",
@@ -39,7 +39,7 @@ def get_browser_navigate_tool_definition(provider="claude") -> Dict[str, Any]:
39
39
  return {
40
40
  "type": "function",
41
41
  "function": {
42
- "name": "browser_navigate",
42
+ "name": "navigate_url",
43
43
  "description": tool_description,
44
44
  "parameters": {
45
45
  "type": "object",
@@ -65,7 +65,7 @@ def get_browser_click_tool_definition(provider="claude") -> Dict[str, Any]:
65
65
 
66
66
  if provider == "claude":
67
67
  return {
68
- "name": "browser_click",
68
+ "name": "click_browser_element",
69
69
  "description": tool_description,
70
70
  "input_schema": {
71
71
  "type": "object",
@@ -77,7 +77,7 @@ def get_browser_click_tool_definition(provider="claude") -> Dict[str, Any]:
77
77
  return {
78
78
  "type": "function",
79
79
  "function": {
80
- "name": "browser_click",
80
+ "name": "click_browser_element",
81
81
  "description": tool_description,
82
82
  "parameters": {
83
83
  "type": "object",
@@ -115,7 +115,7 @@ def get_browser_scroll_tool_definition(provider="claude") -> Dict[str, Any]:
115
115
 
116
116
  if provider == "claude":
117
117
  return {
118
- "name": "browser_scroll",
118
+ "name": "scroll_browser",
119
119
  "description": tool_description,
120
120
  "input_schema": {
121
121
  "type": "object",
@@ -127,7 +127,7 @@ def get_browser_scroll_tool_definition(provider="claude") -> Dict[str, Any]:
127
127
  return {
128
128
  "type": "function",
129
129
  "function": {
130
- "name": "browser_scroll",
130
+ "name": "scroll_browser",
131
131
  "description": tool_description,
132
132
  "parameters": {
133
133
  "type": "object",
@@ -149,7 +149,7 @@ def get_browser_get_content_tool_definition(provider="claude") -> Dict[str, Any]
149
149
 
150
150
  if provider == "claude":
151
151
  return {
152
- "name": "browser_get_content",
152
+ "name": "get_browser_content",
153
153
  "description": tool_description,
154
154
  "input_schema": {
155
155
  "type": "object",
@@ -161,7 +161,7 @@ def get_browser_get_content_tool_definition(provider="claude") -> Dict[str, Any]
161
161
  return {
162
162
  "type": "function",
163
163
  "function": {
164
- "name": "browser_get_content",
164
+ "name": "get_browser_content",
165
165
  "description": tool_description,
166
166
  "parameters": {
167
167
  "type": "object",
@@ -301,7 +301,7 @@ def get_browser_input_tool_definition(provider="claude") -> Dict[str, Any]:
301
301
 
302
302
  if provider == "claude":
303
303
  return {
304
- "name": "browser_input",
304
+ "name": "input_browser_field",
305
305
  "description": tool_description,
306
306
  "input_schema": {
307
307
  "type": "object",
@@ -313,7 +313,7 @@ def get_browser_input_tool_definition(provider="claude") -> Dict[str, Any]:
313
313
  return {
314
314
  "type": "function",
315
315
  "function": {
316
- "name": "browser_input",
316
+ "name": "input_browser_field",
317
317
  "description": tool_description,
318
318
  "parameters": {
319
319
  "type": "object",
@@ -367,7 +367,7 @@ def get_browser_get_elements_by_text_tool_definition(
367
367
 
368
368
  if provider == "claude":
369
369
  return {
370
- "name": "browser_get_elements_by_text",
370
+ "name": "get_browser_elements_by_text",
371
371
  "description": tool_description,
372
372
  "input_schema": {
373
373
  "type": "object",
@@ -379,7 +379,7 @@ def get_browser_get_elements_by_text_tool_definition(
379
379
  return {
380
380
  "type": "function",
381
381
  "function": {
382
- "name": "browser_get_elements_by_text",
382
+ "name": "get_browser_elements_by_text",
383
383
  "description": tool_description,
384
384
  "parameters": {
385
385
  "type": "object",
@@ -446,7 +446,7 @@ def get_browser_capture_screenshot_tool_definition(provider="claude") -> Dict[st
446
446
 
447
447
  if provider == "claude":
448
448
  return {
449
- "name": "browser_capture_screenshot",
449
+ "name": "capture_browser_screenshot",
450
450
  "description": tool_description,
451
451
  "input_schema": {
452
452
  "type": "object",
@@ -458,7 +458,7 @@ def get_browser_capture_screenshot_tool_definition(provider="claude") -> Dict[st
458
458
  return {
459
459
  "type": "function",
460
460
  "function": {
461
- "name": "browser_capture_screenshot",
461
+ "name": "capture_browser_screenshot",
462
462
  "description": tool_description,
463
463
  "parameters": {
464
464
  "type": "object",
@@ -572,7 +572,7 @@ def get_browser_send_key_tool_definition(provider="claude") -> Dict[str, Any]:
572
572
 
573
573
  if provider == "claude":
574
574
  return {
575
- "name": "browser_send_key",
575
+ "name": "send_browser_key",
576
576
  "description": tool_description,
577
577
  "input_schema": {
578
578
  "type": "object",
@@ -584,7 +584,7 @@ def get_browser_send_key_tool_definition(provider="claude") -> Dict[str, Any]:
584
584
  return {
585
585
  "type": "function",
586
586
  "function": {
587
- "name": "browser_send_key",
587
+ "name": "send_browser_key",
588
588
  "description": tool_description,
589
589
  "parameters": {
590
590
  "type": "object",
@@ -376,10 +376,26 @@ class CommandProcessor:
376
376
  self.message_handler.last_assisstant_response_idx = len(
377
377
  self.message_handler.streamline_messages
378
378
  )
379
+ if isinstance(selected_message.get("content"), list):
380
+ selected_content = next(
381
+ (
382
+ c.get("text", "")
383
+ for c in selected_message.get("content", [])
384
+ if c.get("type", "") == "text"
385
+ ),
386
+ "",
387
+ )
388
+
389
+ else:
390
+ selected_content = selected_message.get("content", "")
379
391
 
380
392
  self.message_handler._notify(
381
393
  "jump_performed",
382
- {"turn_number": turn_number, "preview": selected_turn.get_preview(100)},
394
+ {
395
+ "turn_number": turn_number,
396
+ "preview": selected_turn.get_preview(100),
397
+ "message": selected_content,
398
+ },
383
399
  )
384
400
 
385
401
  return True
@@ -17,7 +17,7 @@ def get_clipboard_read_tool_definition(provider="claude") -> Dict[str, Any]:
17
17
  tool_required = []
18
18
  if provider == "claude":
19
19
  return {
20
- "name": "clipboard_read",
20
+ "name": "read_clipboard",
21
21
  "description": tool_description,
22
22
  "input_schema": {
23
23
  "type": "object",
@@ -29,7 +29,7 @@ def get_clipboard_read_tool_definition(provider="claude") -> Dict[str, Any]:
29
29
  return {
30
30
  "type": "function",
31
31
  "function": {
32
- "name": "clipboard_read",
32
+ "name": "read_clipboard",
33
33
  "description": tool_description,
34
34
  "parameters": {
35
35
  "type": "object",
@@ -21,6 +21,7 @@ from .constants import (
21
21
  RICH_STYLE_YELLOW,
22
22
  RICH_STYLE_GREEN_BOLD,
23
23
  RICH_STYLE_YELLOW_BOLD,
24
+ PROMPT_CHAR,
24
25
  )
25
26
 
26
27
  from typing import TYPE_CHECKING
@@ -190,6 +191,7 @@ class ConsoleUI(Observer):
190
191
 
191
192
  self.display_handlers.display_message(jump_text)
192
193
  self.display_handlers.display_message(preview_text)
194
+ self.input_handler.set_current_buffer(data["message"])
193
195
  elif event == "thinking_completed":
194
196
  self.display_handlers.display_divider()
195
197
  elif event == "file_processing":
@@ -286,7 +288,7 @@ class ConsoleUI(Observer):
286
288
  import os
287
289
  import time
288
290
 
289
- if self.input_handler.is_message_processing and self._is_resizing:
291
+ if self.input_handler.is_message_processing or self._is_resizing:
290
292
  return # Ignore resize during message processing
291
293
  self._is_resizing = True
292
294
  time.sleep(0.5) # brief pause to allow resize to complete
@@ -303,9 +305,15 @@ class ConsoleUI(Observer):
303
305
  self.display_handlers.print_divider("👤 YOU: ", with_time=True)
304
306
 
305
307
  prompt = Text(
306
- " ",
308
+ PROMPT_CHAR,
307
309
  style=RICH_STYLE_BLUE,
308
310
  )
311
+ if self.input_handler._current_prompt_session:
312
+ prompt.append(
313
+ self.input_handler._current_prompt_session.default_buffer.text,
314
+ style="white",
315
+ )
316
+
309
317
  self.console.print(prompt, end="")
310
318
  self._is_resizing = False
311
319
 
@@ -16,3 +16,4 @@ RICH_STYLE_FILE_ACCENT_BOLD = Style(color="bright_cyan", bold=True)
16
16
  RICH_STYLE_WHITE = Style(color="#ffffff", bold=False)
17
17
 
18
18
  CODE_THEME = "lightbulb"
19
+ PROMPT_CHAR = " "
@@ -397,7 +397,7 @@ class DisplayHandlers:
397
397
  title.append("\n [YOLO mode enabled]", style=RICH_STYLE_YELLOW_BOLD)
398
398
 
399
399
  title.append(
400
- f"\n (Press Enter for new line, Ctrl+S/{'Enter' if self._ui.input_handler.swap_enter else 'Alt+Enter'} to Send, Ctrl+V to paste)\n",
400
+ f"\n (Press {'Enter' if not self._ui.input_handler.swap_enter else 'Alt+Enter'} for new line, Ctrl+S/{'Enter' if self._ui.input_handler.swap_enter else 'Alt+Enter'} to Send, Ctrl+V to paste)\n",
401
401
  style=RICH_STYLE_YELLOW,
402
402
  )
403
403
  self.console.print(title)
@@ -23,6 +23,7 @@ from .constants import (
23
23
  RICH_STYLE_YELLOW_BOLD,
24
24
  RICH_STYLE_RED,
25
25
  RICH_STYLE_BLUE,
26
+ PROMPT_CHAR,
26
27
  )
27
28
 
28
29
  from typing import TYPE_CHECKING
@@ -54,6 +55,7 @@ class InputHandler:
54
55
  self._last_ctrl_c_time = 0
55
56
  self.is_message_processing = False
56
57
  self.swap_enter = swap_enter
58
+ self._jumped_user_message = ""
57
59
 
58
60
  # Set up key bindings
59
61
  self.kb = self._setup_key_bindings()
@@ -80,7 +82,7 @@ class InputHandler:
80
82
  @kb.add(*newline_keys)
81
83
  def _(event):
82
84
  """Insert newline on Enter."""
83
- event.current_buffer.insert_text("\n")
85
+ event.current_buffer.insert_text(f"\n{PROMPT_CHAR}")
84
86
 
85
87
  @kb.add("escape", "c") # Alt+C
86
88
  def _(event):
@@ -185,14 +187,14 @@ class InputHandler:
185
187
  )
186
188
  time.sleep(0.2)
187
189
  self.clear_buffer()
188
- prompt = Text(" ", style=RICH_STYLE_BLUE)
190
+ prompt = Text(PROMPT_CHAR, style=RICH_STYLE_BLUE)
189
191
  self.console.print(prompt, end="")
190
192
 
191
193
  @kb.add(Keys.Backspace)
192
194
  def _(event):
193
195
  if not event.current_buffer.text:
194
196
  prompt = Text(
195
- " " if not self.is_message_processing else "",
197
+ PROMPT_CHAR if not self.is_message_processing else "",
196
198
  style=RICH_STYLE_BLUE,
197
199
  )
198
200
  if not self.is_message_processing:
@@ -206,7 +208,13 @@ class InputHandler:
206
208
  else:
207
209
  self.console.print("", end="\r")
208
210
  else:
209
- event.current_buffer.delete_before_cursor()
211
+ if (
212
+ event.current_buffer.text[-(len(PROMPT_CHAR) + 1) :]
213
+ == f"\n{PROMPT_CHAR}"
214
+ ):
215
+ event.current_buffer.delete_before_cursor((len(PROMPT_CHAR) + 1))
216
+ else:
217
+ event.current_buffer.delete_before_cursor()
210
218
 
211
219
  @kb.add(Keys.ControlUp)
212
220
  @kb.add(Keys.Escape, Keys.Up)
@@ -256,9 +264,14 @@ class InputHandler:
256
264
  def clear_buffer(self):
257
265
  if self._current_prompt_session:
258
266
  self._current_prompt_session.app.current_buffer.reset()
267
+ if self._jumped_user_message:
268
+ self._current_prompt_session.app.current_buffer.insert_text(
269
+ self._jumped_user_message
270
+ )
271
+ self._jumped_user_message = ""
259
272
  if not self.is_message_processing:
260
273
  self.display_handlers.print_divider("👤 YOU: ", with_time=True)
261
- self._current_prompt_session.message = HTML(" ")
274
+ self._current_prompt_session.message = HTML(PROMPT_CHAR)
262
275
  self._current_prompt_session.app.invalidate()
263
276
 
264
277
  def get_choice_input(self, message: str, values: list[str], default=None) -> str:
@@ -317,13 +330,19 @@ class InputHandler:
317
330
 
318
331
  if not self.is_message_processing:
319
332
  self.display_handlers.print_divider("👤 YOU: ", with_time=True)
320
- prompt_text = HTML(" ") if not self.is_message_processing else ""
333
+ prompt_text = (
334
+ HTML(PROMPT_CHAR) if not self.is_message_processing else ""
335
+ )
321
336
  user_input = session.prompt(prompt_text)
322
337
 
338
+ if not user_input:
339
+ continue
340
+
341
+ user_input = user_input.replace(f"\n{PROMPT_CHAR}", "\n")
342
+
323
343
  self.message_handler.history_manager.reset_position()
324
344
 
325
345
  self._input_queue.put(user_input)
326
- self.is_message_processing = True
327
346
 
328
347
  except KeyboardInterrupt:
329
348
  # Handle Ctrl+C in input thread
@@ -371,6 +390,9 @@ class InputHandler:
371
390
  pass
372
391
  self._input_thread.join(timeout=1.0)
373
392
 
393
+ def set_current_buffer(self, content: str):
394
+ self._jumped_user_message = content
395
+
374
396
  def get_user_input(self):
375
397
  """
376
398
  Get multiline input from the user with support for command history.
@@ -404,6 +426,7 @@ class InputHandler:
404
426
  # Add None check here
405
427
  if user_input is None:
406
428
  continue
429
+ self.is_message_processing = True
407
430
 
408
431
  self.display_handlers.print_divider()
409
432
 
@@ -107,6 +107,8 @@ class UIEffects:
107
107
  self.live = Live(
108
108
  live_panel,
109
109
  console=self.console,
110
+ auto_refresh=True,
111
+ refresh_per_second=8,
110
112
  vertical_overflow="crop",
111
113
  )
112
114
  self.live.start()
@@ -119,7 +121,8 @@ class UIEffects:
119
121
  self._visible_buffer = max(0, self._visible_buffer - speed)
120
122
  elif direction == "down":
121
123
  self._visible_buffer += speed
122
- self.update_live_display(self.updated_text)
124
+ if self.live:
125
+ self.update_live_display(self.updated_text)
123
126
 
124
127
  def update_live_display(self, chunk: str):
125
128
  """Update the live display with a new chunk of the response."""
@@ -131,12 +134,14 @@ class UIEffects:
131
134
 
132
135
  # Only show the last part that fits in the console
133
136
  lines = self.updated_text.split("\n")
134
- height_limit = (
135
- self.console.size.height - 10
136
- ) # leave some space for other elements
137
+ height_limit = int(self.console.size.height * 0.9)
137
138
  if len(lines) > height_limit:
138
- self.tracking_buffer = len(lines) - height_limit
139
- if self._visible_buffer == -1:
139
+ if (
140
+ self._visible_buffer == -1
141
+ or self._visible_buffer > len(lines) - height_limit
142
+ ):
143
+ self._tracking_buffer = len(lines) - height_limit
144
+ self._visible_buffer = -1
140
145
  lines = lines[-height_limit:]
141
146
  else:
142
147
  lines = lines[
@@ -161,6 +166,8 @@ class UIEffects:
161
166
  box=HORIZONTALS,
162
167
  subtitle=subtitle,
163
168
  title_align="left",
169
+ expand=False,
170
+ height=height_limit if len(lines) >= height_limit - 10 else None,
164
171
  border_style=RICH_STYLE_GREEN,
165
172
  )
166
173
  self.live.update(live_panel)
@@ -64,7 +64,7 @@ Auto syntax check (30+ langs) with rollback on error
64
64
 
65
65
  if provider == "claude":
66
66
  return {
67
- "name": "file_write_or_edit",
67
+ "name": "write_or_edit_file",
68
68
  "description": tool_description,
69
69
  "input_schema": {
70
70
  "type": "object",
@@ -76,7 +76,7 @@ Auto syntax check (30+ langs) with rollback on error
76
76
  return {
77
77
  "type": "function",
78
78
  "function": {
79
- "name": "file_write_or_edit",
79
+ "name": "write_or_edit_file",
80
80
  "description": tool_description,
81
81
  "parameters": {
82
82
  "type": "object",
@@ -51,7 +51,34 @@ _OPENAI_MODELS = [
51
51
  capabilities=["tool_use", "vision", "thinking", "stream", "structured_output"],
52
52
  input_token_price_1m=1.25,
53
53
  output_token_price_1m=10,
54
- default=True,
54
+ ),
55
+ Model(
56
+ id="gpt-5.1",
57
+ provider="openai",
58
+ name="GPT-5.1",
59
+ description="GPT-5 is our flagship model for coding, reasoning, and agentic tasks across domains",
60
+ capabilities=["tool_use", "vision", "thinking", "stream", "structured_output"],
61
+ max_context_token=400_000,
62
+ input_token_price_1m=1.25,
63
+ output_token_price_1m=10,
64
+ ),
65
+ Model(
66
+ id="gpt-5.1-codex",
67
+ provider="openai",
68
+ name="GPT-5.1 Codex",
69
+ description="GPT-5-Codex is a version of GPT-5 optimized for agentic coding tasks in Codex or similar environments",
70
+ capabilities=["tool_use", "vision", "thinking", "stream", "structured_output"],
71
+ input_token_price_1m=1.25,
72
+ output_token_price_1m=10,
73
+ ),
74
+ Model(
75
+ id="gpt-5.1-codex-mini",
76
+ provider="openai",
77
+ name="GPT-5.1 Codex Mini",
78
+ description="GPT-5-Codex is a version of GPT-5 optimized for agentic coding tasks in Codex or similar environments",
79
+ capabilities=["tool_use", "vision", "thinking", "stream", "structured_output"],
80
+ input_token_price_1m=0.25,
81
+ output_token_price_1m=2.0,
55
82
  ),
56
83
  Model(
57
84
  id="gpt-4.1-mini",
@@ -61,7 +88,6 @@ _OPENAI_MODELS = [
61
88
  capabilities=["tool_use", "vision", "stream", "structured_output"],
62
89
  input_token_price_1m=0.15,
63
90
  output_token_price_1m=0.6,
64
- default=True,
65
91
  ),
66
92
  Model(
67
93
  id="gpt-4.1",
@@ -71,7 +97,6 @@ _OPENAI_MODELS = [
71
97
  capabilities=["tool_use", "vision", "stream", "structured_output"],
72
98
  input_token_price_1m=2,
73
99
  output_token_price_1m=8,
74
- default=True,
75
100
  ),
76
101
  Model(
77
102
  id="o3-mini",
@@ -378,6 +403,40 @@ _GITHUB_COPILOT_MODELS = [
378
403
  input_token_price_1m=0.0,
379
404
  output_token_price_1m=0.0,
380
405
  ),
406
+ Model(
407
+ id="gpt-5.1",
408
+ provider="github_copilot",
409
+ name="GPT 5.1",
410
+ description="",
411
+ capabilities=["tool_use", "vision", "stream", "structured_output"],
412
+ max_context_token=264_000,
413
+ default=False,
414
+ input_token_price_1m=0.0,
415
+ output_token_price_1m=0.0,
416
+ ),
417
+ Model(
418
+ id="gpt-5.1-codex",
419
+ provider="copilot_response",
420
+ name="GPT 5 Codex",
421
+ description="",
422
+ capabilities=["tool_use", "vision", "stream", "structured_output"],
423
+ max_context_token=400_000,
424
+ default=False,
425
+ input_token_price_1m=0.0,
426
+ output_token_price_1m=0.0,
427
+ endpoint="response",
428
+ ),
429
+ Model(
430
+ id="gpt-5.1-codex-mini",
431
+ provider="github_copilot",
432
+ name="GPT 5 mini",
433
+ description="",
434
+ capabilities=["tool_use", "vision", "stream", "thinking", "structured_output"],
435
+ default=False,
436
+ input_token_price_1m=0.0,
437
+ output_token_price_1m=0.0,
438
+ endpoint="response",
439
+ ),
381
440
  Model(
382
441
  id="oswe-vscode-prime",
383
442
  provider="github_copilot",
@@ -444,7 +444,7 @@ class MCPService:
444
444
  Formatted tool definition
445
445
  """
446
446
  # Create namespaced tool name
447
- namespaced_name = f"{server_id}_{tool.name}"
447
+ namespaced_name = f"{server_id}__{tool.name}"
448
448
 
449
449
  from jsonref import replace_refs
450
450
  import json
@@ -87,6 +87,25 @@ class BaseMemoryService(ABC):
87
87
  """
88
88
  pass
89
89
 
90
+ @abstractmethod
91
+ def list_memory_ids(
92
+ self,
93
+ from_date: Optional[int] = None,
94
+ to_date: Optional[int] = None,
95
+ agent_name: str = "None",
96
+ ) -> List[str]:
97
+ """
98
+ List all memory IDs within an optional date range.
99
+
100
+ Args:
101
+ from_date: Optional start date (timestamp) to filter memories
102
+ to_date: Optional end date (timestamp) to filter memories
103
+
104
+ Returns:
105
+ List of memory IDs
106
+ """
107
+ pass
108
+
90
109
  @abstractmethod
91
110
  def cleanup_old_memories(self, months: int = 1) -> int:
92
111
  """
@@ -425,6 +425,35 @@ class ChromaMemoryService(BaseMemoryService):
425
425
  else:
426
426
  return input
427
427
 
428
+ def list_memory_ids(
429
+ self,
430
+ from_date: Optional[int] = None,
431
+ to_date: Optional[int] = None,
432
+ agent_name: str = "None",
433
+ ) -> List[str]:
434
+ collection = self._initialize_collection()
435
+
436
+ and_conditions: List[Dict[str, Any]] = []
437
+
438
+ if self.session_id.strip():
439
+ and_conditions.append({"session_id": {"$ne": self.session_id}})
440
+ if agent_name.strip():
441
+ and_conditions.append({"agent": agent_name})
442
+ if from_date:
443
+ and_conditions.append({"date": {"$gte": from_date}})
444
+ if to_date:
445
+ and_conditions.append({"date": {"$lte": to_date}})
446
+
447
+ list_memory = collection.get(
448
+ where={"$and": and_conditions}
449
+ if len(and_conditions) >= 2
450
+ else and_conditions[0]
451
+ if and_conditions
452
+ else None,
453
+ include=[],
454
+ )
455
+ return list_memory["ids"]
456
+
428
457
  def retrieve_memory(
429
458
  self,
430
459
  keywords: str,
@@ -451,7 +480,6 @@ class ChromaMemoryService(BaseMemoryService):
451
480
  and_conditions.append({"session_id": {"$ne": self.session_id}})
452
481
  if agent_name.strip():
453
482
  and_conditions.append({"agent": agent_name})
454
-
455
483
  if from_date:
456
484
  and_conditions.append({"date": {"$gte": from_date}})
457
485
  if to_date:
@@ -329,7 +329,9 @@ class ContextPersistenceService:
329
329
  # listdir raises OSError if the directory is invalid
330
330
  filenames = os.listdir(self.conversations_dir)
331
331
  for filename in filenames:
332
- if filename.endswith(".json"):
332
+ if filename.endswith(".json") and not filename.endswith(
333
+ ".metadata.json"
334
+ ):
333
335
  conversation_id = filename[:-5] # Remove .json extension
334
336
  file_path = os.path.join(self.conversations_dir, filename)
335
337
  try: