auto-coder 0.1.382__tar.gz → 0.1.384__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.

Files changed (360) hide show
  1. {auto_coder-0.1.382 → auto_coder-0.1.384}/PKG-INFO +1 -1
  2. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/auto_coder.egg-info/PKG-INFO +1 -1
  3. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/auto_coder.egg-info/SOURCES.txt +3 -0
  4. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/auto_coder_runner.py +71 -1
  5. auto_coder-0.1.384/src/autocoder/common/llm_friendly_package.py +410 -0
  6. auto_coder-0.1.384/src/autocoder/common/llm_friendly_package_example.py +138 -0
  7. auto_coder-0.1.384/src/autocoder/common/llm_friendly_package_test.py +63 -0
  8. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit.py +69 -2
  9. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/operate_config_api.py +14 -38
  10. auto_coder-0.1.384/src/autocoder/version.py +2 -0
  11. auto_coder-0.1.382/src/autocoder/version.py +0 -2
  12. {auto_coder-0.1.382 → auto_coder-0.1.384}/LICENSE +0 -0
  13. {auto_coder-0.1.382 → auto_coder-0.1.384}/README.md +0 -0
  14. {auto_coder-0.1.382 → auto_coder-0.1.384}/setup.cfg +0 -0
  15. {auto_coder-0.1.382 → auto_coder-0.1.384}/setup.py +0 -0
  16. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  17. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/auto_coder.egg-info/entry_points.txt +0 -0
  18. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/auto_coder.egg-info/requires.txt +0 -0
  19. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/auto_coder.egg-info/top_level.txt +0 -0
  20. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/__init__.py +0 -0
  21. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/__init__.py +0 -0
  22. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/agentic_filter.py +0 -0
  23. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  24. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/auto_filegroup.py +0 -0
  25. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/auto_guess_query.py +0 -0
  26. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/auto_learn.py +0 -0
  27. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
  28. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/auto_review_commit.py +0 -0
  29. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/auto_tool.py +0 -0
  30. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/__init__.py +0 -0
  31. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/agent_hub.py +0 -0
  32. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/agentic_lang.py +0 -0
  33. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/agentic_tool_display.py +0 -0
  34. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/base_agent.py +0 -0
  35. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/default_tools.py +0 -0
  36. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/test_base_agent.py +0 -0
  37. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tool_registry.py +0 -0
  38. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tools/__init__.py +0 -0
  39. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tools/ask_followup_question_tool_resolver.py +0 -0
  40. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tools/attempt_completion_tool_resolver.py +0 -0
  41. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tools/base_tool_resolver.py +0 -0
  42. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tools/example_tool_resolver.py +0 -0
  43. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tools/execute_command_tool_resolver.py +0 -0
  44. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tools/list_files_tool_resolver.py +0 -0
  45. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tools/plan_mode_respond_tool_resolver.py +0 -0
  46. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tools/read_file_tool_resolver.py +0 -0
  47. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tools/replace_in_file_tool_resolver.py +0 -0
  48. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tools/search_files_tool_resolver.py +0 -0
  49. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tools/talk_to_group_tool_resolver.py +0 -0
  50. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tools/talk_to_tool_resolver.py +0 -0
  51. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tools/use_mcp_tool_resolver.py +0 -0
  52. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/tools/write_to_file_tool_resolver.py +0 -0
  53. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/types.py +0 -0
  54. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/base_agentic/utils.py +0 -0
  55. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/coder.py +0 -0
  56. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/designer.py +0 -0
  57. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/planner.py +0 -0
  58. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/agent/project_reader.py +0 -0
  59. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/auto_coder.py +0 -0
  60. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/auto_coder_rag.py +0 -0
  61. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/auto_coder_server.py +0 -0
  62. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/benchmark.py +0 -0
  63. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/chat/__init__.py +0 -0
  64. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/chat/conf_command.py +0 -0
  65. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/chat/models_command.py +0 -0
  66. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/chat/rules_command.py +0 -0
  67. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/chat_auto_coder.py +0 -0
  68. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/chat_auto_coder_lang.py +0 -0
  69. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/command_args.py +0 -0
  70. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/command_parser.py +0 -0
  71. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/commands/__init__.py +0 -0
  72. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/commands/auto_command.py +0 -0
  73. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/commands/auto_web.py +0 -0
  74. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/commands/tools.py +0 -0
  75. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/JupyterClient.py +0 -0
  76. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/ShellClient.py +0 -0
  77. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/__init__.py +0 -0
  78. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/action_yml_file_manager.py +0 -0
  79. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/anything2images.py +0 -0
  80. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/anything2img.py +0 -0
  81. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/audio.py +0 -0
  82. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/auto_coder_lang.py +0 -0
  83. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/auto_configure.py +0 -0
  84. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/buildin_tokenizer.py +0 -0
  85. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/chunk_validation.py +0 -0
  86. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/cleaner.py +0 -0
  87. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/code_auto_execute.py +0 -0
  88. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/code_auto_generate.py +0 -0
  89. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  90. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  91. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  92. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/code_auto_merge.py +0 -0
  93. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  94. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  95. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  96. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/code_modification_ranker.py +0 -0
  97. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/command_completer.py +0 -0
  98. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/command_completer_v2.py +0 -0
  99. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/command_file_manager/__init__.py +0 -0
  100. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/command_file_manager/examples.py +0 -0
  101. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/command_file_manager/manager.py +0 -0
  102. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/command_file_manager/models.py +0 -0
  103. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/command_file_manager/utils.py +0 -0
  104. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/command_generator.py +0 -0
  105. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/command_templates.py +0 -0
  106. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/computer_use.py +0 -0
  107. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/conf_import_export.py +0 -0
  108. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/conf_utils.py +0 -0
  109. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/conf_validator.py +0 -0
  110. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/const.py +0 -0
  111. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/context_pruner.py +0 -0
  112. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/conversation_pruner.py +0 -0
  113. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/conversations/__init__.py +0 -0
  114. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/conversations/compatibility.py +0 -0
  115. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/conversations/conversation_manager.py +0 -0
  116. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/conversations/example.py +0 -0
  117. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/directory_cache/__init__.py +0 -0
  118. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/directory_cache/cache.py +0 -0
  119. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/directory_cache/test_cache.py +0 -0
  120. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/file_checkpoint/__init__.py +0 -0
  121. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/file_checkpoint/backup.py +0 -0
  122. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/file_checkpoint/conversation_checkpoint.py +0 -0
  123. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/file_checkpoint/examples.py +0 -0
  124. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/file_checkpoint/manager.py +0 -0
  125. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/file_checkpoint/models.py +0 -0
  126. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/file_checkpoint/store.py +0 -0
  127. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/file_checkpoint/test_backup.py +0 -0
  128. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/file_checkpoint/test_manager.py +0 -0
  129. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/file_checkpoint/test_models.py +0 -0
  130. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/file_checkpoint/test_store.py +0 -0
  131. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/file_checkpoint/test_utils.py +0 -0
  132. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/file_checkpoint/utils.py +0 -0
  133. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/file_monitor/__init__.py +0 -0
  134. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/file_monitor/monitor.py +0 -0
  135. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/files.py +0 -0
  136. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/git_utils.py +0 -0
  137. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/global_cancel.py +0 -0
  138. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/ignorefiles/__init__.py +0 -0
  139. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/ignorefiles/ignore_file_utils.py +0 -0
  140. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/ignorefiles/test_ignore_file_utils.py +0 -0
  141. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/image_to_page.py +0 -0
  142. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/index_import_export.py +0 -0
  143. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/interpreter.py +0 -0
  144. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/mcp_hub.py +0 -0
  145. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/mcp_server.py +0 -0
  146. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/mcp_server_install.py +0 -0
  147. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/mcp_server_types.py +0 -0
  148. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  149. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
  150. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  151. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/mcp_tools.py +0 -0
  152. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/memory_manager.py +0 -0
  153. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/model_speed_tester.py +0 -0
  154. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/openai_content.py +0 -0
  155. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/printer.py +0 -0
  156. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/recall_validation.py +0 -0
  157. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/result_manager.py +0 -0
  158. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/rulefiles/__init__.py +0 -0
  159. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/rulefiles/autocoderrules_utils.py +0 -0
  160. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/run_cmd.py +0 -0
  161. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/save_formatted_log.py +0 -0
  162. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/screenshots.py +0 -0
  163. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/search.py +0 -0
  164. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/search_replace.py +0 -0
  165. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/shells.py +0 -0
  166. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/stats_panel.py +0 -0
  167. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/stream_out_type.py +0 -0
  168. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/sys_prompt.py +0 -0
  169. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/test_run_cmd.py +0 -0
  170. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/text.py +0 -0
  171. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/token_cost_caculate.py +0 -0
  172. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/types.py +0 -0
  173. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  174. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/__init__.py +0 -0
  175. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/__init__.py +0 -0
  176. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/__init__.py +0 -0
  177. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/ask_followup_question_tool_resolver.py +0 -0
  178. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/attempt_completion_tool_resolver.py +0 -0
  179. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/base_tool_resolver.py +0 -0
  180. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/execute_command_tool_resolver.py +0 -0
  181. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/list_code_definition_names_tool_resolver.py +0 -0
  182. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/list_files_tool_resolver.py +0 -0
  183. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/list_package_info_tool_resolver.py +0 -0
  184. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/plan_mode_respond_tool_resolver.py +0 -0
  185. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/read_file_tool_resolver.py +0 -0
  186. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/replace_in_file_tool_resolver.py +0 -0
  187. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/search_files_tool_resolver.py +0 -0
  188. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/test_execute_command_tool_resolver.py +0 -0
  189. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/test_search_files_tool_resolver.py +0 -0
  190. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/test_write_to_file_tool_resolver.py +0 -0
  191. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/use_mcp_tool_resolver.py +0 -0
  192. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_tools/write_to_file_tool_resolver.py +0 -0
  193. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_edit_types.py +0 -0
  194. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/agent/agentic_tool_display.py +0 -0
  195. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/code_agentic_editblock_manager.py +0 -0
  196. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/code_auto_generate.py +0 -0
  197. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/code_auto_generate_diff.py +0 -0
  198. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/code_auto_generate_editblock.py +0 -0
  199. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/code_auto_generate_strict_diff.py +0 -0
  200. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/code_auto_merge.py +0 -0
  201. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/code_auto_merge_diff.py +0 -0
  202. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/code_auto_merge_editblock.py +0 -0
  203. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/code_auto_merge_strict_diff.py +0 -0
  204. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/code_diff_manager.py +0 -0
  205. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/code_editblock_manager.py +0 -0
  206. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/code_manager.py +0 -0
  207. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/common/v2/code_strict_diff_manager.py +0 -0
  208. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/compilers/__init__.py +0 -0
  209. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/compilers/base_compiler.py +0 -0
  210. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/compilers/compiler_config_api.py +0 -0
  211. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/compilers/compiler_config_manager.py +0 -0
  212. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/compilers/compiler_factory.py +0 -0
  213. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/compilers/java_compiler.py +0 -0
  214. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/compilers/models.py +0 -0
  215. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/compilers/normal_compiler.py +0 -0
  216. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/compilers/provided_compiler.py +0 -0
  217. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/compilers/python_compiler.py +0 -0
  218. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/compilers/reactjs_compiler.py +0 -0
  219. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/compilers/shadow_compiler.py +0 -0
  220. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/compilers/vue_compiler.py +0 -0
  221. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/data/byzerllm.md +0 -0
  222. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/data/tokenizer.json +0 -0
  223. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/db/__init__.py +0 -0
  224. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/db/store.py +0 -0
  225. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/dispacher/__init__.py +0 -0
  226. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/dispacher/actions/__init__.py +0 -0
  227. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/dispacher/actions/action.py +0 -0
  228. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/dispacher/actions/copilot.py +0 -0
  229. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  230. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  231. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/events/__init__.py +0 -0
  232. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/events/event_content.py +0 -0
  233. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/events/event_manager.py +0 -0
  234. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/events/event_manager_singleton.py +0 -0
  235. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/events/event_store.py +0 -0
  236. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/events/event_types.py +0 -0
  237. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/helper/__init__.py +0 -0
  238. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/helper/project_creator.py +0 -0
  239. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/helper/rag_doc_creator.py +0 -0
  240. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/index/__init__.py +0 -0
  241. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/index/entry.py +0 -0
  242. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/index/filter/__init__.py +0 -0
  243. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/index/filter/normal_filter.py +0 -0
  244. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/index/filter/quick_filter.py +0 -0
  245. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/index/for_command.py +0 -0
  246. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/index/index.py +0 -0
  247. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/index/symbols_utils.py +0 -0
  248. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/index/types.py +0 -0
  249. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/lang.py +0 -0
  250. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/linters/__init__.py +0 -0
  251. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/linters/base_linter.py +0 -0
  252. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/linters/linter_factory.py +0 -0
  253. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/linters/models.py +0 -0
  254. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/linters/normal_linter.py +0 -0
  255. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/linters/python_linter.py +0 -0
  256. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/linters/reactjs_linter.py +0 -0
  257. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/linters/shadow_linter.py +0 -0
  258. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/linters/test_python_linter.py +0 -0
  259. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/linters/test_reactjs_linter.py +0 -0
  260. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/linters/test_vue_linter.py +0 -0
  261. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/linters/vue_linter.py +0 -0
  262. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/memory/__init__.py +0 -0
  263. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/memory/active_context_manager.py +0 -0
  264. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/memory/active_package.py +0 -0
  265. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/memory/async_processor.py +0 -0
  266. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/memory/directory_mapper.py +0 -0
  267. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/models.py +0 -0
  268. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/plugins/__init__.py +0 -0
  269. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
  270. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/plugins/git_helper_plugin.py +0 -0
  271. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/plugins/sample_plugin.py +0 -0
  272. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/plugins/token_helper_plugin.py +0 -0
  273. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/plugins/utils.py +0 -0
  274. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/privacy/__init__.py +0 -0
  275. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/privacy/model_filter.py +0 -0
  276. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/pyproject/__init__.py +0 -0
  277. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/__init__.py +0 -0
  278. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/agentic_rag.py +0 -0
  279. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/api_server.py +0 -0
  280. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/cache/__init__.py +0 -0
  281. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/cache/base_cache.py +0 -0
  282. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  283. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
  284. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/cache/failed_files_utils.py +0 -0
  285. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  286. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
  287. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
  288. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
  289. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/cache/simple_cache.py +0 -0
  290. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/conversation_to_queries.py +0 -0
  291. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/doc_filter.py +0 -0
  292. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/document_retriever.py +0 -0
  293. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/lang.py +0 -0
  294. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/llm_wrapper.py +0 -0
  295. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/loaders/__init__.py +0 -0
  296. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  297. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  298. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/loaders/filter_utils.py +0 -0
  299. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/loaders/image_loader.py +0 -0
  300. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  301. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  302. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/long_context_rag.py +0 -0
  303. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
  304. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/rag_config.py +0 -0
  305. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/rag_entry.py +0 -0
  306. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/relevant_utils.py +0 -0
  307. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/searchable.py +0 -0
  308. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/stream_event/__init__.py +0 -0
  309. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  310. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/stream_event/types.py +0 -0
  311. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/test_doc_filter.py +0 -0
  312. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/test_long_context_rag.py +0 -0
  313. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/test_token_limiter.py +0 -0
  314. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/token_checker.py +0 -0
  315. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/token_counter.py +0 -0
  316. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/token_limiter.py +0 -0
  317. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/token_limiter_utils.py +0 -0
  318. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/tools/__init__.py +0 -0
  319. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/tools/recall_tool.py +0 -0
  320. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/tools/search_tool.py +0 -0
  321. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/types.py +0 -0
  322. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/utils.py +0 -0
  323. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/rag/variable_holder.py +0 -0
  324. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/regexproject/__init__.py +0 -0
  325. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/run_context.py +0 -0
  326. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/shadows/__init__.py +0 -0
  327. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/shadows/shadow_manager.py +0 -0
  328. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/suffixproject/__init__.py +0 -0
  329. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/tsproject/__init__.py +0 -0
  330. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/__init__.py +0 -0
  331. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/_markitdown.py +0 -0
  332. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  333. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  334. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/auto_project_type.py +0 -0
  335. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  336. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/conversation_store.py +0 -0
  337. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  338. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/llms.py +0 -0
  339. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/log_capture.py +0 -0
  340. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/model_provider_selector.py +0 -0
  341. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/multi_turn.py +0 -0
  342. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/print_table.py +0 -0
  343. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/project_structure.py +0 -0
  344. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/queue_communicate.py +0 -0
  345. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/request_event_queue.py +0 -0
  346. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/request_queue.py +0 -0
  347. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/rest.py +0 -0
  348. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/stream_thinking.py +0 -0
  349. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/thread_utils.py +0 -0
  350. {auto_coder-0.1.382 → auto_coder-0.1.384}/src/autocoder/utils/types.py +0 -0
  351. {auto_coder-0.1.382 → auto_coder-0.1.384}/tests/test_action_regex_project.py +0 -0
  352. {auto_coder-0.1.382 → auto_coder-0.1.384}/tests/test_action_yml_file_manager.py +0 -0
  353. {auto_coder-0.1.382 → auto_coder-0.1.384}/tests/test_chat_auto_coder.py +0 -0
  354. {auto_coder-0.1.382 → auto_coder-0.1.384}/tests/test_code_auto_merge_editblock.py +0 -0
  355. {auto_coder-0.1.382 → auto_coder-0.1.384}/tests/test_command_completer.py +0 -0
  356. {auto_coder-0.1.382 → auto_coder-0.1.384}/tests/test_planner.py +0 -0
  357. {auto_coder-0.1.382 → auto_coder-0.1.384}/tests/test_plugins.py +0 -0
  358. {auto_coder-0.1.382 → auto_coder-0.1.384}/tests/test_privacy.py +0 -0
  359. {auto_coder-0.1.382 → auto_coder-0.1.384}/tests/test_queue_communicate.py +0 -0
  360. {auto_coder-0.1.382 → auto_coder-0.1.384}/tests/test_symbols_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.382
3
+ Version: 0.1.384
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.382
3
+ Version: 0.1.384
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Programming Language :: Python :: 3.10
@@ -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
@@ -657,6 +657,16 @@ def save_memory():
657
657
  load_memory()
658
658
 
659
659
 
660
+ def save_memory_with_new_memory(new_memory):
661
+ memory_path = os.path.join(base_persist_dir, "memory.json")
662
+ lock_path = memory_path + ".lock"
663
+
664
+ with FileLock(lock_path, timeout=30):
665
+ with open(memory_path, "w", encoding="utf-8") as f:
666
+ json.dump(new_memory, f, indent=2, ensure_ascii=False)
667
+ load_memory()
668
+
669
+
660
670
  def load_memory():
661
671
  global memory
662
672
  memory_path = os.path.join(base_persist_dir, "memory.json")
@@ -2653,7 +2663,7 @@ def lib_command(args: List[str]):
2653
2663
 
2654
2664
  if not args:
2655
2665
  console.print(
2656
- "Please specify a subcommand: /add, /remove, /list, /set-proxy, /refresh, or /get"
2666
+ "Please specify a subcommand: /add, /remove, /list, /list_all, /set-proxy, /refresh, or /get"
2657
2667
  )
2658
2668
  return
2659
2669
 
@@ -2710,6 +2720,66 @@ def lib_command(args: List[str]):
2710
2720
  console.print(table)
2711
2721
  else:
2712
2722
  console.print("No libraries added yet")
2723
+
2724
+ elif subcommand == "/list_all":
2725
+ if not os.path.exists(llm_friendly_packages_dir):
2726
+ console.print("llm_friendly_packages repository does not exist. Please run /lib /add <library_name> command first to clone it.")
2727
+ return
2728
+
2729
+ available_libs = []
2730
+
2731
+ # 遍历所有domain目录
2732
+ for domain in os.listdir(llm_friendly_packages_dir):
2733
+ domain_path = os.path.join(llm_friendly_packages_dir, domain)
2734
+ if os.path.isdir(domain_path):
2735
+ # 遍历所有username目录
2736
+ for username in os.listdir(domain_path):
2737
+ username_path = os.path.join(domain_path, username)
2738
+ if os.path.isdir(username_path):
2739
+ # 遍历所有lib_name目录
2740
+ for lib_name in os.listdir(username_path):
2741
+ lib_path = os.path.join(username_path, lib_name)
2742
+ if os.path.isdir(lib_path):
2743
+ # 检查是否有Markdown文件
2744
+ has_md_files = False
2745
+ for root, _, files in os.walk(lib_path):
2746
+ if any(file.endswith('.md') for file in files):
2747
+ has_md_files = True
2748
+ break
2749
+
2750
+ if has_md_files:
2751
+ available_libs.append({
2752
+ "domain": domain,
2753
+ "username": username,
2754
+ "lib_name": lib_name,
2755
+ "full_path": f"{username}/{lib_name}",
2756
+ "is_added": lib_name in memory["libs"]
2757
+ })
2758
+
2759
+ if available_libs:
2760
+ table = Table(title="Available Libraries")
2761
+ table.add_column("Domain", style="blue")
2762
+ table.add_column("Username", style="green")
2763
+ table.add_column("Library Name", style="cyan")
2764
+ table.add_column("Full Path", style="magenta")
2765
+ table.add_column("Status", style="yellow")
2766
+
2767
+ # 按domain和username分组排序
2768
+ available_libs.sort(key=lambda x: (x["domain"], x["username"], x["lib_name"]))
2769
+
2770
+ for lib in available_libs:
2771
+ status = "[green]Added[/green]" if lib["is_added"] else "[white]Not Added[/white]"
2772
+ table.add_row(
2773
+ lib["domain"],
2774
+ lib["username"],
2775
+ lib["lib_name"],
2776
+ lib["full_path"],
2777
+ status
2778
+ )
2779
+
2780
+ console.print(table)
2781
+ else:
2782
+ console.print("No available libraries found in the repository.")
2713
2783
 
2714
2784
  elif subcommand == "/set-proxy":
2715
2785
  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 ===")