auto-coder 0.1.382__tar.gz → 0.1.383__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.
Potentially problematic release.
This version of auto-coder might be problematic. Click here for more details.
- {auto_coder-0.1.382 → auto_coder-0.1.383}/PKG-INFO +1 -1
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/auto_coder.egg-info/PKG-INFO +1 -1
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/auto_coder.egg-info/SOURCES.txt +3 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/auto_coder_runner.py +61 -1
- auto_coder-0.1.383/src/autocoder/common/llm_friendly_package.py +410 -0
- auto_coder-0.1.383/src/autocoder/common/llm_friendly_package_example.py +138 -0
- auto_coder-0.1.383/src/autocoder/common/llm_friendly_package_test.py +63 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit.py +69 -2
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/operate_config_api.py +14 -38
- auto_coder-0.1.383/src/autocoder/version.py +2 -0
- auto_coder-0.1.382/src/autocoder/version.py +0 -2
- {auto_coder-0.1.382 → auto_coder-0.1.383}/LICENSE +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/README.md +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/setup.cfg +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/setup.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/auto_coder.egg-info/dependency_links.txt +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/auto_coder.egg-info/entry_points.txt +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/auto_coder.egg-info/requires.txt +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/auto_coder.egg-info/top_level.txt +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/agentic_filter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/auto_demand_organizer.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/auto_filegroup.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/auto_guess_query.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/auto_learn.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/auto_review_commit.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/auto_tool.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/agent_hub.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/agentic_lang.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/agentic_tool_display.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/base_agent.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/default_tools.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/test_base_agent.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tool_registry.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tools/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tools/ask_followup_question_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tools/attempt_completion_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tools/base_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tools/example_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tools/execute_command_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tools/list_files_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tools/plan_mode_respond_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tools/replace_in_file_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tools/search_files_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tools/talk_to_group_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tools/talk_to_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tools/use_mcp_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/types.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/base_agentic/utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/coder.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/designer.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/planner.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/agent/project_reader.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/auto_coder.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/auto_coder_rag.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/auto_coder_server.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/benchmark.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/chat/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/chat/conf_command.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/chat/models_command.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/chat/rules_command.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/chat_auto_coder.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/chat_auto_coder_lang.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/command_args.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/command_parser.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/commands/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/commands/auto_command.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/commands/auto_web.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/commands/tools.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/JupyterClient.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/ShellClient.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/action_yml_file_manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/anything2images.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/anything2img.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/audio.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/auto_coder_lang.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/auto_configure.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/buildin_tokenizer.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/chunk_validation.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/cleaner.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/code_auto_execute.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/code_auto_generate.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/code_auto_generate_diff.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/code_auto_merge.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/code_auto_merge_diff.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/code_modification_ranker.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/command_completer.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/command_completer_v2.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/command_file_manager/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/command_file_manager/examples.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/command_file_manager/manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/command_file_manager/models.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/command_file_manager/utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/command_generator.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/command_templates.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/computer_use.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/conf_import_export.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/conf_utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/conf_validator.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/const.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/context_pruner.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/conversation_pruner.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/conversations/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/conversations/compatibility.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/conversations/conversation_manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/conversations/example.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/directory_cache/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/directory_cache/cache.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/directory_cache/test_cache.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/file_checkpoint/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/file_checkpoint/backup.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/file_checkpoint/conversation_checkpoint.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/file_checkpoint/examples.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/file_checkpoint/manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/file_checkpoint/models.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/file_checkpoint/store.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/file_checkpoint/test_backup.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/file_checkpoint/test_manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/file_checkpoint/test_models.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/file_checkpoint/test_store.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/file_checkpoint/test_utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/file_checkpoint/utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/file_monitor/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/file_monitor/monitor.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/files.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/git_utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/global_cancel.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/ignorefiles/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/ignorefiles/ignore_file_utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/ignorefiles/test_ignore_file_utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/image_to_page.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/index_import_export.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/interpreter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/mcp_hub.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/mcp_server.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/mcp_server_install.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/mcp_server_types.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/mcp_servers/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/mcp_tools.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/memory_manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/model_speed_tester.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/openai_content.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/printer.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/recall_validation.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/result_manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/rulefiles/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/rulefiles/autocoderrules_utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/run_cmd.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/save_formatted_log.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/screenshots.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/search.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/search_replace.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/shells.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/stats_panel.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/stream_out_type.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/sys_prompt.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/test_run_cmd.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/text.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/token_cost_caculate.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/types.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/utils_code_auto_generate.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/attempt_completion_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_edit_types.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/agent/agentic_tool_display.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/code_agentic_editblock_manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/code_auto_generate.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/code_auto_generate_diff.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/code_auto_generate_editblock.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/code_auto_generate_strict_diff.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/code_auto_merge.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/code_auto_merge_diff.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/code_auto_merge_editblock.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/code_auto_merge_strict_diff.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/code_diff_manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/code_editblock_manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/code_manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/common/v2/code_strict_diff_manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/compilers/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/compilers/base_compiler.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/compilers/compiler_config_api.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/compilers/compiler_config_manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/compilers/compiler_factory.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/compilers/java_compiler.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/compilers/models.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/compilers/normal_compiler.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/compilers/provided_compiler.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/compilers/python_compiler.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/compilers/reactjs_compiler.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/compilers/shadow_compiler.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/compilers/vue_compiler.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/data/byzerllm.md +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/data/tokenizer.json +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/db/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/db/store.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/dispacher/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/dispacher/actions/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/dispacher/actions/action.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/dispacher/actions/copilot.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/events/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/events/event_content.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/events/event_manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/events/event_manager_singleton.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/events/event_store.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/events/event_types.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/helper/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/helper/project_creator.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/helper/rag_doc_creator.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/index/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/index/entry.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/index/filter/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/index/filter/normal_filter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/index/filter/quick_filter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/index/for_command.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/index/index.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/index/symbols_utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/index/types.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/lang.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/linters/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/linters/base_linter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/linters/linter_factory.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/linters/models.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/linters/normal_linter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/linters/python_linter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/linters/reactjs_linter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/linters/shadow_linter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/linters/test_python_linter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/linters/test_reactjs_linter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/linters/test_vue_linter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/linters/vue_linter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/memory/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/memory/active_context_manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/memory/active_package.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/memory/async_processor.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/memory/directory_mapper.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/models.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/plugins/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/plugins/git_helper_plugin.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/plugins/sample_plugin.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/plugins/token_helper_plugin.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/plugins/utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/privacy/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/privacy/model_filter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/pyproject/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/agentic_rag.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/api_server.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/cache/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/cache/base_cache.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/cache/failed_files_utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/cache/simple_cache.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/conversation_to_queries.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/doc_filter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/document_retriever.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/lang.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/llm_wrapper.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/loaders/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/loaders/docx_loader.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/loaders/excel_loader.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/loaders/filter_utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/loaders/image_loader.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/long_context_rag.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/rag_config.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/rag_entry.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/relevant_utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/searchable.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/stream_event/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/stream_event/event_writer.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/stream_event/types.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/test_doc_filter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/test_long_context_rag.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/test_token_limiter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/token_checker.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/token_counter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/token_limiter.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/token_limiter_utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/tools/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/tools/recall_tool.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/tools/search_tool.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/types.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/rag/variable_holder.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/regexproject/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/run_context.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/shadows/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/shadows/shadow_manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/suffixproject/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/tsproject/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/_markitdown.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/auto_project_type.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/conversation_store.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/llm_client_interceptors.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/llms.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/log_capture.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/model_provider_selector.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/multi_turn.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/print_table.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/project_structure.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/queue_communicate.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/request_event_queue.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/request_queue.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/rest.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/stream_thinking.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/thread_utils.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/src/autocoder/utils/types.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/tests/test_action_regex_project.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/tests/test_action_yml_file_manager.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/tests/test_chat_auto_coder.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/tests/test_code_auto_merge_editblock.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/tests/test_command_completer.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/tests/test_planner.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/tests/test_plugins.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/tests/test_privacy.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/tests/test_queue_communicate.py +0 -0
- {auto_coder-0.1.382 → auto_coder-0.1.383}/tests/test_symbols_utils.py +0 -0
|
@@ -106,6 +106,9 @@ src/autocoder/common/global_cancel.py
|
|
|
106
106
|
src/autocoder/common/image_to_page.py
|
|
107
107
|
src/autocoder/common/index_import_export.py
|
|
108
108
|
src/autocoder/common/interpreter.py
|
|
109
|
+
src/autocoder/common/llm_friendly_package.py
|
|
110
|
+
src/autocoder/common/llm_friendly_package_example.py
|
|
111
|
+
src/autocoder/common/llm_friendly_package_test.py
|
|
109
112
|
src/autocoder/common/mcp_hub.py
|
|
110
113
|
src/autocoder/common/mcp_server.py
|
|
111
114
|
src/autocoder/common/mcp_server_install.py
|
|
@@ -2653,7 +2653,7 @@ def lib_command(args: List[str]):
|
|
|
2653
2653
|
|
|
2654
2654
|
if not args:
|
|
2655
2655
|
console.print(
|
|
2656
|
-
"Please specify a subcommand: /add, /remove, /list, /set-proxy, /refresh, or /get"
|
|
2656
|
+
"Please specify a subcommand: /add, /remove, /list, /list_all, /set-proxy, /refresh, or /get"
|
|
2657
2657
|
)
|
|
2658
2658
|
return
|
|
2659
2659
|
|
|
@@ -2710,6 +2710,66 @@ def lib_command(args: List[str]):
|
|
|
2710
2710
|
console.print(table)
|
|
2711
2711
|
else:
|
|
2712
2712
|
console.print("No libraries added yet")
|
|
2713
|
+
|
|
2714
|
+
elif subcommand == "/list_all":
|
|
2715
|
+
if not os.path.exists(llm_friendly_packages_dir):
|
|
2716
|
+
console.print("llm_friendly_packages repository does not exist. Please run /lib /add <library_name> command first to clone it.")
|
|
2717
|
+
return
|
|
2718
|
+
|
|
2719
|
+
available_libs = []
|
|
2720
|
+
|
|
2721
|
+
# 遍历所有domain目录
|
|
2722
|
+
for domain in os.listdir(llm_friendly_packages_dir):
|
|
2723
|
+
domain_path = os.path.join(llm_friendly_packages_dir, domain)
|
|
2724
|
+
if os.path.isdir(domain_path):
|
|
2725
|
+
# 遍历所有username目录
|
|
2726
|
+
for username in os.listdir(domain_path):
|
|
2727
|
+
username_path = os.path.join(domain_path, username)
|
|
2728
|
+
if os.path.isdir(username_path):
|
|
2729
|
+
# 遍历所有lib_name目录
|
|
2730
|
+
for lib_name in os.listdir(username_path):
|
|
2731
|
+
lib_path = os.path.join(username_path, lib_name)
|
|
2732
|
+
if os.path.isdir(lib_path):
|
|
2733
|
+
# 检查是否有Markdown文件
|
|
2734
|
+
has_md_files = False
|
|
2735
|
+
for root, _, files in os.walk(lib_path):
|
|
2736
|
+
if any(file.endswith('.md') for file in files):
|
|
2737
|
+
has_md_files = True
|
|
2738
|
+
break
|
|
2739
|
+
|
|
2740
|
+
if has_md_files:
|
|
2741
|
+
available_libs.append({
|
|
2742
|
+
"domain": domain,
|
|
2743
|
+
"username": username,
|
|
2744
|
+
"lib_name": lib_name,
|
|
2745
|
+
"full_path": f"{username}/{lib_name}",
|
|
2746
|
+
"is_added": lib_name in memory["libs"]
|
|
2747
|
+
})
|
|
2748
|
+
|
|
2749
|
+
if available_libs:
|
|
2750
|
+
table = Table(title="Available Libraries")
|
|
2751
|
+
table.add_column("Domain", style="blue")
|
|
2752
|
+
table.add_column("Username", style="green")
|
|
2753
|
+
table.add_column("Library Name", style="cyan")
|
|
2754
|
+
table.add_column("Full Path", style="magenta")
|
|
2755
|
+
table.add_column("Status", style="yellow")
|
|
2756
|
+
|
|
2757
|
+
# 按domain和username分组排序
|
|
2758
|
+
available_libs.sort(key=lambda x: (x["domain"], x["username"], x["lib_name"]))
|
|
2759
|
+
|
|
2760
|
+
for lib in available_libs:
|
|
2761
|
+
status = "[green]Added[/green]" if lib["is_added"] else "[white]Not Added[/white]"
|
|
2762
|
+
table.add_row(
|
|
2763
|
+
lib["domain"],
|
|
2764
|
+
lib["username"],
|
|
2765
|
+
lib["lib_name"],
|
|
2766
|
+
lib["full_path"],
|
|
2767
|
+
status
|
|
2768
|
+
)
|
|
2769
|
+
|
|
2770
|
+
console.print(table)
|
|
2771
|
+
else:
|
|
2772
|
+
console.print("No available libraries found in the repository.")
|
|
2713
2773
|
|
|
2714
2774
|
elif subcommand == "/set-proxy":
|
|
2715
2775
|
if len(args) == 1:
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
"""
|
|
2
|
+
LLM Friendly Package Manager
|
|
3
|
+
|
|
4
|
+
This module provides a class-based interface for managing LLM friendly packages,
|
|
5
|
+
including operations like get, list, list_all, add, remove, refresh, etc.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import os
|
|
9
|
+
import json
|
|
10
|
+
from typing import List, Dict, Any, Optional, Tuple
|
|
11
|
+
from dataclasses import dataclass
|
|
12
|
+
from rich.console import Console
|
|
13
|
+
from rich.table import Table
|
|
14
|
+
import git
|
|
15
|
+
from filelock import FileLock
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass
|
|
19
|
+
class LibraryInfo:
|
|
20
|
+
"""Information about a library"""
|
|
21
|
+
domain: str
|
|
22
|
+
username: str
|
|
23
|
+
lib_name: str
|
|
24
|
+
full_path: str
|
|
25
|
+
is_added: bool
|
|
26
|
+
has_md_files: bool = True
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@dataclass
|
|
30
|
+
class PackageDoc:
|
|
31
|
+
"""Package documentation information"""
|
|
32
|
+
file_path: str
|
|
33
|
+
content: Optional[str] = None
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class LLMFriendlyPackageManager:
|
|
37
|
+
"""Manager for LLM friendly packages"""
|
|
38
|
+
|
|
39
|
+
def __init__(self, project_root: str = None, base_persist_dir: str = None):
|
|
40
|
+
"""
|
|
41
|
+
Initialize the package manager
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
project_root: Project root directory, defaults to current working directory
|
|
45
|
+
base_persist_dir: Base directory for persistence, defaults to .auto-coder/plugins/chat-auto-coder
|
|
46
|
+
"""
|
|
47
|
+
self.project_root = project_root or os.getcwd()
|
|
48
|
+
self.base_persist_dir = base_persist_dir or os.path.join(
|
|
49
|
+
self.project_root, ".auto-coder", "plugins", "chat-auto-coder"
|
|
50
|
+
)
|
|
51
|
+
self.lib_dir = os.path.join(self.project_root, ".auto-coder", "libs")
|
|
52
|
+
self.llm_friendly_packages_dir = os.path.join(self.lib_dir, "llm_friendly_packages")
|
|
53
|
+
self.console = Console()
|
|
54
|
+
|
|
55
|
+
# Ensure directories exist
|
|
56
|
+
os.makedirs(self.lib_dir, exist_ok=True)
|
|
57
|
+
os.makedirs(self.base_persist_dir, exist_ok=True)
|
|
58
|
+
|
|
59
|
+
def _get_memory_path(self) -> str:
|
|
60
|
+
"""Get memory file path"""
|
|
61
|
+
return os.path.join(self.base_persist_dir, "memory.json")
|
|
62
|
+
|
|
63
|
+
def _load_memory(self) -> Dict[str, Any]:
|
|
64
|
+
"""Load memory from file"""
|
|
65
|
+
memory_path = self._get_memory_path()
|
|
66
|
+
lock_path = memory_path + ".lock"
|
|
67
|
+
|
|
68
|
+
default_memory = {
|
|
69
|
+
"conversation": [],
|
|
70
|
+
"current_files": {"files": [], "groups": {}},
|
|
71
|
+
"conf": {},
|
|
72
|
+
"exclude_dirs": [],
|
|
73
|
+
"mode": "auto_detect",
|
|
74
|
+
"libs": {}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if not os.path.exists(memory_path):
|
|
78
|
+
return default_memory
|
|
79
|
+
|
|
80
|
+
try:
|
|
81
|
+
with FileLock(lock_path, timeout=30):
|
|
82
|
+
with open(memory_path, "r", encoding="utf-8") as f:
|
|
83
|
+
memory = json.load(f)
|
|
84
|
+
# Ensure libs key exists
|
|
85
|
+
if "libs" not in memory:
|
|
86
|
+
memory["libs"] = {}
|
|
87
|
+
return memory
|
|
88
|
+
except Exception:
|
|
89
|
+
return default_memory
|
|
90
|
+
|
|
91
|
+
def _save_memory(self, memory: Dict[str, Any]) -> None:
|
|
92
|
+
"""Save memory to file"""
|
|
93
|
+
memory_path = self._get_memory_path()
|
|
94
|
+
lock_path = memory_path + ".lock"
|
|
95
|
+
|
|
96
|
+
with FileLock(lock_path, timeout=30):
|
|
97
|
+
with open(memory_path, "w", encoding="utf-8") as f:
|
|
98
|
+
json.dump(memory, f, indent=2, ensure_ascii=False)
|
|
99
|
+
|
|
100
|
+
def _get_current_proxy(self) -> str:
|
|
101
|
+
"""Get current proxy URL"""
|
|
102
|
+
memory = self._load_memory()
|
|
103
|
+
return memory.get("lib-proxy", "https://github.com/allwefantasy/llm_friendly_packages")
|
|
104
|
+
|
|
105
|
+
def _clone_repository(self) -> bool:
|
|
106
|
+
"""Clone the llm_friendly_packages repository"""
|
|
107
|
+
if os.path.exists(self.llm_friendly_packages_dir):
|
|
108
|
+
return True
|
|
109
|
+
|
|
110
|
+
self.console.print("Cloning llm_friendly_packages repository...")
|
|
111
|
+
try:
|
|
112
|
+
proxy_url = self._get_current_proxy()
|
|
113
|
+
git.Repo.clone_from(proxy_url, self.llm_friendly_packages_dir)
|
|
114
|
+
self.console.print("Successfully cloned llm_friendly_packages repository")
|
|
115
|
+
return True
|
|
116
|
+
except git.exc.GitCommandError as e:
|
|
117
|
+
self.console.print(f"Error cloning repository: {e}")
|
|
118
|
+
return False
|
|
119
|
+
|
|
120
|
+
def get_docs(self, package_name: Optional[str] = None, return_paths: bool = False) -> List[str]:
|
|
121
|
+
"""
|
|
122
|
+
Get documentation for packages
|
|
123
|
+
|
|
124
|
+
Args:
|
|
125
|
+
package_name: Specific package name to get docs for, None for all packages
|
|
126
|
+
return_paths: If True, return file paths; if False, return file contents
|
|
127
|
+
|
|
128
|
+
Returns:
|
|
129
|
+
List of documentation content or file paths
|
|
130
|
+
"""
|
|
131
|
+
docs = []
|
|
132
|
+
|
|
133
|
+
if not os.path.exists(self.llm_friendly_packages_dir):
|
|
134
|
+
return docs
|
|
135
|
+
|
|
136
|
+
memory = self._load_memory()
|
|
137
|
+
libs = list(memory.get("libs", {}).keys())
|
|
138
|
+
|
|
139
|
+
for domain in os.listdir(self.llm_friendly_packages_dir):
|
|
140
|
+
domain_path = os.path.join(self.llm_friendly_packages_dir, domain)
|
|
141
|
+
if not os.path.isdir(domain_path):
|
|
142
|
+
continue
|
|
143
|
+
|
|
144
|
+
for username in os.listdir(domain_path):
|
|
145
|
+
username_path = os.path.join(domain_path, username)
|
|
146
|
+
if not os.path.isdir(username_path):
|
|
147
|
+
continue
|
|
148
|
+
|
|
149
|
+
for lib_name in os.listdir(username_path):
|
|
150
|
+
lib_path = os.path.join(username_path, lib_name)
|
|
151
|
+
|
|
152
|
+
# Check if this is the requested package
|
|
153
|
+
if not os.path.isdir(lib_path):
|
|
154
|
+
continue
|
|
155
|
+
|
|
156
|
+
if package_name is not None:
|
|
157
|
+
if not (lib_name == package_name or
|
|
158
|
+
package_name == os.path.join(username, lib_name)):
|
|
159
|
+
continue
|
|
160
|
+
|
|
161
|
+
# Check if library is added
|
|
162
|
+
if lib_name not in libs:
|
|
163
|
+
continue
|
|
164
|
+
|
|
165
|
+
# Collect markdown files
|
|
166
|
+
for root, _, files in os.walk(lib_path):
|
|
167
|
+
for file in files:
|
|
168
|
+
if file.endswith(".md"):
|
|
169
|
+
file_path = os.path.join(root, file)
|
|
170
|
+
if return_paths:
|
|
171
|
+
docs.append(file_path)
|
|
172
|
+
else:
|
|
173
|
+
try:
|
|
174
|
+
with open(file_path, "r", encoding="utf-8") as f:
|
|
175
|
+
docs.append(f.read())
|
|
176
|
+
except Exception as e:
|
|
177
|
+
self.console.print(f"Error reading {file_path}: {e}")
|
|
178
|
+
|
|
179
|
+
return docs
|
|
180
|
+
|
|
181
|
+
def list_added_libraries(self) -> List[str]:
|
|
182
|
+
"""List all added libraries"""
|
|
183
|
+
memory = self._load_memory()
|
|
184
|
+
return list(memory.get("libs", {}).keys())
|
|
185
|
+
|
|
186
|
+
def list_all_available_libraries(self) -> List[LibraryInfo]:
|
|
187
|
+
"""List all available libraries in the repository"""
|
|
188
|
+
if not os.path.exists(self.llm_friendly_packages_dir):
|
|
189
|
+
return []
|
|
190
|
+
|
|
191
|
+
available_libs = []
|
|
192
|
+
memory = self._load_memory()
|
|
193
|
+
added_libs = set(memory.get("libs", {}).keys())
|
|
194
|
+
|
|
195
|
+
for domain in os.listdir(self.llm_friendly_packages_dir):
|
|
196
|
+
domain_path = os.path.join(self.llm_friendly_packages_dir, domain)
|
|
197
|
+
if not os.path.isdir(domain_path):
|
|
198
|
+
continue
|
|
199
|
+
|
|
200
|
+
for username in os.listdir(domain_path):
|
|
201
|
+
username_path = os.path.join(domain_path, username)
|
|
202
|
+
if not os.path.isdir(username_path):
|
|
203
|
+
continue
|
|
204
|
+
|
|
205
|
+
for lib_name in os.listdir(username_path):
|
|
206
|
+
lib_path = os.path.join(username_path, lib_name)
|
|
207
|
+
if not os.path.isdir(lib_path):
|
|
208
|
+
continue
|
|
209
|
+
|
|
210
|
+
# Check if has markdown files
|
|
211
|
+
has_md_files = False
|
|
212
|
+
for root, _, files in os.walk(lib_path):
|
|
213
|
+
if any(file.endswith('.md') for file in files):
|
|
214
|
+
has_md_files = True
|
|
215
|
+
break
|
|
216
|
+
|
|
217
|
+
if has_md_files:
|
|
218
|
+
available_libs.append(LibraryInfo(
|
|
219
|
+
domain=domain,
|
|
220
|
+
username=username,
|
|
221
|
+
lib_name=lib_name,
|
|
222
|
+
full_path=f"{username}/{lib_name}",
|
|
223
|
+
is_added=lib_name in added_libs,
|
|
224
|
+
has_md_files=has_md_files
|
|
225
|
+
))
|
|
226
|
+
|
|
227
|
+
# Sort by domain, username, lib_name
|
|
228
|
+
available_libs.sort(key=lambda x: (x.domain, x.username, x.lib_name))
|
|
229
|
+
return available_libs
|
|
230
|
+
|
|
231
|
+
def add_library(self, lib_name: str) -> bool:
|
|
232
|
+
"""
|
|
233
|
+
Add a library to the list
|
|
234
|
+
|
|
235
|
+
Args:
|
|
236
|
+
lib_name: Library name to add
|
|
237
|
+
|
|
238
|
+
Returns:
|
|
239
|
+
True if successful, False otherwise
|
|
240
|
+
"""
|
|
241
|
+
# Clone repository if needed
|
|
242
|
+
if not self._clone_repository():
|
|
243
|
+
return False
|
|
244
|
+
|
|
245
|
+
memory = self._load_memory()
|
|
246
|
+
|
|
247
|
+
if lib_name in memory["libs"]:
|
|
248
|
+
self.console.print(f"Library {lib_name} is already added")
|
|
249
|
+
return False
|
|
250
|
+
|
|
251
|
+
memory["libs"][lib_name] = {}
|
|
252
|
+
self._save_memory(memory)
|
|
253
|
+
self.console.print(f"Added library: {lib_name}")
|
|
254
|
+
return True
|
|
255
|
+
|
|
256
|
+
def remove_library(self, lib_name: str) -> bool:
|
|
257
|
+
"""
|
|
258
|
+
Remove a library from the list
|
|
259
|
+
|
|
260
|
+
Args:
|
|
261
|
+
lib_name: Library name to remove
|
|
262
|
+
|
|
263
|
+
Returns:
|
|
264
|
+
True if successful, False otherwise
|
|
265
|
+
"""
|
|
266
|
+
memory = self._load_memory()
|
|
267
|
+
|
|
268
|
+
if lib_name not in memory["libs"]:
|
|
269
|
+
self.console.print(f"Library {lib_name} is not in the list")
|
|
270
|
+
return False
|
|
271
|
+
|
|
272
|
+
del memory["libs"][lib_name]
|
|
273
|
+
self._save_memory(memory)
|
|
274
|
+
self.console.print(f"Removed library: {lib_name}")
|
|
275
|
+
return True
|
|
276
|
+
|
|
277
|
+
def set_proxy(self, proxy_url: Optional[str] = None) -> str:
|
|
278
|
+
"""
|
|
279
|
+
Set or get proxy URL
|
|
280
|
+
|
|
281
|
+
Args:
|
|
282
|
+
proxy_url: New proxy URL, None to get current proxy
|
|
283
|
+
|
|
284
|
+
Returns:
|
|
285
|
+
Current proxy URL
|
|
286
|
+
"""
|
|
287
|
+
memory = self._load_memory()
|
|
288
|
+
|
|
289
|
+
if proxy_url is None:
|
|
290
|
+
current_proxy = memory.get("lib-proxy", "No proxy set")
|
|
291
|
+
self.console.print(f"Current proxy: {current_proxy}")
|
|
292
|
+
return current_proxy
|
|
293
|
+
|
|
294
|
+
memory["lib-proxy"] = proxy_url
|
|
295
|
+
self._save_memory(memory)
|
|
296
|
+
self.console.print(f"Set proxy to: {proxy_url}")
|
|
297
|
+
return proxy_url
|
|
298
|
+
|
|
299
|
+
def refresh_repository(self) -> bool:
|
|
300
|
+
"""
|
|
301
|
+
Refresh the repository by pulling latest changes
|
|
302
|
+
|
|
303
|
+
Returns:
|
|
304
|
+
True if successful, False otherwise
|
|
305
|
+
"""
|
|
306
|
+
if not os.path.exists(self.llm_friendly_packages_dir):
|
|
307
|
+
self.console.print(
|
|
308
|
+
"llm_friendly_packages repository does not exist. "
|
|
309
|
+
"Please run add_library() first to clone it."
|
|
310
|
+
)
|
|
311
|
+
return False
|
|
312
|
+
|
|
313
|
+
try:
|
|
314
|
+
repo = git.Repo(self.llm_friendly_packages_dir)
|
|
315
|
+
origin = repo.remotes.origin
|
|
316
|
+
|
|
317
|
+
# Update remote URL if proxy is set
|
|
318
|
+
memory = self._load_memory()
|
|
319
|
+
proxy_url = memory.get("lib-proxy")
|
|
320
|
+
current_url = origin.url
|
|
321
|
+
|
|
322
|
+
if proxy_url and proxy_url != current_url:
|
|
323
|
+
origin.set_url(proxy_url)
|
|
324
|
+
self.console.print(f"Updated remote URL to: {proxy_url}")
|
|
325
|
+
|
|
326
|
+
origin.pull()
|
|
327
|
+
self.console.print("Successfully updated llm_friendly_packages repository")
|
|
328
|
+
return True
|
|
329
|
+
|
|
330
|
+
except git.exc.GitCommandError as e:
|
|
331
|
+
self.console.print(f"Error updating repository: {e}")
|
|
332
|
+
return False
|
|
333
|
+
|
|
334
|
+
def get_library_docs_paths(self, package_name: str) -> List[str]:
|
|
335
|
+
"""
|
|
336
|
+
Get documentation file paths for a specific package
|
|
337
|
+
|
|
338
|
+
Args:
|
|
339
|
+
package_name: Package name
|
|
340
|
+
|
|
341
|
+
Returns:
|
|
342
|
+
List of markdown file paths
|
|
343
|
+
"""
|
|
344
|
+
return self.get_docs(package_name, return_paths=True)
|
|
345
|
+
|
|
346
|
+
def display_added_libraries(self) -> None:
|
|
347
|
+
"""Display added libraries in a table"""
|
|
348
|
+
libs = self.list_added_libraries()
|
|
349
|
+
|
|
350
|
+
if not libs:
|
|
351
|
+
self.console.print("No libraries added yet")
|
|
352
|
+
return
|
|
353
|
+
|
|
354
|
+
table = Table(title="Added Libraries")
|
|
355
|
+
table.add_column("Library Name", style="cyan")
|
|
356
|
+
|
|
357
|
+
for lib_name in libs:
|
|
358
|
+
table.add_row(lib_name)
|
|
359
|
+
|
|
360
|
+
self.console.print(table)
|
|
361
|
+
|
|
362
|
+
def display_all_libraries(self) -> None:
|
|
363
|
+
"""Display all available libraries in a table"""
|
|
364
|
+
if not os.path.exists(self.llm_friendly_packages_dir):
|
|
365
|
+
self.console.print(
|
|
366
|
+
"llm_friendly_packages repository does not exist. "
|
|
367
|
+
"Please call add_library() first to clone it."
|
|
368
|
+
)
|
|
369
|
+
return
|
|
370
|
+
|
|
371
|
+
available_libs = self.list_all_available_libraries()
|
|
372
|
+
|
|
373
|
+
if not available_libs:
|
|
374
|
+
self.console.print("No available libraries found in the repository.")
|
|
375
|
+
return
|
|
376
|
+
|
|
377
|
+
table = Table(title="Available Libraries")
|
|
378
|
+
table.add_column("Domain", style="blue")
|
|
379
|
+
table.add_column("Username", style="green")
|
|
380
|
+
table.add_column("Library Name", style="cyan")
|
|
381
|
+
table.add_column("Full Path", style="magenta")
|
|
382
|
+
table.add_column("Status", style="yellow")
|
|
383
|
+
|
|
384
|
+
for lib in available_libs:
|
|
385
|
+
status = "[green]Added[/green]" if lib.is_added else "[white]Not Added[/white]"
|
|
386
|
+
table.add_row(
|
|
387
|
+
lib.domain,
|
|
388
|
+
lib.username,
|
|
389
|
+
lib.lib_name,
|
|
390
|
+
lib.full_path,
|
|
391
|
+
status
|
|
392
|
+
)
|
|
393
|
+
|
|
394
|
+
self.console.print(table)
|
|
395
|
+
|
|
396
|
+
def display_library_docs(self, package_name: str) -> None:
|
|
397
|
+
"""Display documentation paths for a package in a table"""
|
|
398
|
+
docs = self.get_library_docs_paths(package_name)
|
|
399
|
+
|
|
400
|
+
if not docs:
|
|
401
|
+
self.console.print(f"No markdown files found for package: {package_name}")
|
|
402
|
+
return
|
|
403
|
+
|
|
404
|
+
table = Table(title=f"Markdown Files for {package_name}")
|
|
405
|
+
table.add_column("File Path", style="cyan")
|
|
406
|
+
|
|
407
|
+
for doc in docs:
|
|
408
|
+
table.add_row(doc)
|
|
409
|
+
|
|
410
|
+
self.console.print(table)
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"""
|
|
2
|
+
LLMFriendlyPackageManager Usage Examples
|
|
3
|
+
|
|
4
|
+
This file demonstrates various ways to use the LLMFriendlyPackageManager class
|
|
5
|
+
for managing LLM friendly packages.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from autocoder.common.llm_friendly_package import LLMFriendlyPackageManager
|
|
9
|
+
|
|
10
|
+
def example_basic_usage():
|
|
11
|
+
"""Basic usage example"""
|
|
12
|
+
print("=== Basic Usage Example ===")
|
|
13
|
+
|
|
14
|
+
# Initialize the manager
|
|
15
|
+
manager = LLMFriendlyPackageManager()
|
|
16
|
+
|
|
17
|
+
# List current added libraries
|
|
18
|
+
added_libs = manager.list_added_libraries()
|
|
19
|
+
print(f"Currently added libraries: {added_libs}")
|
|
20
|
+
|
|
21
|
+
# Display added libraries in a nice table
|
|
22
|
+
manager.display_added_libraries()
|
|
23
|
+
|
|
24
|
+
def example_library_management():
|
|
25
|
+
"""Library management example"""
|
|
26
|
+
print("\n=== Library Management Example ===")
|
|
27
|
+
|
|
28
|
+
manager = LLMFriendlyPackageManager()
|
|
29
|
+
|
|
30
|
+
# Add a library (this will clone the repository if needed)
|
|
31
|
+
print("Adding a library...")
|
|
32
|
+
success = manager.add_library("example-lib")
|
|
33
|
+
if success:
|
|
34
|
+
print("Library added successfully!")
|
|
35
|
+
|
|
36
|
+
# List all available libraries
|
|
37
|
+
print("\nAll available libraries:")
|
|
38
|
+
manager.display_all_libraries()
|
|
39
|
+
|
|
40
|
+
# Remove a library
|
|
41
|
+
print("\nRemoving the library...")
|
|
42
|
+
removed = manager.remove_library("example-lib")
|
|
43
|
+
if removed:
|
|
44
|
+
print("Library removed successfully!")
|
|
45
|
+
|
|
46
|
+
def example_documentation_access():
|
|
47
|
+
"""Documentation access example"""
|
|
48
|
+
print("\n=== Documentation Access Example ===")
|
|
49
|
+
|
|
50
|
+
manager = LLMFriendlyPackageManager()
|
|
51
|
+
|
|
52
|
+
# Get documentation content for all packages
|
|
53
|
+
docs_content = manager.get_docs()
|
|
54
|
+
print(f"Total documentation content items: {len(docs_content)}")
|
|
55
|
+
|
|
56
|
+
# Get documentation file paths for all packages
|
|
57
|
+
docs_paths = manager.get_docs(return_paths=True)
|
|
58
|
+
print(f"Total documentation files: {len(docs_paths)}")
|
|
59
|
+
|
|
60
|
+
# Get documentation for a specific package
|
|
61
|
+
specific_docs = manager.get_docs(package_name="some-package", return_paths=True)
|
|
62
|
+
print(f"Documentation files for 'some-package': {len(specific_docs)}")
|
|
63
|
+
|
|
64
|
+
# Display documentation paths for a specific package
|
|
65
|
+
manager.display_library_docs("some-package")
|
|
66
|
+
|
|
67
|
+
def example_repository_management():
|
|
68
|
+
"""Repository management example"""
|
|
69
|
+
print("\n=== Repository Management Example ===")
|
|
70
|
+
|
|
71
|
+
manager = LLMFriendlyPackageManager()
|
|
72
|
+
|
|
73
|
+
# Get current proxy setting
|
|
74
|
+
current_proxy = manager.set_proxy()
|
|
75
|
+
print(f"Current proxy: {current_proxy}")
|
|
76
|
+
|
|
77
|
+
# Set a new proxy (optional)
|
|
78
|
+
# manager.set_proxy("https://gitee.com/your-mirror/llm_friendly_packages")
|
|
79
|
+
|
|
80
|
+
# Refresh the repository to get latest changes
|
|
81
|
+
print("Refreshing repository...")
|
|
82
|
+
success = manager.refresh_repository()
|
|
83
|
+
if success:
|
|
84
|
+
print("Repository refreshed successfully!")
|
|
85
|
+
|
|
86
|
+
def example_data_access():
|
|
87
|
+
"""Data access example"""
|
|
88
|
+
print("\n=== Data Access Example ===")
|
|
89
|
+
|
|
90
|
+
manager = LLMFriendlyPackageManager()
|
|
91
|
+
|
|
92
|
+
# Get all available libraries as structured data
|
|
93
|
+
available_libs = manager.list_all_available_libraries()
|
|
94
|
+
print(f"Total available libraries: {len(available_libs)}")
|
|
95
|
+
|
|
96
|
+
# Process the library information
|
|
97
|
+
for lib in available_libs[:3]: # Show first 3
|
|
98
|
+
print(f"Domain: {lib.domain}, "
|
|
99
|
+
f"Username: {lib.username}, "
|
|
100
|
+
f"Library: {lib.lib_name}, "
|
|
101
|
+
f"Added: {lib.is_added}")
|
|
102
|
+
|
|
103
|
+
def example_custom_configuration():
|
|
104
|
+
"""Custom configuration example"""
|
|
105
|
+
print("\n=== Custom Configuration Example ===")
|
|
106
|
+
|
|
107
|
+
# Initialize with custom directories (using existing project directory)
|
|
108
|
+
import tempfile
|
|
109
|
+
import os
|
|
110
|
+
|
|
111
|
+
# Create a temporary directory for demonstration
|
|
112
|
+
with tempfile.TemporaryDirectory() as temp_dir:
|
|
113
|
+
custom_project_root = temp_dir
|
|
114
|
+
custom_persist_dir = os.path.join(temp_dir, "custom_persist")
|
|
115
|
+
|
|
116
|
+
manager = LLMFriendlyPackageManager(
|
|
117
|
+
project_root=custom_project_root,
|
|
118
|
+
base_persist_dir=custom_persist_dir
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
print("Manager initialized with custom configuration")
|
|
122
|
+
print(f"Project root: {custom_project_root}")
|
|
123
|
+
print(f"Persistence directory: {custom_persist_dir}")
|
|
124
|
+
|
|
125
|
+
# Use the manager with custom configuration
|
|
126
|
+
added_libs = manager.list_added_libraries()
|
|
127
|
+
print(f"Added libraries with custom config: {added_libs}")
|
|
128
|
+
|
|
129
|
+
if __name__ == "__main__":
|
|
130
|
+
# Run all examples
|
|
131
|
+
example_basic_usage()
|
|
132
|
+
example_library_management()
|
|
133
|
+
example_documentation_access()
|
|
134
|
+
example_repository_management()
|
|
135
|
+
example_data_access()
|
|
136
|
+
example_custom_configuration()
|
|
137
|
+
|
|
138
|
+
print("\n=== All examples completed ===")
|