auto-coder 0.1.308__tar.gz → 0.1.309__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 (216) hide show
  1. {auto_coder-0.1.308 → auto_coder-0.1.309}/PKG-INFO +2 -1
  2. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/auto_coder.egg-info/PKG-INFO +2 -1
  3. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/auto_coder.egg-info/requires.txt +1 -0
  4. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/auto_coder_rag.py +16 -2
  5. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/command_args.py +11 -1
  6. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/api_server.py +108 -36
  7. auto_coder-0.1.309/src/autocoder/version.py +1 -0
  8. auto_coder-0.1.308/src/autocoder/version.py +0 -1
  9. {auto_coder-0.1.308 → auto_coder-0.1.309}/LICENSE +0 -0
  10. {auto_coder-0.1.308 → auto_coder-0.1.309}/README.md +0 -0
  11. {auto_coder-0.1.308 → auto_coder-0.1.309}/setup.cfg +0 -0
  12. {auto_coder-0.1.308 → auto_coder-0.1.309}/setup.py +0 -0
  13. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/auto_coder.egg-info/SOURCES.txt +0 -0
  14. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/auto_coder.egg-info/dependency_links.txt +0 -0
  15. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/auto_coder.egg-info/entry_points.txt +0 -0
  16. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/auto_coder.egg-info/top_level.txt +0 -0
  17. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/__init__.py +0 -0
  18. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/agent/__init__.py +0 -0
  19. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/agent/auto_demand_organizer.py +0 -0
  20. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/agent/auto_filegroup.py +0 -0
  21. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/agent/auto_guess_query.py +0 -0
  22. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/agent/auto_learn_from_commit.py +0 -0
  23. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/agent/auto_review_commit.py +0 -0
  24. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/agent/auto_tool.py +0 -0
  25. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/agent/coder.py +0 -0
  26. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/agent/designer.py +0 -0
  27. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/agent/planner.py +0 -0
  28. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/agent/project_reader.py +0 -0
  29. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/auto_coder.py +0 -0
  30. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/auto_coder_runner.py +0 -0
  31. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/auto_coder_server.py +0 -0
  32. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/benchmark.py +0 -0
  33. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/chat/__init__.py +0 -0
  34. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/chat_auto_coder.py +0 -0
  35. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/chat_auto_coder_lang.py +0 -0
  36. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/command_parser.py +0 -0
  37. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/commands/__init__.py +0 -0
  38. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/commands/auto_command.py +0 -0
  39. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/commands/auto_web.py +0 -0
  40. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/commands/tools.py +0 -0
  41. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/JupyterClient.py +0 -0
  42. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/ShellClient.py +0 -0
  43. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/__init__.py +0 -0
  44. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/action_yml_file_manager.py +0 -0
  45. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/anything2images.py +0 -0
  46. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/anything2img.py +0 -0
  47. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/audio.py +0 -0
  48. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/auto_coder_lang.py +0 -0
  49. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/auto_configure.py +0 -0
  50. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/buildin_tokenizer.py +0 -0
  51. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/chunk_validation.py +0 -0
  52. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/cleaner.py +0 -0
  53. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/code_auto_execute.py +0 -0
  54. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/code_auto_generate.py +0 -0
  55. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/code_auto_generate_diff.py +0 -0
  56. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/code_auto_generate_editblock.py +0 -0
  57. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/code_auto_generate_strict_diff.py +0 -0
  58. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/code_auto_merge.py +0 -0
  59. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/code_auto_merge_diff.py +0 -0
  60. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/code_auto_merge_editblock.py +0 -0
  61. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/code_auto_merge_strict_diff.py +0 -0
  62. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/code_modification_ranker.py +0 -0
  63. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/command_completer.py +0 -0
  64. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/command_generator.py +0 -0
  65. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/command_templates.py +0 -0
  66. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/computer_use.py +0 -0
  67. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/conf_import_export.py +0 -0
  68. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/conf_validator.py +0 -0
  69. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/const.py +0 -0
  70. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/context_pruner.py +0 -0
  71. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/conversation_pruner.py +0 -0
  72. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/files.py +0 -0
  73. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/git_utils.py +0 -0
  74. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/global_cancel.py +0 -0
  75. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/image_to_page.py +0 -0
  76. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/index_import_export.py +0 -0
  77. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/interpreter.py +0 -0
  78. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/llm_rerank.py +0 -0
  79. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/mcp_hub.py +0 -0
  80. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/mcp_server.py +0 -0
  81. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/mcp_servers/__init__.py +0 -0
  82. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/mcp_servers/mcp_server_gpt4o_mini_search.py +0 -0
  83. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/mcp_servers/mcp_server_perplexity.py +0 -0
  84. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/mcp_tools.py +0 -0
  85. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/memory_manager.py +0 -0
  86. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/model_speed_test.py +0 -0
  87. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/printer.py +0 -0
  88. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/recall_validation.py +0 -0
  89. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/result_manager.py +0 -0
  90. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/screenshots.py +0 -0
  91. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/search.py +0 -0
  92. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/search_replace.py +0 -0
  93. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/shells.py +0 -0
  94. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/stats_panel.py +0 -0
  95. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/stream_out_type.py +0 -0
  96. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/sys_prompt.py +0 -0
  97. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/text.py +0 -0
  98. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/types.py +0 -0
  99. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/common/utils_code_auto_generate.py +0 -0
  100. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/data/byzerllm.md +0 -0
  101. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/data/tokenizer.json +0 -0
  102. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/db/__init__.py +0 -0
  103. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/db/store.py +0 -0
  104. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/dispacher/__init__.py +0 -0
  105. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/dispacher/actions/__init__.py +0 -0
  106. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/dispacher/actions/action.py +0 -0
  107. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/dispacher/actions/copilot.py +0 -0
  108. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/dispacher/actions/plugins/__init__.py +0 -0
  109. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/dispacher/actions/plugins/action_regex_project.py +0 -0
  110. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/events/__init__.py +0 -0
  111. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/events/event_content.py +0 -0
  112. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/events/event_manager.py +0 -0
  113. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/events/event_manager_singleton.py +0 -0
  114. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/events/event_store.py +0 -0
  115. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/events/event_types.py +0 -0
  116. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/index/__init__.py +0 -0
  117. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/index/entry.py +0 -0
  118. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/index/filter/__init__.py +0 -0
  119. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/index/filter/normal_filter.py +0 -0
  120. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/index/filter/quick_filter.py +0 -0
  121. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/index/for_command.py +0 -0
  122. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/index/index.py +0 -0
  123. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/index/symbols_utils.py +0 -0
  124. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/index/types.py +0 -0
  125. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/lang.py +0 -0
  126. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/memory/__init__.py +0 -0
  127. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/memory/active_context_manager.py +0 -0
  128. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/memory/active_package.py +0 -0
  129. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/memory/async_processor.py +0 -0
  130. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/memory/directory_mapper.py +0 -0
  131. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/models.py +0 -0
  132. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/plugins/__init__.py +0 -0
  133. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/plugins/dynamic_completion_example.py +0 -0
  134. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/plugins/git_helper_plugin.py +0 -0
  135. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/plugins/sample_plugin.py +0 -0
  136. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/plugins/token_helper_plugin.py +0 -0
  137. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/plugins/utils.py +0 -0
  138. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/privacy/__init__.py +0 -0
  139. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/privacy/model_filter.py +0 -0
  140. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/pyproject/__init__.py +0 -0
  141. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/__init__.py +0 -0
  142. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/cache/__init__.py +0 -0
  143. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/cache/base_cache.py +0 -0
  144. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/cache/byzer_storage_cache.py +0 -0
  145. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/cache/cache_result_merge.py +0 -0
  146. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/cache/file_monitor_cache.py +0 -0
  147. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/cache/local_byzer_storage_cache.py +0 -0
  148. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/cache/local_duckdb_storage_cache.py +0 -0
  149. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/cache/rag_file_meta.py +0 -0
  150. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/cache/simple_cache.py +0 -0
  151. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/conversation_to_queries.py +0 -0
  152. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/doc_filter.py +0 -0
  153. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/document_retriever.py +0 -0
  154. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/lang.py +0 -0
  155. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/llm_wrapper.py +0 -0
  156. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/loaders/__init__.py +0 -0
  157. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/loaders/docx_loader.py +0 -0
  158. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/loaders/excel_loader.py +0 -0
  159. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/loaders/pdf_loader.py +0 -0
  160. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/loaders/ppt_loader.py +0 -0
  161. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/long_context_rag.py +0 -0
  162. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/qa_conversation_strategy.py +0 -0
  163. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/rag_config.py +0 -0
  164. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/rag_entry.py +0 -0
  165. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/raw_rag.py +0 -0
  166. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/relevant_utils.py +0 -0
  167. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/searchable.py +0 -0
  168. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/simple_directory_reader.py +0 -0
  169. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/simple_rag.py +0 -0
  170. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/stream_event/__init__.py +0 -0
  171. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/stream_event/event_writer.py +0 -0
  172. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/stream_event/types.py +0 -0
  173. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/token_checker.py +0 -0
  174. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/token_counter.py +0 -0
  175. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/token_limiter.py +0 -0
  176. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/token_limiter_utils.py +0 -0
  177. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/types.py +0 -0
  178. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/utils.py +0 -0
  179. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/rag/variable_holder.py +0 -0
  180. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/regexproject/__init__.py +0 -0
  181. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/run_context.py +0 -0
  182. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/suffixproject/__init__.py +0 -0
  183. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/tsproject/__init__.py +0 -0
  184. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/__init__.py +0 -0
  185. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/_markitdown.py +0 -0
  186. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/auto_coder_utils/__init__.py +0 -0
  187. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/auto_coder_utils/chat_stream_out.py +0 -0
  188. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/auto_project_type.py +0 -0
  189. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/chat_auto_coder_utils/__init__.py +0 -0
  190. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/conversation_store.py +0 -0
  191. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/llm_client_interceptors.py +0 -0
  192. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/llms.py +0 -0
  193. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/log_capture.py +0 -0
  194. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/model_provider_selector.py +0 -0
  195. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/multi_turn.py +0 -0
  196. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/operate_config_api.py +0 -0
  197. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/print_table.py +0 -0
  198. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/project_structure.py +0 -0
  199. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/queue_communicate.py +0 -0
  200. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/request_event_queue.py +0 -0
  201. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/request_queue.py +0 -0
  202. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/rest.py +0 -0
  203. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/stream_thinking.py +0 -0
  204. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/tests.py +0 -0
  205. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/thread_utils.py +0 -0
  206. {auto_coder-0.1.308 → auto_coder-0.1.309}/src/autocoder/utils/types.py +0 -0
  207. {auto_coder-0.1.308 → auto_coder-0.1.309}/tests/test_action_regex_project.py +0 -0
  208. {auto_coder-0.1.308 → auto_coder-0.1.309}/tests/test_action_yml_file_manager.py +0 -0
  209. {auto_coder-0.1.308 → auto_coder-0.1.309}/tests/test_chat_auto_coder.py +0 -0
  210. {auto_coder-0.1.308 → auto_coder-0.1.309}/tests/test_code_auto_merge_editblock.py +0 -0
  211. {auto_coder-0.1.308 → auto_coder-0.1.309}/tests/test_command_completer.py +0 -0
  212. {auto_coder-0.1.308 → auto_coder-0.1.309}/tests/test_planner.py +0 -0
  213. {auto_coder-0.1.308 → auto_coder-0.1.309}/tests/test_plugins.py +0 -0
  214. {auto_coder-0.1.308 → auto_coder-0.1.309}/tests/test_privacy.py +0 -0
  215. {auto_coder-0.1.308 → auto_coder-0.1.309}/tests/test_queue_communicate.py +0 -0
  216. {auto_coder-0.1.308 → auto_coder-0.1.309}/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.308
3
+ Version: 0.1.309
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -62,6 +62,7 @@ Requires-Dist: youtube-transcript-api
62
62
  Requires-Dist: SpeechRecognition
63
63
  Requires-Dist: pathvalidate
64
64
  Requires-Dist: mcp; python_version >= "3.10"
65
+ Requires-Dist: setuptools
65
66
 
66
67
  <p align="center">
67
68
  <picture>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: auto-coder
3
- Version: 0.1.308
3
+ Version: 0.1.309
4
4
  Summary: AutoCoder: AutoCoder
5
5
  Author: allwefantasy
6
6
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
@@ -62,6 +62,7 @@ Requires-Dist: youtube-transcript-api
62
62
  Requires-Dist: SpeechRecognition
63
63
  Requires-Dist: pathvalidate
64
64
  Requires-Dist: mcp; python_version >= "3.10"
65
+ Requires-Dist: setuptools
65
66
 
66
67
  <p align="center">
67
68
  <picture>
@@ -51,6 +51,7 @@ pydub
51
51
  youtube-transcript-api
52
52
  SpeechRecognition
53
53
  pathvalidate
54
+ setuptools
54
55
 
55
56
  [:python_version >= "3.10"]
56
57
  mcp
@@ -289,7 +289,11 @@ def main(input_args: Optional[List[str]] = None):
289
289
  serve_parser.add_argument("--ssl_keyfile", default="", help="")
290
290
  serve_parser.add_argument("--ssl_certfile", default="", help="")
291
291
  serve_parser.add_argument("--response_role", default="assistant", help="")
292
- serve_parser.add_argument("--doc_dir", default="", help="")
292
+ serve_parser.add_argument(
293
+ "--doc_dir",
294
+ default="",
295
+ help="Document directory path, also used as the root directory for serving static files"
296
+ )
293
297
  serve_parser.add_argument("--enable_local_image_host", action="store_true", help=" enable local image host for local Chat app")
294
298
  serve_parser.add_argument("--tokenizer_path", default=tokenizer_path, help="")
295
299
  serve_parser.add_argument(
@@ -305,7 +309,17 @@ def main(input_args: Optional[List[str]] = None):
305
309
  action="store_true",
306
310
  help="Monitor mode for the doc update",
307
311
  )
308
-
312
+ serve_parser.add_argument(
313
+ "--max_static_path_length",
314
+ type=int,
315
+ default=3000,
316
+ help="Maximum length allowed for static file paths (larger value to better support Chinese characters)"
317
+ )
318
+ serve_parser.add_argument(
319
+ "--enable_nginx_x_accel",
320
+ action="store_true",
321
+ help="Enable Nginx X-Accel-Redirect for static file serving when behind Nginx"
322
+ )
309
323
  serve_parser.add_argument(
310
324
  "--disable_auto_window",
311
325
  action="store_true",
@@ -433,7 +433,11 @@ def parse_args(input_args: Optional[List[str]] = None) -> AutoCoderArgs:
433
433
  doc_serve_parse.add_argument("--ssl_certfile", default="", help="")
434
434
  doc_serve_parse.add_argument(
435
435
  "--response_role", default="assistant", help="")
436
- doc_serve_parse.add_argument("--doc_dir", default="", help="")
436
+ doc_serve_parse.add_argument(
437
+ "--doc_dir",
438
+ default="",
439
+ help="Document directory path, also used as the root directory for serving static files"
440
+ )
437
441
  doc_serve_parse.add_argument("--tokenizer_path", default="", help="")
438
442
  doc_serve_parse.add_argument(
439
443
  "--collections", default="", help="Collection name for indexing"
@@ -453,6 +457,12 @@ def parse_args(input_args: Optional[List[str]] = None) -> AutoCoderArgs:
453
457
  action="store_true",
454
458
  help="Monitor mode for the doc update",
455
459
  )
460
+ doc_serve_parse.add_argument(
461
+ "--max_static_path_length",
462
+ type=int,
463
+ default=1000,
464
+ help="Maximum length allowed for static file paths"
465
+ )
456
466
 
457
467
  agent_parser = subparsers.add_parser("agent", help="Run an agent")
458
468
  agent_subparsers = agent_parser.add_subparsers(dest="agent_command")
@@ -49,6 +49,8 @@ TIMEOUT_KEEP_ALIVE = 5 # seconds
49
49
  # timeout in 10 minutes. Streaming can take longer than 3 min
50
50
  TIMEOUT = float(os.environ.get("BYZERLLM_APISERVER_HTTP_TIMEOUT", 600))
51
51
 
52
+ # Static file serving security settings
53
+
52
54
  router_app = FastAPI()
53
55
 
54
56
 
@@ -178,46 +180,51 @@ async def embed(body: EmbeddingCompletionRequest):
178
180
  )
179
181
 
180
182
  @router_app.get("/static/{full_path:path}")
181
- async def serve_image(full_path: str, request: Request):
182
-
183
- allowed_file_type = ['.png', '.jpg', '.jpeg', '.gif', '.bmp', '.webp']
183
+ async def serve_static_file(full_path: str, request: Request):
184
184
 
185
- if any(full_path.endswith(ext) for ext in allowed_file_type):
186
- try:
187
- # 获取文件的完整路径,并进行URL解码
188
- file_path = unquote(full_path)
189
- # 使用 os.path.normpath 来标准化路径,自动处理不同操作系统的路径分隔符
190
- file_path = os.path.normpath(file_path)
191
- if not os.path.isabs(file_path):
192
- file_path = os.path.join("/", file_path)
193
-
194
- # 检查文件是否存在
195
- if not os.path.exists(file_path):
196
- raise FileNotFoundError(f"File not found: {file_path}")
197
-
198
- # 异步读取文件内容
199
- async with aiofiles.open(file_path, "rb") as f:
200
- content = await f.read()
201
-
185
+ try:
186
+ # 路径安全检查已经在中间件中完成
187
+ # 直接使用规范化的路径
188
+ file_path = os.path.join("/", os.path.normpath(unquote(full_path)))
189
+
190
+ # 检查文件是否存在
191
+ if not os.path.exists(file_path):
192
+ raise FileNotFoundError(f"File not found: {file_path}")
193
+
194
+ # 如果启用了Nginx X-Accel-Redirect,使用X-Accel特性
195
+ if hasattr(request.app.state, "enable_nginx_x_accel") and request.app.state.enable_nginx_x_accel:
202
196
  # 获取文件的 MIME 类型
203
197
  content_type = mimetypes.guess_type(file_path)[0]
204
198
  if not content_type:
205
199
  content_type = "application/octet-stream"
206
200
 
207
- # 返回文件内容
208
- return Response(content=content, media_type=content_type)
209
- except FileNotFoundError as e:
210
- logger.error(f"Image not found: {str(e)}")
211
- raise HTTPException(status_code=404, detail=f"Image not found: {str(e)}")
212
- except PermissionError as e:
213
- logger.error(f"Permission denied: {str(e)}")
214
- raise HTTPException(status_code=403, detail=f"Permission denied: {str(e)}")
215
- except Exception as e:
216
- logger.error(f"Error serving image: {str(e)}")
217
- raise HTTPException(status_code=500, detail=f"Error serving image: {str(e)}")
218
-
219
- # 如果路径中没有图片, 返回 404
220
- raise HTTPException(status_code=404, detail="Only images are supported")
201
+ # 返回带X-Accel-Redirect头的响应
202
+ # 通过添加X-Accel-Redirect头告诉Nginx直接提供该文件
203
+ # 注意:Nginx配置必须正确设置内部路径映射
204
+ response = Response(content="", media_type=content_type)
205
+ response.headers["X-Accel-Redirect"] = f"/internal{file_path}"
206
+ return response
207
+
208
+ # 默认行为:异步读取文件内容
209
+ async with aiofiles.open(file_path, "rb") as f:
210
+ content = await f.read()
211
+
212
+ # 获取文件的 MIME 类型
213
+ content_type = mimetypes.guess_type(file_path)[0]
214
+ if not content_type:
215
+ content_type = "application/octet-stream"
216
+
217
+ # 返回文件内容
218
+ return Response(content=content, media_type=content_type)
219
+ except FileNotFoundError as e:
220
+ logger.error(f"File not found: {str(e)}")
221
+ raise HTTPException(status_code=404, detail=f"File not found: {str(e)}")
222
+ except PermissionError as e:
223
+ logger.error(f"Permission denied: {str(e)}")
224
+ raise HTTPException(status_code=403, detail=f"Permission denied: {str(e)}")
225
+ except Exception as e:
226
+ logger.error(f"Error serving file: {str(e)}")
227
+ raise HTTPException(status_code=500, detail=f"Error serving file: {str(e)}")
221
228
 
222
229
  class ServerArgs(BaseModel):
223
230
  host: str = None
@@ -234,14 +241,38 @@ class ServerArgs(BaseModel):
234
241
  response_role: str = "assistant"
235
242
  ssl_keyfile: str = None
236
243
  ssl_certfile: str = None
237
- doc_dir: str = ""
238
- tokenizer_path: Optional[str] = None
244
+ doc_dir: str = "" # Document directory path, also used as the root directory for serving static files
245
+ tokenizer_path: Optional[str] = None
246
+ max_static_path_length: int = int(os.environ.get("BYZERLLM_MAX_STATIC_PATH_LENGTH", 3000)) # Maximum length allowed for static file paths (larger value to better support Chinese characters)
247
+ enable_nginx_x_accel: bool = False # Enable Nginx X-Accel-Redirect for static file serving
239
248
 
240
249
  def serve(llm:ByzerLLM, args: ServerArgs):
241
250
 
242
251
  logger.info(f"ByzerLLM API server version {version}")
243
252
  logger.info(f"args: {args}")
244
253
 
254
+ # 设置静态文件路径长度限制
255
+ max_path_length = args.max_static_path_length
256
+ logger.info(f"Maximum static file path length: {max_path_length}")
257
+
258
+ # 存储Nginx X-Accel设置到应用状态
259
+ router_app.state.enable_nginx_x_accel = args.enable_nginx_x_accel
260
+ if args.enable_nginx_x_accel:
261
+ logger.info("Nginx X-Accel-Redirect enabled for static file serving")
262
+
263
+ # 确定允许访问的静态文件目录
264
+ # 优先级:1. 环境变量 BYZERLLM_ALLOWED_STATIC_DIR
265
+ # 2. 命令行参数 doc_dir
266
+ # 3. 默认值 "/tmp"
267
+ allowed_static_dir = os.environ.get("BYZERLLM_ALLOWED_STATIC_DIR")
268
+ if not allowed_static_dir and args.doc_dir:
269
+ allowed_static_dir = args.doc_dir
270
+ if not allowed_static_dir:
271
+ allowed_static_dir = "/tmp"
272
+
273
+ allowed_static_abs = os.path.abspath(allowed_static_dir)
274
+ logger.info(f"Static files root directory: {allowed_static_abs}")
275
+
245
276
  router_app.add_middleware(
246
277
  CORSMiddleware,
247
278
  allow_origins=args.allowed_origins,
@@ -250,6 +281,47 @@ def serve(llm:ByzerLLM, args: ServerArgs):
250
281
  allow_headers=args.allowed_headers,
251
282
  )
252
283
 
284
+ # Add static file security middleware
285
+ @router_app.middleware("http")
286
+ async def static_file_security(request: Request, call_next):
287
+ # Only apply to static routes
288
+ if request.url.path.startswith("/static/"):
289
+ # Extract the full_path from the URL
290
+ path_parts = request.url.path.split("/static/", 1)
291
+ if len(path_parts) > 1:
292
+ full_path = path_parts[1]
293
+
294
+ # Check path length
295
+ if len(full_path) > max_path_length:
296
+ logger.warning(f"Path too long: {len(full_path)} > {max_path_length}")
297
+ return JSONResponse(
298
+ content={"error": "Path too long"},
299
+ status_code=401
300
+ )
301
+
302
+ # Add warning when path length approaches the limit (80% of max)
303
+ if len(full_path) > (max_path_length * 0.8):
304
+ logger.warning(f"Path length approaching limit: {len(full_path)} is {(len(full_path) / max_path_length * 100):.1f}% of max ({max_path_length})")
305
+
306
+ # Decode and normalize path
307
+ decoded_path = unquote(full_path)
308
+ normalized_path = os.path.normpath(decoded_path)
309
+
310
+ # Check if path is in allowed directory
311
+ abs_path = os.path.abspath(os.path.join("/", normalized_path))
312
+
313
+ # 使用预先计算好的allowed_static_abs
314
+ is_allowed = abs_path.startswith(allowed_static_abs)
315
+
316
+ if not is_allowed:
317
+ logger.warning(f"Unauthorized path access: {abs_path}")
318
+ return JSONResponse(
319
+ content={"error": "Unauthorized path"},
320
+ status_code=401
321
+ )
322
+
323
+ return await call_next(request)
324
+
253
325
  if token := os.environ.get("BYZERLLM_API_KEY") or args.api_key:
254
326
 
255
327
  @router_app.middleware("http")
@@ -0,0 +1 @@
1
+ __version__ = "0.1.309"
@@ -1 +0,0 @@
1
- __version__ = "0.1.308"
File without changes
File without changes
File without changes
File without changes