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.
- agentcrew_ai-0.8.2/AgentCrew/__init__.py +1 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/service.py +9 -2
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/tool.py +16 -16
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/message/command_processor.py +17 -1
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/clipboard/tool.py +2 -2
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/console_ui.py +10 -2
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/constants.py +1 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/display_handlers.py +1 -1
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/input_handler.py +30 -7
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/ui_effects.py +13 -6
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/file_editing/tool.py +2 -2
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/llm/constants.py +62 -3
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/mcpclient/service.py +1 -1
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/base_service.py +19 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/chroma_service.py +29 -1
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/context_persistent.py +3 -1
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/tool.py +30 -61
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/web_search/tool.py +2 -2
- {agentcrew_ai-0.8.0/agentcrew_ai.egg-info → agentcrew_ai-0.8.2}/PKG-INFO +1 -1
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2/agentcrew_ai.egg-info}/PKG-INFO +1 -1
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/pyproject.toml +1 -1
- agentcrew_ai-0.8.0/AgentCrew/__init__.py +0 -1
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/app.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/assets/agentcrew_logo.png +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/main.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/main_docker.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/adapters.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/agent_cards.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/client/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/client/card_resolver.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/client/client.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/server/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/server/auth_middleware.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/server/task_manager.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/common/server/utils.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/registry.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/server.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/a2a/task_manager.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/base.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/example.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/local_agent.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/manager.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/remote_agent.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/tools/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/tools/ask.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/tools/delegate.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/agents/tools/transfer.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/anthropic/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/anthropic/service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/chrome_manager.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/element_extractor.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/click_element.js +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/extract_clickable_elements.js +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/extract_elements_by_text.js +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/extract_input_elements.js +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/extract_scrollable_elements.js +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/focus_and_clear_element.js +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/scroll_page.js +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js/trigger_input_events.js +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/browser_automation/js_loader.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/consolidation.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/file_handler.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/history.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/message/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/message/base.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/message/conversation.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/message/handler.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/message/tool_manager.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/message_handler.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/clipboard/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/clipboard/service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/code_analysis/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/code_analysis/service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/code_analysis/tool.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/command_execution/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/command_execution/constants.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/command_execution/metric.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/command_execution/service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/command_execution/tool.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/command_execution/types.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/config/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/config/config_management.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/command_handlers.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/completers.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/confirmation_handler.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/conversation_handler.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/tool_display.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/console/utils.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/custom_llm/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/custom_llm/copilot_response_service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/custom_llm/deepinfra_service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/custom_llm/github_copilot_service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/custom_llm/service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/file_editing/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/file_editing/safety_validator.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/file_editing/search_replace_engine.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/file_editing/service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/file_editing/tree_sitter_checker.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/google/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/google/native_service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/google/service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/groq/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/groq/service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/chat_components.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/command_handler.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/completers.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/conversation_components.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/input_components.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/keyboard_handler.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/menu_components.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/message_handlers.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/tool_handlers.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/components/ui_state_manager.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/qt_ui.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/README.md +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/atom_light.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/catppuccin.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/dracula.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/nord.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/saigontech.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/style_provider.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/themes/unicorn.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/utils/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/utils/macos_clipboard.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/utils/strings.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/utils/wins_clipboard.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/config_window.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/configs/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/configs/agent_config.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/configs/custom_llm_provider.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/configs/global_settings.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/configs/mcp_config.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/configs/save_worker.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/history_sidebar.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/json_editor.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/loading_overlay.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/markdown_editor.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/message_bubble.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/paste_aware_textedit.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/system_message.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/token_usage.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/widgets/tool_widget.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/gui/worker.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/image_generation/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/image_generation/service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/image_generation/tool.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/llm/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/llm/base.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/llm/model_registry.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/llm/service_manager.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/llm/types.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/mcpclient/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/mcpclient/auth.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/mcpclient/config.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/mcpclient/manager.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/mcpclient/tool.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/github_copilot_ef.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/google_genai_ef.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/memory/voyageai_ef.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/openai/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/openai/response_service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/openai/service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/prompts/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/prompts/constants.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/tools/README.md +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/tools/registration.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/tools/registry.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/voice/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/voice/audio_handler.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/voice/base.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/voice/deepinfra_service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/voice/elevenlabs_service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/voice/text_cleaner.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/web_search/__init__.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/web_search/service.py +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/CONTRIBUTING.md +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/LICENSE +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/MANIFEST.in +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/README.md +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/agentcrew_ai.egg-info/SOURCES.txt +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/agentcrew_ai.egg-info/dependency_links.txt +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/agentcrew_ai.egg-info/entry_points.txt +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/agentcrew_ai.egg-info/requires.txt +0 -0
- {agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/agentcrew_ai.egg-info/top_level.txt +0 -0
- {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[
|
|
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
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
587
|
+
"name": "send_browser_key",
|
|
588
588
|
"description": tool_description,
|
|
589
589
|
"parameters": {
|
|
590
590
|
"type": "object",
|
{agentcrew_ai-0.8.0 → agentcrew_ai-0.8.2}/AgentCrew/modules/chat/message/command_processor.py
RENAMED
|
@@ -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
|
-
{
|
|
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": "
|
|
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": "
|
|
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
|
|
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
|
|
|
@@ -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(
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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.
|
|
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
|
-
|
|
139
|
-
|
|
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": "
|
|
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": "
|
|
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
|
-
|
|
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",
|
|
@@ -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:
|