realtimex-deeptutor 0.5.0.post3__tar.gz → 0.5.0.post4__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.
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/PKG-INFO +1 -1
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/pyproject.toml +1 -1
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/realtimex_deeptutor.egg-info/PKG-INFO +1 -1
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/scripts/start_web.py +205 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/cli/start.py +1 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/LICENSE +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/README.md +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/realtimex_deeptutor/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/realtimex_deeptutor.egg-info/SOURCES.txt +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/realtimex_deeptutor.egg-info/dependency_links.txt +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/realtimex_deeptutor.egg-info/entry_points.txt +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/realtimex_deeptutor.egg-info/requires.txt +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/realtimex_deeptutor.egg-info/top_level.txt +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/scripts/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/scripts/audit_prompts.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/scripts/check_install.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/scripts/generate_roster.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/scripts/install_all.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/scripts/migrate_kb.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/scripts/start.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/scripts/sync_prompts_from_en.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/setup.cfg +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/base_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/chat/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/chat/chat_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/chat/prompts/en/chat_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/chat/prompts/zh/chat_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/chat/session_manager.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/co_writer/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/co_writer/edit_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/co_writer/narrator_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/co_writer/prompts/en/edit_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/co_writer/prompts/en/narrator_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/co_writer/prompts/zh/edit_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/co_writer/prompts/zh/narrator_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/agents/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/agents/chat_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/agents/interactive_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/agents/locate_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/agents/summary_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/guide_manager.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/prompts/en/chat_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/prompts/en/interactive_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/prompts/en/locate_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/prompts/en/summary_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/prompts/zh/chat_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/prompts/zh/interactive_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/prompts/zh/locate_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/prompts/zh/summary_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/ideagen/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/ideagen/idea_generation_workflow.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/ideagen/material_organizer_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/ideagen/prompts/en/idea_generation.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/ideagen/prompts/en/material_organizer.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/ideagen/prompts/zh/idea_generation.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/ideagen/prompts/zh/material_organizer.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/agents/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/agents/generate_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/agents/relevance_analyzer.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/agents/retrieve_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/coordinator.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/example.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/prompts/en/coordinator.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/prompts/en/generate_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/prompts/en/relevance_analyzer.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/prompts/en/retrieve_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/prompts/zh/coordinator.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/prompts/zh/generate_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/prompts/zh/relevance_analyzer.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/prompts/zh/retrieve_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/agents/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/agents/decompose_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/agents/manager_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/agents/note_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/agents/rephrase_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/agents/reporting_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/agents/research_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/data_structures.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/main.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/prompts/en/decompose_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/prompts/en/manager_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/prompts/en/note_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/prompts/en/rephrase_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/prompts/en/reporting_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/prompts/en/research_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/prompts/zh/decompose_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/prompts/zh/manager_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/prompts/zh/note_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/prompts/zh/rephrase_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/prompts/zh/reporting_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/prompts/zh/research_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/research_pipeline.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/utils/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/utils/citation_manager.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/utils/json_utils.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/utils/token_tracker.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/analysis_loop/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/analysis_loop/investigate_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/analysis_loop/note_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/main_solver.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/memory/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/memory/citation_memory.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/memory/investigate_memory.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/memory/solve_memory.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/prompts/en/analysis_loop/investigate_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/prompts/en/analysis_loop/note_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/prompts/en/solve_loop/manager_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/prompts/en/solve_loop/precision_answer_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/prompts/en/solve_loop/response_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/prompts/en/solve_loop/solve_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/prompts/en/solve_loop/tool_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/prompts/zh/analysis_loop/investigate_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/prompts/zh/analysis_loop/note_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/prompts/zh/solve_loop/manager_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/prompts/zh/solve_loop/precision_answer_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/prompts/zh/solve_loop/response_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/prompts/zh/solve_loop/solve_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/prompts/zh/solve_loop/tool_agent.yaml +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/session_manager.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/solve_loop/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/solve_loop/citation_manager.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/solve_loop/manager_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/solve_loop/precision_answer_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/solve_loop/response_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/solve_loop/solve_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/solve_loop/tool_agent.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/utils/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/utils/config_validator.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/utils/display_manager.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/utils/error_handler.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/utils/json_utils.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/utils/performance_monitor.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/utils/token_tracker.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/main.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/agent_config.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/chat.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/co_writer.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/config.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/dashboard.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/guide.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/ideagen.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/knowledge.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/notebook.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/question.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/realtimex.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/research.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/settings.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/solve.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/system.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/run_server.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/utils/history.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/utils/log_interceptor.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/utils/notebook_manager.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/utils/progress_broadcaster.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/utils/task_id_manager.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/cli/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/config/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/config/accessors.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/config/constants.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/config/defaults.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/config/schema.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/config/settings.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/core/errors.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/knowledge/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/knowledge/add_documents.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/knowledge/config.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/knowledge/example_add_documents.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/knowledge/extract_numbered_items.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/knowledge/initializer.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/knowledge/kb.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/knowledge/manager.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/knowledge/progress_tracker.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/knowledge/start_kb.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/logging/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/logging/adapters/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/logging/adapters/lightrag.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/logging/adapters/llamaindex.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/logging/config.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/logging/handlers/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/logging/handlers/console.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/logging/handlers/file.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/logging/handlers/websocket.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/logging/logger.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/logging/stats/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/logging/stats/llm_stats.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/config/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/config/knowledge_base_config.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/config/loader.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/config/unified_config.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/embedding/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/embedding/adapters/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/embedding/adapters/base.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/embedding/adapters/cohere.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/embedding/adapters/jina.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/embedding/adapters/ollama.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/embedding/adapters/openai_compatible.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/embedding/adapters/realtimex.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/embedding/client.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/embedding/config.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/embedding/provider.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/capabilities.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/client.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/cloud_provider.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/config.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/error_mapping.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/exceptions.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/factory.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/local_provider.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/providers/anthropic.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/providers/base_provider.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/providers/open_ai.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/realtimex_provider.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/registry.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/telemetry.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/types.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/llm/utils.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/prompt/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/prompt/manager.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/base.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/chunkers/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/chunkers/base.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/chunkers/fixed.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/chunkers/numbered_item.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/chunkers/semantic.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/embedders/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/embedders/base.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/embedders/openai.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/indexers/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/indexers/base.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/indexers/graph.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/indexers/lightrag.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/indexers/vector.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/parsers/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/parsers/base.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/parsers/markdown.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/parsers/pdf.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/parsers/text.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/retrievers/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/retrievers/base.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/retrievers/dense.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/retrievers/hybrid.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/retrievers/lightrag.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/components/routing.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/factory.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/pipeline.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/pipelines/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/pipelines/lightrag.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/pipelines/llamaindex.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/pipelines/raganything.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/pipelines/raganything_docling.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/service.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/types.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/utils/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/rag/utils/image_migration.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/search/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/search/base.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/search/consolidation.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/search/providers/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/search/providers/baidu.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/search/providers/exa.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/search/providers/jina.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/search/providers/perplexity.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/search/providers/serper.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/search/providers/tavily.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/search/types.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/settings/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/settings/interface_settings.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/setup/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/setup/init.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/tts/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/services/tts/config.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/tools/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/tools/code_executor.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/tools/paper_search_tool.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/tools/query_item_tool.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/tools/question/__init__.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/tools/question/exam_mimic.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/tools/question/pdf_parser.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/tools/question/question_extractor.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/tools/rag_tool.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/tools/tex_chunker.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/tools/tex_downloader.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/tools/web_search.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/utils/config_manager.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/utils/document_validator.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/utils/error_rate_tracker.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/utils/error_utils.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/utils/json_parser.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/utils/network/circuit_breaker.py +0 -0
- {realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/utils/realtimex.py +0 -0
|
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "realtimex-deeptutor"
|
|
10
|
-
version = "0.5.0.
|
|
10
|
+
version = "0.5.0.post4"
|
|
11
11
|
description = "RealTimeX DeepTutor - Intelligent learning companion with multi-agent collaboration and LightRAG"
|
|
12
12
|
requires-python = ">=3.10"
|
|
13
13
|
readme = "README.md"
|
|
@@ -69,6 +69,194 @@ else:
|
|
|
69
69
|
return False
|
|
70
70
|
|
|
71
71
|
|
|
72
|
+
def check_port_in_use(port: int) -> tuple[bool, int | None]:
|
|
73
|
+
"""
|
|
74
|
+
Check if a port is in use and return the PID of the process using it.
|
|
75
|
+
|
|
76
|
+
Uses connect test to check if something is actually LISTENING on the port,
|
|
77
|
+
rather than bind test which fails for TIME_WAIT state.
|
|
78
|
+
|
|
79
|
+
Args:
|
|
80
|
+
port: Port number to check
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
Tuple of (is_in_use, pid_or_none)
|
|
84
|
+
"""
|
|
85
|
+
import socket
|
|
86
|
+
|
|
87
|
+
# Use connect test to check if something is actually listening
|
|
88
|
+
# This avoids false positives from TIME_WAIT state
|
|
89
|
+
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
90
|
+
sock.settimeout(1)
|
|
91
|
+
try:
|
|
92
|
+
result = sock.connect_ex(("localhost", port))
|
|
93
|
+
if result != 0:
|
|
94
|
+
# Connection refused = nothing listening = port is free
|
|
95
|
+
return False, None
|
|
96
|
+
except (OSError, socket.timeout):
|
|
97
|
+
# Connection failed = port is free
|
|
98
|
+
return False, None
|
|
99
|
+
finally:
|
|
100
|
+
try:
|
|
101
|
+
sock.close()
|
|
102
|
+
except Exception:
|
|
103
|
+
pass
|
|
104
|
+
|
|
105
|
+
# Port is in use (connection succeeded), try to find the PID
|
|
106
|
+
pid = None
|
|
107
|
+
try:
|
|
108
|
+
if os.name == "nt":
|
|
109
|
+
# Windows: use netstat
|
|
110
|
+
result = subprocess.run(
|
|
111
|
+
["netstat", "-ano"],
|
|
112
|
+
capture_output=True,
|
|
113
|
+
text=True,
|
|
114
|
+
timeout=5,
|
|
115
|
+
)
|
|
116
|
+
for line in result.stdout.splitlines():
|
|
117
|
+
if f":{port}" in line and "LISTENING" in line:
|
|
118
|
+
parts = line.split()
|
|
119
|
+
if parts:
|
|
120
|
+
try:
|
|
121
|
+
pid = int(parts[-1])
|
|
122
|
+
break
|
|
123
|
+
except ValueError:
|
|
124
|
+
pass
|
|
125
|
+
else:
|
|
126
|
+
# Unix: use lsof
|
|
127
|
+
result = subprocess.run(
|
|
128
|
+
["lsof", "-ti", f":{port}"],
|
|
129
|
+
capture_output=True,
|
|
130
|
+
text=True,
|
|
131
|
+
timeout=5,
|
|
132
|
+
)
|
|
133
|
+
if result.returncode == 0 and result.stdout.strip():
|
|
134
|
+
# May return multiple PIDs, take the first one
|
|
135
|
+
try:
|
|
136
|
+
pid = int(result.stdout.strip().split()[0])
|
|
137
|
+
except (ValueError, IndexError):
|
|
138
|
+
pass
|
|
139
|
+
except Exception:
|
|
140
|
+
pass
|
|
141
|
+
|
|
142
|
+
return True, pid
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def kill_process_on_port(port: int, force: bool = False) -> bool:
|
|
146
|
+
"""
|
|
147
|
+
Kill the process using a specific port.
|
|
148
|
+
|
|
149
|
+
Args:
|
|
150
|
+
port: Port number
|
|
151
|
+
force: If True, use SIGKILL instead of SIGTERM
|
|
152
|
+
|
|
153
|
+
Returns:
|
|
154
|
+
True if process was killed successfully
|
|
155
|
+
"""
|
|
156
|
+
in_use, pid = check_port_in_use(port)
|
|
157
|
+
if not in_use:
|
|
158
|
+
return True # Port is free
|
|
159
|
+
|
|
160
|
+
if pid is None:
|
|
161
|
+
print_flush(f"⚠️ Port {port} is in use but couldn't identify the process")
|
|
162
|
+
return False
|
|
163
|
+
|
|
164
|
+
print_flush(f" Stopping process {pid} on port {port}...")
|
|
165
|
+
|
|
166
|
+
try:
|
|
167
|
+
if os.name == "nt":
|
|
168
|
+
subprocess.run(["taskkill", "/F", "/PID", str(pid)], check=True, capture_output=True)
|
|
169
|
+
else:
|
|
170
|
+
sig = signal.SIGKILL if force else signal.SIGTERM
|
|
171
|
+
os.kill(pid, sig)
|
|
172
|
+
# Wait a moment for process to terminate
|
|
173
|
+
time.sleep(0.5)
|
|
174
|
+
# Check if still running, force kill if needed
|
|
175
|
+
if not force:
|
|
176
|
+
try:
|
|
177
|
+
os.kill(pid, 0) # Check if process exists
|
|
178
|
+
os.kill(pid, signal.SIGKILL)
|
|
179
|
+
time.sleep(0.3)
|
|
180
|
+
except ProcessLookupError:
|
|
181
|
+
pass # Process already terminated
|
|
182
|
+
|
|
183
|
+
# Verify port is now free
|
|
184
|
+
time.sleep(0.3)
|
|
185
|
+
in_use, _ = check_port_in_use(port)
|
|
186
|
+
if not in_use:
|
|
187
|
+
print_flush(f"✅ Port {port} is now free")
|
|
188
|
+
return True
|
|
189
|
+
else:
|
|
190
|
+
print_flush(f"⚠️ Port {port} still in use after killing process")
|
|
191
|
+
return False
|
|
192
|
+
|
|
193
|
+
except Exception as e:
|
|
194
|
+
print_flush(f"❌ Failed to kill process {pid}: {e}")
|
|
195
|
+
return False
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
def ensure_ports_available(backend_port: int, frontend_port: int, auto_kill: bool = False) -> bool:
|
|
199
|
+
"""
|
|
200
|
+
Ensure required ports are available, optionally killing existing processes.
|
|
201
|
+
|
|
202
|
+
Args:
|
|
203
|
+
backend_port: Backend port number
|
|
204
|
+
frontend_port: Frontend port number
|
|
205
|
+
auto_kill: If True, automatically kill processes using the ports
|
|
206
|
+
|
|
207
|
+
Returns:
|
|
208
|
+
True if all ports are available
|
|
209
|
+
"""
|
|
210
|
+
ports_to_check = [
|
|
211
|
+
(backend_port, "Backend"),
|
|
212
|
+
(frontend_port, "Frontend"),
|
|
213
|
+
]
|
|
214
|
+
|
|
215
|
+
conflicts = []
|
|
216
|
+
for port, name in ports_to_check:
|
|
217
|
+
in_use, pid = check_port_in_use(port)
|
|
218
|
+
if in_use:
|
|
219
|
+
conflicts.append((port, name, pid))
|
|
220
|
+
|
|
221
|
+
if not conflicts:
|
|
222
|
+
return True
|
|
223
|
+
|
|
224
|
+
print_flush("")
|
|
225
|
+
print_flush("⚠️ Port conflict detected:")
|
|
226
|
+
for port, name, pid in conflicts:
|
|
227
|
+
pid_info = f" (PID: {pid})" if pid else ""
|
|
228
|
+
print_flush(f" - {name} port {port} is already in use{pid_info}")
|
|
229
|
+
|
|
230
|
+
if auto_kill:
|
|
231
|
+
print_flush("")
|
|
232
|
+
print_flush("🔄 AUTO_KILL_PORTS is enabled, cleaning up...")
|
|
233
|
+
all_freed = True
|
|
234
|
+
for port, name, _ in conflicts:
|
|
235
|
+
if not kill_process_on_port(port):
|
|
236
|
+
all_freed = False
|
|
237
|
+
return all_freed
|
|
238
|
+
else:
|
|
239
|
+
print_flush("")
|
|
240
|
+
print_flush("💡 To resolve this, you can either:")
|
|
241
|
+
print_flush(" 1. Set AUTO_KILL_PORTS=true to automatically clean up")
|
|
242
|
+
print_flush(" 2. Manually kill the processes:")
|
|
243
|
+
for port, name, pid in conflicts:
|
|
244
|
+
if pid:
|
|
245
|
+
if os.name == "nt":
|
|
246
|
+
print_flush(f" taskkill /F /PID {pid}")
|
|
247
|
+
else:
|
|
248
|
+
print_flush(f" kill -9 {pid}")
|
|
249
|
+
else:
|
|
250
|
+
if os.name == "nt":
|
|
251
|
+
print_flush(f" netstat -ano | findstr :{port}")
|
|
252
|
+
else:
|
|
253
|
+
print_flush(f" lsof -ti :{port} | xargs kill -9")
|
|
254
|
+
print_flush(" 3. Use different ports via environment variables:")
|
|
255
|
+
print_flush(" BACKEND_PORT=8002 FRONTEND_PORT=3783 uvx realtimex-deeptutor")
|
|
256
|
+
print_flush("")
|
|
257
|
+
return False
|
|
258
|
+
|
|
259
|
+
|
|
72
260
|
def terminate_process_tree(process, name="Process", timeout=5):
|
|
73
261
|
"""
|
|
74
262
|
Terminate a process and all its children (process group).
|
|
@@ -541,6 +729,23 @@ if __name__ == "__main__":
|
|
|
541
729
|
print_flush(f"⚠️ Warning: Failed to initialize user directories: {e}")
|
|
542
730
|
print_flush(" Continuing anyway...")
|
|
543
731
|
|
|
732
|
+
# Check for port conflicts before starting services
|
|
733
|
+
try:
|
|
734
|
+
from pathlib import Path
|
|
735
|
+
|
|
736
|
+
from src.services.setup import get_ports
|
|
737
|
+
|
|
738
|
+
backend_port, frontend_port = get_ports(
|
|
739
|
+
Path(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
740
|
+
)
|
|
741
|
+
|
|
742
|
+
auto_kill = os.environ.get("AUTO_KILL_PORTS", "").lower() in ("true", "1", "yes")
|
|
743
|
+
if not ensure_ports_available(backend_port, frontend_port, auto_kill=auto_kill):
|
|
744
|
+
sys.exit(1)
|
|
745
|
+
except Exception as e:
|
|
746
|
+
print_flush(f"⚠️ Warning: Failed to check ports: {e}")
|
|
747
|
+
print_flush(" Continuing anyway...")
|
|
748
|
+
|
|
544
749
|
backend = None
|
|
545
750
|
frontend = None
|
|
546
751
|
|
|
@@ -39,6 +39,7 @@ Examples:
|
|
|
39
39
|
Environment Variables:
|
|
40
40
|
FRONTEND_PORT Frontend port (default: 3782)
|
|
41
41
|
BACKEND_PORT Backend port (default: 8001)
|
|
42
|
+
AUTO_KILL_PORTS Auto-kill processes using required ports (default: false)
|
|
42
43
|
RTX_APP_ID RealTimeX App ID (auto-detected)
|
|
43
44
|
API_BASE_URL Backend API URL (auto-configured)
|
|
44
45
|
LOG_LEVEL Logging level (DEBUG, INFO, WARNING, ERROR)
|
|
File without changes
|
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/realtimex_deeptutor/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/scripts/audit_prompts.py
RENAMED
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/scripts/check_install.py
RENAMED
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/scripts/generate_roster.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/scripts/sync_prompts_from_en.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/base_agent.py
RENAMED
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/chat/__init__.py
RENAMED
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/chat/chat_agent.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/co_writer/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/guide/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/ideagen/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/question/example.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/research/main.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/agents/solve/main_solver.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/__init__.py
RENAMED
|
File without changes
|
{realtimex_deeptutor-0.5.0.post3 → realtimex_deeptutor-0.5.0.post4}/src/api/routers/agent_config.py
RENAMED
|
File without changes
|