osa_tool 0.2.6__tar.gz → 0.2.7__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.
Files changed (171) hide show
  1. {osa_tool-0.2.6 → osa_tool-0.2.7}/PKG-INFO +31 -29
  2. {osa_tool-0.2.6 → osa_tool-0.2.7}/README.md +29 -26
  3. osa_tool-0.2.7/osa_tool/config/osa_config.py +30 -0
  4. osa_tool-0.2.7/osa_tool/config/prompts/analysis.toml +179 -0
  5. osa_tool-0.2.7/osa_tool/config/prompts/osa_agent.toml +42 -0
  6. osa_tool-0.2.7/osa_tool/config/prompts/requirements.toml +31 -0
  7. osa_tool-0.2.7/osa_tool/config/prompts/system_messages.toml +100 -0
  8. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/settings/arguments.yaml +35 -5
  9. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/settings/config.toml +12 -5
  10. osa_tool-0.2.7/osa_tool/config/settings.py +328 -0
  11. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/conversion/notebook_converter.py +1 -1
  12. {osa_tool-0.2.6/osa_tool/git_agent → osa_tool-0.2.7/osa_tool/core/git}/git_agent.py +675 -159
  13. osa_tool-0.2.7/osa_tool/core/llm/llm.py +603 -0
  14. osa_tool-0.2.7/osa_tool/core/models/agent_status.py +10 -0
  15. osa_tool-0.2.7/osa_tool/core/models/event.py +20 -0
  16. osa_tool-0.2.7/osa_tool/core/models/task.py +20 -0
  17. {osa_tool-0.2.6/osa_tool/analytics → osa_tool-0.2.7/osa_tool/operations/analysis/repository_report}/report_generator.py +61 -14
  18. {osa_tool-0.2.6/osa_tool/analytics → osa_tool-0.2.7/osa_tool/operations/analysis/repository_report}/report_maker.py +33 -29
  19. {osa_tool-0.2.6/osa_tool/analytics → osa_tool-0.2.7/osa_tool/operations/analysis/repository_report}/response_validation.py +11 -0
  20. osa_tool-0.2.6/osa_tool/translation/dir_translator.py → osa_tool-0.2.7/osa_tool/operations/codebase/directory_translation/dirs_and_files_translator.py +175 -136
  21. {osa_tool-0.2.6/osa_tool/osatreesitter → osa_tool-0.2.7/osa_tool/operations/codebase/docstring_generation}/docgen.py +388 -186
  22. osa_tool-0.2.7/osa_tool/operations/codebase/docstring_generation/docstring_generation.py +141 -0
  23. {osa_tool-0.2.6/osa_tool/osatreesitter → osa_tool-0.2.7/osa_tool/operations/codebase/docstring_generation}/osa_treesitter.py +155 -53
  24. osa_tool-0.2.7/osa_tool/operations/codebase/docstring_generation/topology.py +165 -0
  25. osa_tool-0.2.7/osa_tool/operations/codebase/requirements_generation/requirements_generation.py +176 -0
  26. {osa_tool-0.2.6/osa_tool/aboutgen → osa_tool-0.2.7/osa_tool/operations/docs/about_generation}/about_generator.py +122 -31
  27. {osa_tool-0.2.6/osa_tool/docs_generator → osa_tool-0.2.7/osa_tool/operations/docs/community_docs_generation}/community.py +68 -27
  28. {osa_tool-0.2.6/osa_tool/docs_generator → osa_tool-0.2.7/osa_tool/operations/docs/community_docs_generation}/contributing.py +23 -14
  29. osa_tool-0.2.7/osa_tool/operations/docs/community_docs_generation/docs_run.py +89 -0
  30. osa_tool-0.2.7/osa_tool/operations/docs/community_docs_generation/license_generation.py +127 -0
  31. {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/context/citation_extractor.py +11 -14
  32. {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/context/files_contents.py +5 -5
  33. {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/context/pypi_status_checker.py +1 -1
  34. {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/generator/base_builder.py +19 -22
  35. {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/generator/builder.py +7 -9
  36. {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/generator/builder_article.py +5 -7
  37. {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/generator/header.py +14 -13
  38. {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/generator/installation.py +12 -13
  39. {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/models/llm_service.py +19 -19
  40. osa_tool-0.2.7/osa_tool/operations/docs/readme_generation/readme_core.py +108 -0
  41. osa_tool-0.2.7/osa_tool/operations/docs/readme_translation/__init__.py +0 -0
  42. osa_tool-0.2.7/osa_tool/operations/docs/readme_translation/readme_translator.py +234 -0
  43. osa_tool-0.2.7/osa_tool/operations/operations_catalog.py +237 -0
  44. osa_tool-0.2.7/osa_tool/operations/registry.py +99 -0
  45. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/organization/repo_organizer.py +2 -1
  46. osa_tool-0.2.7/osa_tool/osa_agent/__init__.py +0 -0
  47. osa_tool-0.2.7/osa_tool/osa_agent/agents/__init__.py +0 -0
  48. osa_tool-0.2.7/osa_tool/osa_agent/agents/executor/__init__.py +0 -0
  49. osa_tool-0.2.7/osa_tool/osa_agent/agents/executor/agent.py +207 -0
  50. osa_tool-0.2.7/osa_tool/osa_agent/agents/finalizer/__init__.py +0 -0
  51. osa_tool-0.2.7/osa_tool/osa_agent/agents/finalizer/agent.py +114 -0
  52. osa_tool-0.2.7/osa_tool/osa_agent/agents/finalizer/models.py +7 -0
  53. osa_tool-0.2.7/osa_tool/osa_agent/agents/intent_router/__init__.py +0 -0
  54. osa_tool-0.2.7/osa_tool/osa_agent/agents/intent_router/agent.py +85 -0
  55. osa_tool-0.2.7/osa_tool/osa_agent/agents/intent_router/models.py +19 -0
  56. osa_tool-0.2.7/osa_tool/osa_agent/agents/planner/__init__.py +0 -0
  57. osa_tool-0.2.7/osa_tool/osa_agent/agents/planner/agent.py +184 -0
  58. osa_tool-0.2.7/osa_tool/osa_agent/agents/planner/models.py +16 -0
  59. osa_tool-0.2.7/osa_tool/osa_agent/agents/repo_analysis/__init__.py +0 -0
  60. osa_tool-0.2.7/osa_tool/osa_agent/agents/repo_analysis/agent.py +79 -0
  61. osa_tool-0.2.7/osa_tool/osa_agent/agents/reviewer/__init__.py +0 -0
  62. osa_tool-0.2.7/osa_tool/osa_agent/agents/reviewer/agent.py +15 -0
  63. osa_tool-0.2.7/osa_tool/osa_agent/base.py +39 -0
  64. osa_tool-0.2.7/osa_tool/osa_agent/context.py +37 -0
  65. osa_tool-0.2.7/osa_tool/osa_agent/graph.py +73 -0
  66. osa_tool-0.2.7/osa_tool/osa_agent/state.py +52 -0
  67. osa_tool-0.2.7/osa_tool/run.py +275 -0
  68. osa_tool-0.2.7/osa_tool/run_chat.py +72 -0
  69. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/run_multi_process.py +23 -37
  70. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/scheduler/README.md +8 -2
  71. osa_tool-0.2.7/osa_tool/scheduler/__init__.py +0 -0
  72. osa_tool-0.2.7/osa_tool/scheduler/plan.py +67 -0
  73. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/scheduler/scheduler.py +14 -18
  74. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/scheduler/workflow_manager.py +20 -16
  75. osa_tool-0.2.7/osa_tool/tools/__init__.py +0 -0
  76. osa_tool-0.2.7/osa_tool/tools/repository_analysis/__init__.py +0 -0
  77. {osa_tool-0.2.6/osa_tool/readmegen/context → osa_tool-0.2.7/osa_tool/tools/repository_analysis}/dependencies.py +1 -1
  78. osa_tool-0.2.7/osa_tool/tools/repository_analysis/documentation.py +55 -0
  79. osa_tool-0.2.7/osa_tool/tools/repository_analysis/models.py +28 -0
  80. osa_tool-0.2.7/osa_tool/tools/repository_analysis/repo_analyzer.py +57 -0
  81. {osa_tool-0.2.6/osa_tool/analytics → osa_tool-0.2.7/osa_tool/tools/repository_analysis}/sourcerank.py +11 -4
  82. osa_tool-0.2.7/osa_tool/tools/repository_analysis/testing.py +34 -0
  83. osa_tool-0.2.7/osa_tool/ui/__init__.py +0 -0
  84. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/ui/input_for_chat.py +30 -3
  85. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/ui/plan_editor.py +6 -0
  86. osa_tool-0.2.7/osa_tool/utils/__init__.py +0 -0
  87. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/utils/prompts_builder.py +4 -3
  88. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/utils/utils.py +55 -0
  89. osa_tool-0.2.7/osa_tool/validation/__init__.py +0 -0
  90. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/validation/code_analyzer.py +47 -48
  91. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/validation/doc_validator.py +26 -21
  92. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/validation/paper_validator.py +18 -17
  93. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/validation/report_generator.py +10 -11
  94. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/workflow/README.md +3 -1
  95. osa_tool-0.2.7/osa_tool/workflow/__init__.py +0 -0
  96. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/workflow/workflow_generator.py +30 -29
  97. {osa_tool-0.2.6 → osa_tool-0.2.7}/pyproject.toml +2 -2
  98. osa_tool-0.2.6/osa_tool/config/prompts/analysis.toml +0 -50
  99. osa_tool-0.2.6/osa_tool/config/prompts/osa_agent.toml +0 -49
  100. osa_tool-0.2.6/osa_tool/config/settings.py +0 -140
  101. osa_tool-0.2.6/osa_tool/docs_generator/docs_run.py +0 -39
  102. osa_tool-0.2.6/osa_tool/docs_generator/license.py +0 -52
  103. osa_tool-0.2.6/osa_tool/models/models.py +0 -402
  104. osa_tool-0.2.6/osa_tool/osa_agent/builder.py +0 -28
  105. osa_tool-0.2.6/osa_tool/osa_agent/config.py +0 -49
  106. osa_tool-0.2.6/osa_tool/osa_agent/nodes/planner_node.py +0 -100
  107. osa_tool-0.2.6/osa_tool/osa_agent/state.py +0 -57
  108. osa_tool-0.2.6/osa_tool/readmegen/readme_core.py +0 -73
  109. osa_tool-0.2.6/osa_tool/run.py +0 -434
  110. osa_tool-0.2.6/osa_tool/run_chat.py +0 -141
  111. osa_tool-0.2.6/osa_tool/scheduler/todo_list.py +0 -39
  112. osa_tool-0.2.6/osa_tool/translation/readme_translator.py +0 -138
  113. osa_tool-0.2.6/osa_tool/ui/web_plan_editor.py +0 -74
  114. {osa_tool-0.2.6 → osa_tool-0.2.7}/LICENSE +0 -0
  115. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/__init__.py +0 -0
  116. {osa_tool-0.2.6/osa_tool/aboutgen → osa_tool-0.2.7/osa_tool/config}/__init__.py +0 -0
  117. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/prompts/about_section.toml +0 -0
  118. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/prompts/readme.toml +0 -0
  119. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/prompts/readme_article.toml +0 -0
  120. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/prompts/scheduler.toml +0 -0
  121. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/prompts/validation.toml +0 -0
  122. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/template.toml +0 -0
  123. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/github_gitverse/autopep8.yml +0 -0
  124. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/github_gitverse/black.yml +0 -0
  125. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/github_gitverse/fix_pep8.yml +0 -0
  126. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/github_gitverse/pep8.yml +0 -0
  127. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/github_gitverse/pypi_publish.yml +0 -0
  128. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/github_gitverse/slash_command_dispatch.yml +0 -0
  129. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/github_gitverse/unit_test.yml +0 -0
  130. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/gitlab/autopep8.yml +0 -0
  131. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/gitlab/black.yml +0 -0
  132. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/gitlab/fix_pep8.yml +0 -0
  133. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/gitlab/pep8.yml +0 -0
  134. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/gitlab/pypi_publish.yml +0 -0
  135. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/gitlab/slash_command_dispatch.yml +0 -0
  136. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/gitlab/unit_test.yml +0 -0
  137. {osa_tool-0.2.6/osa_tool/analytics → osa_tool-0.2.7/osa_tool/conversion}/__init__.py +0 -0
  138. {osa_tool-0.2.6/osa_tool/config → osa_tool-0.2.7/osa_tool/core}/__init__.py +0 -0
  139. {osa_tool-0.2.6/osa_tool/conversion → osa_tool-0.2.7/osa_tool/core/git}/__init__.py +0 -0
  140. {osa_tool-0.2.6/osa_tool/analytics → osa_tool-0.2.7/osa_tool/core/git}/metadata.py +0 -0
  141. {osa_tool-0.2.6/osa_tool/docs_generator → osa_tool-0.2.7/osa_tool/core/llm}/__init__.py +0 -0
  142. {osa_tool-0.2.6/osa_tool/git_agent → osa_tool-0.2.7/osa_tool/core/models}/__init__.py +0 -0
  143. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/docs/images/osa_logo.PNG +0 -0
  144. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/docs/images/osa_logo_transparent.PNG +0 -0
  145. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/docs/templates/ci_config.toml +0 -0
  146. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/docs/templates/community.toml +0 -0
  147. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/docs/templates/contributing.toml +0 -0
  148. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/docs/templates/licenses.toml +0 -0
  149. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/docs/templates/mkdocs.yml +0 -0
  150. {osa_tool-0.2.6/osa_tool/models → osa_tool-0.2.7/osa_tool/operations}/__init__.py +0 -0
  151. {osa_tool-0.2.6/osa_tool/osa_agent → osa_tool-0.2.7/osa_tool/operations/analysis}/__init__.py +0 -0
  152. {osa_tool-0.2.6/osa_tool/osa_agent/nodes → osa_tool-0.2.7/osa_tool/operations/analysis/repository_report}/__init__.py +0 -0
  153. {osa_tool-0.2.6/osa_tool/osatreesitter → osa_tool-0.2.7/osa_tool/operations/codebase}/__init__.py +0 -0
  154. {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/codebase/directory_translation}/__init__.py +0 -0
  155. {osa_tool-0.2.6/osa_tool/readmegen/context → osa_tool-0.2.7/osa_tool/operations/codebase/docstring_generation}/__init__.py +0 -0
  156. {osa_tool-0.2.6/osa_tool/readmegen/generator → osa_tool-0.2.7/osa_tool/operations/codebase/requirements_generation}/__init__.py +0 -0
  157. {osa_tool-0.2.6/osa_tool/readmegen/models → osa_tool-0.2.7/osa_tool/operations/docs}/__init__.py +0 -0
  158. {osa_tool-0.2.6/osa_tool/scheduler → osa_tool-0.2.7/osa_tool/operations/docs/about_generation}/__init__.py +0 -0
  159. {osa_tool-0.2.6/osa_tool/translation → osa_tool-0.2.7/osa_tool/operations/docs/community_docs_generation}/__init__.py +0 -0
  160. {osa_tool-0.2.6/osa_tool/ui → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/__init__.py +0 -0
  161. {osa_tool-0.2.6/osa_tool/utils → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation/context}/__init__.py +0 -0
  162. {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/context/article_content.py +0 -0
  163. {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/context/article_path.py +0 -0
  164. {osa_tool-0.2.6/osa_tool/validation → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation/generator}/__init__.py +0 -0
  165. {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/generator/icons/shieldsio_icons.json +0 -0
  166. {osa_tool-0.2.6/osa_tool/workflow → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation/models}/__init__.py +0 -0
  167. {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/utils.py +0 -0
  168. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/scheduler/response_validation.py +0 -0
  169. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/utils/arguments_parser.py +0 -0
  170. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/utils/logger.py +0 -0
  171. {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/utils/response_cleaner.py +0 -0
@@ -1,14 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: osa_tool
3
- Version: 0.2.6
3
+ Version: 0.2.7
4
4
  Summary: Tool that just makes your open source project better!
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE
7
7
  Author: ITMO-NSS-team
8
8
  Author-email: itmo.nss.team@gmail.com
9
- Requires-Python: >=3.10,<4.0
9
+ Requires-Python: >=3.11,<4.0
10
10
  Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.10
12
11
  Classifier: Programming Language :: Python :: 3.11
13
12
  Classifier: Programming Language :: Python :: 3.12
14
13
  Classifier: Programming Language :: Python :: 3.13
@@ -79,8 +78,6 @@ create them from scratch.
79
78
  It automates the generation of README, different levels of documentation, CI/CD scripts, etc.
80
79
  It also generates advices and recommendations for the repository.
81
80
 
82
- OSA is currently under development, so not all features are implemented.
83
-
84
81
  ---
85
82
 
86
83
  ## How it works?
@@ -118,7 +115,7 @@ Here is a short video:
118
115
  creates a pull request with proposed changes.
119
116
 
120
117
  4. **Various LLMs**: Use OSA with an LLM accessible via API (e.g., OpenAI, VseGPT, Ollama), a local server, or try
121
- an [osa_bot](https://github.com/osa-bot) hosted on ITMO servers.
118
+ an [osa_bot](https://osa.nsslab.onti.actcognitive.org/) hosted on ITMO servers.
122
119
 
123
120
  5. **Workflow Generator**: Automatically generates customizable CI/CD workflows for Python repositories,
124
121
  including unit tests, code formatting, PEP 8 compliance checks, and PyPI publication.
@@ -178,11 +175,14 @@ docker build --build-arg GIT_USER_NAME="your-user-name" --build-arg GIT_USER_EMA
178
175
 
179
176
  ### Prerequisites
180
177
 
181
- OSA requires Python 3.10 or higher.
178
+ OSA requires Python 3.11 or higher.
182
179
 
183
- The .env file is required to specify the LLM API key (OPENAI_API_KEY or AUTHORIZATION_KEY) and optionally a Git token. The Git token (GIT_TOKEN) may be omitted if you plan to work with a public repository without creating a fork (using the --no-fork option).
180
+ The .env file is required to specify the LLM API key (OPENAI_API_KEY or AUTHORIZATION_KEY) and optionally a Git token.
181
+ The Git token (GIT_TOKEN) may be omitted if you plan to work with a public repository without creating a fork (using the
182
+ --no-fork option).
184
183
 
185
- Alternatively, instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab, and Gitverse respectively.
184
+ Alternatively, instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab, and
185
+ Gitverse respectively.
186
186
 
187
187
  When running `osa-tool` from CLI, you need to set the GIT_TOKEN and API key first:
188
188
 
@@ -233,23 +233,27 @@ documentation, see the [Workflow Generator README](./osa_tool/workflow/README.md
233
233
 
234
234
  ### Configuration
235
235
 
236
- | Flag | Description | Default |
237
- |----------------------|-------------------------------------------------------------------------------------|-----------------------------|
238
- | `-r`, `--repository` | URL of the GitHub/GitLab/Gitverse repository (**Mandatory**) | |
239
- | `-b`, `--branch` | Branch name of the repository | Default branch |
240
- | `-o`, `--output` | Path to the output directory | Current working directory |
241
- | `--api` | LLM API service provider | `itmo` |
242
- | `--base-url` | URL of the provider compatible with API OpenAI | `https://api.openai.com/v1` |
243
- | `--model` | Specific LLM model to use | `gpt-3.5-turbo` |
244
- | `--top_p` | Nucleus sampling probability | `0.95` |
245
- | `--temperature` | Sampling temperature to use for the LLM output (0 = deterministic, 1 = creative). | `0.05` |
246
- | `--max_tokens` | Maximum number of output tokens the model can generate in a single response | `4096` |
247
- | `--context_window` | Total number of model context (Input + Output) | `16385` |
248
- | `--attachment` | Path to a local PDF or .docx file, or a URL to a PDF resource | `None` |
249
- | `-m`, `--mode` | Operation mode for repository processing: `basic`, `auto` (default), or `advanced`. | `auto` |
250
- | `--delete-dir` | Enable deleting the downloaded repository after processing | `disabled` |
251
- | `--no-fork` | Avoid create fork for target repository | `False` |
252
- | `--no-pull-request` | Avoid create pull request for target repository | `False` |
236
+ | Flag | Description | Default |
237
+ |----------------------|-------------------------------------------------------------------------------------|--------------------------------|
238
+ | `-r`, `--repository` | URL of the GitHub/GitLab/Gitverse repository (**Mandatory**) | |
239
+ | `-b`, `--branch` | Branch name of the repository | Default branch |
240
+ | `-o`, `--output` | Path to the output directory | Current working directory |
241
+ | `--api` | LLM API service provider | `openai` |
242
+ | `--base-url` | URL of the provider compatible with API OpenAI | `https://openrouter.ai/api/v1` |
243
+ | `--model` | Specific LLM model to use | `gpt-3.5-turbo` |
244
+ | `--top_p` | Nucleus sampling probability | `0.95` |
245
+ | `--temperature` | Sampling temperature to use for the LLM output (0 = deterministic, 1 = creative). | `0.05` |
246
+ | `--max_tokens` | Maximum number of output tokens the model can generate in a single response | `4096` |
247
+ | `--context_window` | Total number of model context (Input + Output) | `16385` |
248
+ | `--attachment` | Path to a local PDF or .docx file, or a URL to a PDF resource | `None` |
249
+ | `-m`, `--mode` | Operation mode for repository processing: `basic`, `auto` (default), or `advanced`. | `auto` |
250
+ | `--delete-dir` | Enable deleting the downloaded repository after processing | `disabled` |
251
+ | `--no-fork` | Avoid create fork for target repository | `False` |
252
+ | `--no-pull-request` | Avoid create pull request for target repository | `False` |
253
+
254
+ Also OSA supports custom configuration via TOML files. Use the `--config-file` option to specify a path to custom configuration file. If no custom configuration file is provided, OSA will use the default configuration.
255
+
256
+ By default, OSA uses a single model for all tasks (specified via `--model`). If you want to use different models for different types of tasks, disable the `--use-single-model` flag and specify models for each task type (`--model-docstring`, `--model-readme`, `--model-validation`, `--model-general`).
253
257
 
254
258
  To learn how to work with the interactive CLI and view descriptions of all available keys, visit
255
259
  the [CLI usage guide](./osa_tool/scheduler/README.md).
@@ -368,9 +372,7 @@ If you use this software, please cite it as below.
368
372
  author={Nikitin, Nikolay and Getmanov, Andrey and Popov, Zakhar and
369
373
  Ulyanova Ekaterina and Aksenkin, Yaroslav and
370
374
  Sokolov, Ilya and Boukhanovsky, Alexander},
371
- booktitle={Championing Open-source DEvelopment in ML Workshop@ ICML25}
372
-
373
- }
375
+ booktitle={Championing Open-source DEvelopment in ML Workshop@ ICML25}}
374
376
 
375
377
  ---
376
378
 
@@ -34,8 +34,6 @@ create them from scratch.
34
34
  It automates the generation of README, different levels of documentation, CI/CD scripts, etc.
35
35
  It also generates advices and recommendations for the repository.
36
36
 
37
- OSA is currently under development, so not all features are implemented.
38
-
39
37
  ---
40
38
 
41
39
  ## How it works?
@@ -73,7 +71,7 @@ Here is a short video:
73
71
  creates a pull request with proposed changes.
74
72
 
75
73
  4. **Various LLMs**: Use OSA with an LLM accessible via API (e.g., OpenAI, VseGPT, Ollama), a local server, or try
76
- an [osa_bot](https://github.com/osa-bot) hosted on ITMO servers.
74
+ an [osa_bot](https://osa.nsslab.onti.actcognitive.org/) hosted on ITMO servers.
77
75
 
78
76
  5. **Workflow Generator**: Automatically generates customizable CI/CD workflows for Python repositories,
79
77
  including unit tests, code formatting, PEP 8 compliance checks, and PyPI publication.
@@ -133,11 +131,14 @@ docker build --build-arg GIT_USER_NAME="your-user-name" --build-arg GIT_USER_EMA
133
131
 
134
132
  ### Prerequisites
135
133
 
136
- OSA requires Python 3.10 or higher.
134
+ OSA requires Python 3.11 or higher.
137
135
 
138
- The .env file is required to specify the LLM API key (OPENAI_API_KEY or AUTHORIZATION_KEY) and optionally a Git token. The Git token (GIT_TOKEN) may be omitted if you plan to work with a public repository without creating a fork (using the --no-fork option).
136
+ The .env file is required to specify the LLM API key (OPENAI_API_KEY or AUTHORIZATION_KEY) and optionally a Git token.
137
+ The Git token (GIT_TOKEN) may be omitted if you plan to work with a public repository without creating a fork (using the
138
+ --no-fork option).
139
139
 
140
- Alternatively, instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab, and Gitverse respectively.
140
+ Alternatively, instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab, and
141
+ Gitverse respectively.
141
142
 
142
143
  When running `osa-tool` from CLI, you need to set the GIT_TOKEN and API key first:
143
144
 
@@ -188,23 +189,27 @@ documentation, see the [Workflow Generator README](./osa_tool/workflow/README.md
188
189
 
189
190
  ### Configuration
190
191
 
191
- | Flag | Description | Default |
192
- |----------------------|-------------------------------------------------------------------------------------|-----------------------------|
193
- | `-r`, `--repository` | URL of the GitHub/GitLab/Gitverse repository (**Mandatory**) | |
194
- | `-b`, `--branch` | Branch name of the repository | Default branch |
195
- | `-o`, `--output` | Path to the output directory | Current working directory |
196
- | `--api` | LLM API service provider | `itmo` |
197
- | `--base-url` | URL of the provider compatible with API OpenAI | `https://api.openai.com/v1` |
198
- | `--model` | Specific LLM model to use | `gpt-3.5-turbo` |
199
- | `--top_p` | Nucleus sampling probability | `0.95` |
200
- | `--temperature` | Sampling temperature to use for the LLM output (0 = deterministic, 1 = creative). | `0.05` |
201
- | `--max_tokens` | Maximum number of output tokens the model can generate in a single response | `4096` |
202
- | `--context_window` | Total number of model context (Input + Output) | `16385` |
203
- | `--attachment` | Path to a local PDF or .docx file, or a URL to a PDF resource | `None` |
204
- | `-m`, `--mode` | Operation mode for repository processing: `basic`, `auto` (default), or `advanced`. | `auto` |
205
- | `--delete-dir` | Enable deleting the downloaded repository after processing | `disabled` |
206
- | `--no-fork` | Avoid create fork for target repository | `False` |
207
- | `--no-pull-request` | Avoid create pull request for target repository | `False` |
192
+ | Flag | Description | Default |
193
+ |----------------------|-------------------------------------------------------------------------------------|--------------------------------|
194
+ | `-r`, `--repository` | URL of the GitHub/GitLab/Gitverse repository (**Mandatory**) | |
195
+ | `-b`, `--branch` | Branch name of the repository | Default branch |
196
+ | `-o`, `--output` | Path to the output directory | Current working directory |
197
+ | `--api` | LLM API service provider | `openai` |
198
+ | `--base-url` | URL of the provider compatible with API OpenAI | `https://openrouter.ai/api/v1` |
199
+ | `--model` | Specific LLM model to use | `gpt-3.5-turbo` |
200
+ | `--top_p` | Nucleus sampling probability | `0.95` |
201
+ | `--temperature` | Sampling temperature to use for the LLM output (0 = deterministic, 1 = creative). | `0.05` |
202
+ | `--max_tokens` | Maximum number of output tokens the model can generate in a single response | `4096` |
203
+ | `--context_window` | Total number of model context (Input + Output) | `16385` |
204
+ | `--attachment` | Path to a local PDF or .docx file, or a URL to a PDF resource | `None` |
205
+ | `-m`, `--mode` | Operation mode for repository processing: `basic`, `auto` (default), or `advanced`. | `auto` |
206
+ | `--delete-dir` | Enable deleting the downloaded repository after processing | `disabled` |
207
+ | `--no-fork` | Avoid create fork for target repository | `False` |
208
+ | `--no-pull-request` | Avoid create pull request for target repository | `False` |
209
+
210
+ Also OSA supports custom configuration via TOML files. Use the `--config-file` option to specify a path to custom configuration file. If no custom configuration file is provided, OSA will use the default configuration.
211
+
212
+ By default, OSA uses a single model for all tasks (specified via `--model`). If you want to use different models for different types of tasks, disable the `--use-single-model` flag and specify models for each task type (`--model-docstring`, `--model-readme`, `--model-validation`, `--model-general`).
208
213
 
209
214
  To learn how to work with the interactive CLI and view descriptions of all available keys, visit
210
215
  the [CLI usage guide](./osa_tool/scheduler/README.md).
@@ -323,8 +328,6 @@ If you use this software, please cite it as below.
323
328
  author={Nikitin, Nikolay and Getmanov, Andrey and Popov, Zakhar and
324
329
  Ulyanova Ekaterina and Aksenkin, Yaroslav and
325
330
  Sokolov, Ilya and Boukhanovsky, Alexander},
326
- booktitle={Championing Open-source DEvelopment in ML Workshop@ ICML25}
327
-
328
- }
331
+ booktitle={Championing Open-source DEvelopment in ML Workshop@ ICML25}}
329
332
 
330
333
  ---
@@ -0,0 +1,30 @@
1
+ from pydantic import BaseModel
2
+
3
+ from osa_tool.config.settings import ConfigManager
4
+ from osa_tool.core.git.git_agent import GitAgent
5
+ from osa_tool.scheduler.workflow_manager import WorkflowManager
6
+
7
+
8
+ class OSAConfig(BaseModel):
9
+ """
10
+ Global, read-only configuration.
11
+ Initialized once per session.
12
+ """
13
+
14
+ config_manager: ConfigManager
15
+ git_agent: GitAgent
16
+ workflow_manager: WorkflowManager
17
+
18
+ # For git_agent
19
+ create_fork: bool = True
20
+ create_pull_request: bool = True
21
+
22
+ # Clean
23
+ delete_dir: bool = False
24
+
25
+ enable_replanning: bool = True
26
+ enable_memory: bool = True
27
+ dry_run: bool = False
28
+
29
+ class Config:
30
+ arbitrary_types_allowed = True
@@ -0,0 +1,179 @@
1
+ [prompts]
2
+ main_prompt = """
3
+ INPUT DATA:
4
+
5
+ 1. PROJECT NAME: {project_name}
6
+ 2. METADATA: {metadata}
7
+ 3. REPOSITORY FILE TREE: {repository_tree}
8
+ 4. PRESENCE OF IMPORTANT FILES AND DIRECTORIES: {presence_files}
9
+ 5. README CONTENT: {readme_content}
10
+
11
+ TASK:
12
+
13
+ Generate a JSON report following this exact structure:
14
+
15
+ {{
16
+ "structure": {{
17
+ "compliance": "text",
18
+ "missing_files": ["list"],
19
+ "organization": "text"
20
+ }},
21
+ "readme": {{
22
+ "readme_quality": "text"
23
+ "project_description": "Yes/No/Partial",
24
+ "installation": "Yes/No/Partial",
25
+ "usage_examples": "Yes/No/Partial",
26
+ "contribution_guidelines": "Yes/No/Partial",
27
+ "license_specified": "Yes/No/Partial",
28
+ "badges_present": "Yes/No/Partial"
29
+ }},
30
+ "documentation": {{
31
+ "tests_present": "Yes/No/Partial",
32
+ "docs_quality": "text",
33
+ "outdated_content": boolean
34
+ }},
35
+ "assessment": {{
36
+ "key_shortcomings": ["list"],
37
+ "recommendations": ["list"]
38
+ }}
39
+ }}
40
+
41
+ RULES:
42
+
43
+ - Use double quotes for JSON
44
+ - No markdown formatting
45
+ - Only use Yes/No/Partial for readme fields and tests_present
46
+ - Be strictly factual about file presence
47
+ - Check for the presence of the directory with tests
48
+ - Prioritize 3 most critical recommendations
49
+
50
+ """
51
+
52
+ after_report_text_prompt = """
53
+ DEFINITIONS:
54
+
55
+ translate_dirs — Translate directory names to English
56
+ convert_notebooks — Convert Jupyter notebooks to Python scripts
57
+ translate_readme — Translate README file to English
58
+ ensure_license — Ensure a LICENSE file is present
59
+ community_docs — Add or update community documentation files
60
+ docstring — Add or update docstrings in source code
61
+ report — Generate refactoring report
62
+ readme — Create a README file
63
+ requirements — Add or update requirements file
64
+ organize — Reorganize project structure
65
+ about — Add project description or about section
66
+ validate_paper — Validate academic paper files
67
+ validate_doc — Validate documentation files
68
+ generate_workflows — Generate CI or automation workflows
69
+ include_tests — Add or include tests
70
+ include_black — Add Black code formatter
71
+ include_pep8 — Add PEP8 compliance checks
72
+ include_autopep8 — Add autopep8 formatter
73
+ include_fix_pep8 — Automatically fix PEP8 issues
74
+ include_pypi — Prepare project for PyPI publishing
75
+ python_versions — Specify supported Python versions
76
+ pep8_tool — Configure PEP8 checking tool
77
+ use_poetry — Use Poetry for dependency management
78
+ include_codecov — Add Codecov integration
79
+
80
+
81
+ INPUT DATA (tasks list):
82
+
83
+ {tasks_list}
84
+
85
+ TASK:
86
+
87
+ Write a connected textual summary of the repository refactoring.
88
+
89
+ REQUIREMENTS:
90
+ - Write approximately two short paragraphs
91
+ - Use plain text only
92
+ - Do not use markdown
93
+ - Do not use bullet points or lists
94
+ - Do NOT mention tasks that were not performed
95
+ - Do NOT explain why something was not done
96
+ - Do NOT use modal or speculative language (avoid words like "may", "might", "likely")
97
+ - Describe only actions that were actually performed
98
+ - Use neutral but natural technical language
99
+ - Write in confident past tense
100
+ - Base the text ONLY on tasks with value "Yes"
101
+
102
+ STYLE:
103
+ - Clear and readable
104
+ - Slightly narrative, but professional
105
+ - No bureaucratic or legalistic phrasing
106
+ - No assumptions or interpretation beyond task definitions
107
+
108
+ OUTPUT:
109
+ Return only the text summary.
110
+ Do not add any explanations or extra text.
111
+ """
112
+
113
+ after_report_blocks_prompt = """
114
+ TASK DEFINITIONS:
115
+
116
+ translate_dirs — Translate directory names to English
117
+ convert_notebooks — Convert Jupyter notebooks to Python scripts
118
+ translate_readme — Translate README file to English
119
+ ensure_license — Ensure a LICENSE file is present
120
+ community_docs — Add or update community documentation files
121
+ docstring — Add or update docstrings in source code
122
+ report — Generate refactoring report
123
+ readme — Create a README file
124
+ requirements — Add or update requirements file
125
+ organize — Reorganize project structure
126
+ about — Add project description or about section
127
+ validate_paper — Validate academic paper files
128
+ validate_doc — Validate documentation files
129
+ generate_workflows — Generate CI or automation workflows
130
+ include_tests — Add or include tests
131
+ include_black — Add Black code formatter
132
+ include_pep8 — Add PEP8 compliance checks
133
+ include_autopep8 — Add autopep8 formatter
134
+ include_fix_pep8 — Automatically fix PEP8 issues
135
+ include_pypi — Prepare project for PyPI publishing
136
+ python_versions — Specify supported Python versions
137
+ pep8_tool — Configure PEP8 checking tool
138
+ use_poetry — Use Poetry for dependency management
139
+ include_codecov — Add Codecov integration
140
+
141
+
142
+ INPUT DATA (tasks list):
143
+
144
+ {tasks_list}
145
+
146
+ TASK:
147
+
148
+ You must summarize the result of repository refactoring based ONLY on the tasks listed above.
149
+
150
+ Group tasks into logical blocks.
151
+ Each logical block must contain:
152
+ - a short name (plain sentence)
153
+ - a short description (plain sentence)
154
+ - a list of task numbers that belong to this block
155
+
156
+ OUTPUT FORMAT:
157
+
158
+ Return ONLY valid JSON.
159
+ No extra text, no explanations, no markdown.
160
+
161
+ JSON structure:
162
+ [
163
+ {{
164
+ "name": "Block name as a plain sentence",
165
+ "description": "Short description as a plain sentence",
166
+ "tasks": [1, 2]
167
+ }}
168
+ ]
169
+
170
+ RULES (IMPORTANT):
171
+
172
+ 1. Use double quotes only
173
+ 2. Output must be valid JSON
174
+ 3. Use ONLY task numbers from the input list
175
+ 4. Every task from 1 to 7 MUST be used exactly once
176
+ 5. Do NOT invent new tasks
177
+ 7. "tasks" must contain only numbers
178
+
179
+ """
@@ -0,0 +1,42 @@
1
+ [prompts]
2
+ intent_router = """
3
+ Analyze the following user request and any attached context:
4
+
5
+ User Request: {user_request}
6
+ Attachment: {attachment}
7
+
8
+ Return the result **strictly in the JSON format described above**.
9
+ """
10
+
11
+ planner = """
12
+ User request:
13
+ {user_request}
14
+
15
+ Detected intent: {intent}
16
+ Task scope: {task_scope}
17
+
18
+ Repository overview:
19
+ {repo_data}
20
+
21
+ Available operations:
22
+ {available_operations}
23
+
24
+ Select the operations that best satisfy the user request.
25
+ """
26
+
27
+ detect_arguments = """
28
+ User request:
29
+ {user_request}
30
+
31
+ Operations with additional arguments:
32
+ {operations}
33
+ """
34
+
35
+ pr_summarizer = """
36
+ Summarize the following repository changes into a Pull Request description.
37
+
38
+ Operation events:
39
+ {events}
40
+
41
+ Write a short summary suitable for a PR body.
42
+ """
@@ -0,0 +1,31 @@
1
+ [prompts]
2
+ merge_requirements = """
3
+ You are a Senior Python DevOps engineer.
4
+ Your task is to merge two `requirements.txt` file contents into one final list.
5
+
6
+ INPUT DATA:
7
+ 1. OLD_REQUIREMENTS (contains preferred versions/constraints):
8
+ {old_requirements}
9
+
10
+ 2. NEW_REQUIREMENTS (generated from code analysis, acts as the source of truth for used libraries):
11
+ {new_requirements}
12
+
13
+ TASK:
14
+ Merge these two lists into a single valid list of strings.
15
+
16
+ RULES:
17
+ 1. The `NEW_REQUIREMENTS` list determines WHICH libraries must be included.
18
+ 2. For each library in `NEW_REQUIREMENTS`:
19
+ - If it exists in `OLD_REQUIREMENTS`, use the version string/constraints from `OLD_REQUIREMENTS`.
20
+ - If it does NOT exist in `OLD_REQUIREMENTS`, keep the version from `NEW_REQUIREMENTS`.
21
+ 3. If a library exists in `OLD_REQUIREMENTS` but NOT in `NEW_REQUIREMENTS`:
22
+ - REMOVE IT. It is unused.
23
+ 4. Output ONLY a valid JSON object with a key "dependencies" containing a list of strings.
24
+
25
+ Example Output:
26
+ {{
27
+ "dependencies": ["requests==2.25.1", "pandas>=2.0.0", "numpy"]
28
+ }}
29
+
30
+ Do not add any explanations, comments or markdown blocks.
31
+ """
@@ -0,0 +1,100 @@
1
+ [prompts]
2
+ # OSA AGENTS
3
+ intent_router = """
4
+ You are an intelligent assistant called IntentRouter.
5
+ Your task is to classify user requests into intents and determine the scope of the task in a software repository.
6
+ Always respond **strictly in JSON** matching this structure:
7
+
8
+ {{
9
+ "intent": "new_task | feedback | unknown",
10
+ "task_scope": "none | analysis | docs | codebase | full_repo",
11
+ "confidence": "<float value between 0 and 1>"
12
+ }}
13
+
14
+ INTENT definitions:
15
+ - new_task: A brand-new task requiring some action or output.
16
+ - feedback: Comments, corrections, or minor updates to existing outputs.
17
+ - unknown: Cannot confidently determine the intent.
18
+
19
+ TASK_SCOPE definitions:
20
+ - none: No actionable task, purely informational request.
21
+ - analysis: Only analysis or reporting, without modifying code or docs.
22
+ - docs: Focus on modifying documentation, README, or textual content in the repository.
23
+ - codebase: Focus on modifying source code, structure, and project files (for examples requirements).
24
+ - full_repo: Analyze or modify both codebase and documentation, or the entire repository.
25
+
26
+ RULES:
27
+
28
+ - Do not include explanations, extra text, or markdown.
29
+ - Always return valid JSON parsable into the specified schema.
30
+ - Ensure "confidence" is a float between 0 and 1.
31
+ """
32
+
33
+ planner = """
34
+ You are an autonomous planning agent in a multi-agent system.
35
+
36
+ Your responsibility:
37
+ - Select the most appropriate operations to fulfill the user request.
38
+ - Do NOT invent new operations.
39
+ - Use ONLY the operations provided in the list.
40
+
41
+ Strict rules:
42
+ - You MUST return a valid JSON object.
43
+ - The JSON MUST conform exactly to the following schema:
44
+
45
+ {{
46
+ "operations": ["string"],
47
+ "reasoning": "string"
48
+ }}
49
+
50
+ Additional constraints:
51
+ - "operations" must be a list of operation names.
52
+ - Do NOT include any explanations outside of the JSON.
53
+ - Do NOT include markdown.
54
+ - If no operations are applicable, return an empty list.
55
+
56
+ You are NOT allowed to reorder operations by logic — ordering is handled externally.
57
+ """
58
+
59
+ detect_arguments = """
60
+ You are an intelligent assistant responsible for extracting the required arguments for specific operations from the user request.
61
+
62
+ Your responsibilities:
63
+ - For each operation extract them directly from the user request.
64
+ - If the user request contains relevant values for the arguments, return them.
65
+
66
+ Strict rules:
67
+ - You MUST return a valid JSON object.
68
+ - The JSON MUST conform exactly to the following schema:
69
+
70
+ {{
71
+ "operation_name": {{"arg1": value1, "arg2": value2, ...}},
72
+ "operation_name_2": {{"arg1": value1, "arg2": value2, ...}}
73
+ }}
74
+
75
+ Additional constraints:
76
+ - Only include the necessary arguments for each operation.
77
+ - Do NOT include any explanations outside of the JSON.
78
+ - Do NOT include markdown.
79
+ - If the user request contains values for an operation's arguments, include them in the response.
80
+ - If no relevant arguments are found for a given operation, skip that operation from the JSON.
81
+ """
82
+
83
+ pr_summarizer = """
84
+ You are an assistant that writes concise and professional GitHub Pull Request descriptions.
85
+
86
+ Your task:
87
+ - Summarize repository changes based on structured operation events
88
+ - Be factual, neutral, and clear
89
+ - Do NOT invent changes
90
+ - Do NOT mention internal tooling or agents
91
+ - Prefer bullet points if multiple changes exist
92
+
93
+ Strict rules:
94
+ - You MUST return a valid JSON object.
95
+ - The JSON MUST conform exactly to the following schema:
96
+
97
+ {{
98
+ "summary": "text",
99
+ }}
100
+ """
@@ -31,11 +31,6 @@ arguments:
31
31
  with language-specific suffixes (e.g., README_ru.md, README_zh.md).
32
32
  example: Russian Chinese
33
33
 
34
- delete_dir:
35
- aliases: [ "--delete-dir" ]
36
- type: flag
37
- description: "Enable deleting the downloaded repository after processing."
38
-
39
34
  ensure_license:
40
35
  aliases: [ "--ensure-license" ]
41
36
  type: str
@@ -103,6 +98,16 @@ arguments:
103
98
  description: "Check whether the experiments proposed in an attached documentation file can be reproduced using the selected repository."
104
99
 
105
100
  settings:
101
+ use_single_model:
102
+ aliases: [ "--use-single-model" ]
103
+ type: flag
104
+ description: "Use the same model for all tasks (from default configuration)."
105
+
106
+ config_file:
107
+ aliases: [ "--config-file" ]
108
+ type: str
109
+ description: "Path to custom configuration file (TOML format)."
110
+
106
111
  no_fork:
107
112
  aliases: [ "--no-fork" ]
108
113
  type: flag
@@ -113,6 +118,11 @@ settings:
113
118
  type: flag
114
119
  description: "Do not create a pull request to the target repository."
115
120
 
121
+ delete_dir:
122
+ aliases: [ "--delete-dir" ]
123
+ type: flag
124
+ description: "Enable deleting the downloaded repository after processing."
125
+
116
126
  repository:
117
127
  aliases: [ "-r", "--repository" ]
118
128
  type: str
@@ -175,6 +185,26 @@ settings:
175
185
  Specific LLM model to use. See available providers and models:
176
186
  https://github.com/aimclub/ProtoLLM/tree/main/protollm/connectors
177
187
 
188
+ model_docstring:
189
+ aliases: [ "--model-docstring" ]
190
+ type: str
191
+ description: "Specific LLM model for docstring generation tasks."
192
+
193
+ model_readme:
194
+ aliases: [ "--model-readme" ]
195
+ type: str
196
+ description: "Specific LLM model for README generation tasks."
197
+
198
+ model_validation:
199
+ aliases: [ "--model-validation" ]
200
+ type: str
201
+ description: "Specific LLM model for validation tasks."
202
+
203
+ model_general:
204
+ aliases: [ "--model-general" ]
205
+ type: str
206
+ description: "Specific LLM model for general tasks such as About section generation or reorganization."
207
+
178
208
  temperature:
179
209
  aliases: [ "--temperature" ]
180
210
  type: float