osa_tool 0.3.0__tar.gz → 0.3.2__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 (278) hide show
  1. {osa_tool-0.3.0 → osa_tool-0.3.2}/PKG-INFO +73 -58
  2. {osa_tool-0.3.0 → osa_tool-0.3.2}/README.md +67 -49
  3. osa_tool-0.3.2/osa_tool/assets/notosans-sc-black.ttf +0 -0
  4. osa_tool-0.3.2/osa_tool/assets/notosans-sc-bold.ttf +0 -0
  5. osa_tool-0.3.2/osa_tool/assets/notosans-sc.ttf +0 -0
  6. osa_tool-0.3.2/osa_tool/config/locales/english.toml +168 -0
  7. osa_tool-0.3.2/osa_tool/config/locales/russian.toml +168 -0
  8. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/prompts/about_section.toml +2 -2
  9. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/prompts/analysis.toml +4 -1
  10. osa_tool-0.3.2/osa_tool/config/prompts/paper_analysis.toml +10 -0
  11. osa_tool-0.3.0/osa_tool/config/prompts/vkr_scoring.toml → osa_tool-0.3.2/osa_tool/config/prompts/repository_quality.toml +0 -48
  12. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/settings/arguments.yaml +137 -17
  13. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/settings/config.toml +40 -7
  14. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/settings.py +135 -8
  15. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/github_gitverse/pep8.yml +2 -1
  16. osa_tool-0.3.2/osa_tool/config/templates/workflow/github_gitverse/ruff.yml +18 -0
  17. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/github_gitverse/unit_test.yml +4 -3
  18. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/gitlab/autopep8.yml +2 -1
  19. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/gitlab/black.yml +2 -1
  20. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/gitlab/fix_pep8.yml +2 -1
  21. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/gitlab/pep8.yml +2 -1
  22. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/gitlab/unit_test.yml +2 -1
  23. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/core/git/git_agent.py +162 -7
  24. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/core/git/metadata.py +3 -1
  25. osa_tool-0.3.2/osa_tool/core/llm/host.py +667 -0
  26. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/core/llm/llm.py +131 -4
  27. osa_tool-0.3.2/osa_tool/operations/analysis/artifacts.py +61 -0
  28. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/notebook_report/analyzer.py +6 -0
  29. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/notebook_report/models.py +5 -0
  30. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/notebook_report/report_maker.py +79 -41
  31. osa_tool-0.3.2/osa_tool/operations/analysis/paper_analysis/__init__.py +25 -0
  32. osa_tool-0.3.2/osa_tool/operations/analysis/paper_analysis/data_context.py +126 -0
  33. osa_tool-0.3.2/osa_tool/operations/analysis/paper_analysis/models.py +113 -0
  34. osa_tool-0.3.2/osa_tool/operations/analysis/paper_analysis/pipeline.py +415 -0
  35. osa_tool-0.3.2/osa_tool/operations/analysis/paper_analysis/verifier.py +366 -0
  36. osa_tool-0.3.2/osa_tool/operations/analysis/paper_claims/__init__.py +73 -0
  37. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/claim_deduplicator.py +7 -4
  38. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/claim_extractor.py +9 -1
  39. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/claim_validation.py +1 -1
  40. osa_tool-0.3.2/osa_tool/operations/analysis/paper_claims/io.py +162 -0
  41. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/marker_converter.py +16 -4
  42. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/models.py +30 -5
  43. osa_tool-0.3.2/osa_tool/operations/analysis/paper_claims/openrouter_converter.py +251 -0
  44. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/pdf_splitter.py +24 -2
  45. osa_tool-0.3.2/osa_tool/operations/analysis/paper_claims/pipeline.py +249 -0
  46. osa_tool-0.3.2/osa_tool/operations/analysis/paper_claims/section_extractor.py +68 -0
  47. osa_tool-0.3.2/osa_tool/operations/analysis/repository_quality/__init__.py +3 -0
  48. {osa_tool-0.3.0/osa_tool/operations/analysis/vkr_scoring → osa_tool-0.3.2/osa_tool/operations/analysis/repository_quality}/checks.py +16 -16
  49. osa_tool-0.3.2/osa_tool/operations/analysis/repository_quality/repository_quality_scorer.py +116 -0
  50. {osa_tool-0.3.0/osa_tool/operations/analysis/vkr_scoring → osa_tool-0.3.2/osa_tool/operations/analysis/repository_quality}/scoring_engine.py +4 -15
  51. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/repository_report/report_generator.py +9 -1
  52. osa_tool-0.3.2/osa_tool/operations/analysis/repository_report/report_localization.py +80 -0
  53. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/repository_report/report_maker.py +165 -59
  54. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/adapters/python_adapter.py +7 -1
  55. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/adapters/typescript_adapter.py +8 -3
  56. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/core/osa_parser.py +20 -2
  57. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/docgen.py +2 -2
  58. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/docstring_generation.py +0 -3
  59. osa_tool-0.3.2/osa_tool/operations/codebase/docstring_generation/insert/ts_js_augmentor.py +360 -0
  60. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/workflow_generation/workflow_executor.py +6 -0
  61. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/workflow_generation/workflow_generator.py +207 -16
  62. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/about_generation/about_generator.py +1 -1
  63. osa_tool-0.3.2/osa_tool/operations/docs/community_docs_generation/codemeta_generator.py +212 -0
  64. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/community_docs_generation/docs_run.py +10 -0
  65. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/operations_catalog.py +2 -46
  66. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/run.py +86 -34
  67. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/run_chat.py +5 -3
  68. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/scheduler/plan.py +7 -5
  69. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/scheduler/scheduler.py +3 -1
  70. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/scheduler/workflow_manager.py +8 -1
  71. osa_tool-0.3.2/osa_tool/tools/focused_cli.py +14 -0
  72. osa_tool-0.3.2/osa_tool/tools/paper_analysis/__init__.py +1 -0
  73. osa_tool-0.3.2/osa_tool/tools/paper_analysis/__main__.py +29 -0
  74. osa_tool-0.3.2/osa_tool/tools/paper_analysis/cli.py +203 -0
  75. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/tools/paper_claims/README.md +19 -6
  76. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/tools/paper_claims/batch.py +32 -8
  77. osa_tool-0.3.2/osa_tool/tools/progress.py +39 -0
  78. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/scorecard.py +55 -26
  79. osa_tool-0.3.2/osa_tool/tools/repository_quality/__init__.py +1 -0
  80. osa_tool-0.3.2/osa_tool/tools/repository_quality/__main__.py +100 -0
  81. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/ui/plan_editor.py +181 -35
  82. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/utils/arguments_parser.py +64 -1
  83. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/utils/prompts_builder.py +33 -14
  84. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/utils/utils.py +84 -1
  85. {osa_tool-0.3.0 → osa_tool-0.3.2}/pyproject.toml +7 -11
  86. osa_tool-0.3.0/osa_tool/config/prompts/validation.toml +0 -301
  87. osa_tool-0.3.0/osa_tool/operations/analysis/paper_claims/__init__.py +0 -26
  88. osa_tool-0.3.0/osa_tool/operations/analysis/paper_claims/pipeline.py +0 -91
  89. osa_tool-0.3.0/osa_tool/operations/analysis/repository_validation/analyze/code_analyzer.py +0 -134
  90. osa_tool-0.3.0/osa_tool/operations/analysis/repository_validation/analyze/paper_analyzer.py +0 -116
  91. osa_tool-0.3.0/osa_tool/operations/analysis/repository_validation/doc_validator.py +0 -133
  92. osa_tool-0.3.0/osa_tool/operations/analysis/repository_validation/experiment.py +0 -9
  93. osa_tool-0.3.0/osa_tool/operations/analysis/repository_validation/models.py +0 -26
  94. osa_tool-0.3.0/osa_tool/operations/analysis/repository_validation/optional_dependencies.py +0 -29
  95. osa_tool-0.3.0/osa_tool/operations/analysis/repository_validation/paper_validator.py +0 -303
  96. osa_tool-0.3.0/osa_tool/operations/analysis/repository_validation/report_generator.py +0 -471
  97. osa_tool-0.3.0/osa_tool/operations/analysis/vkr_scoring/__init__.py +0 -3
  98. osa_tool-0.3.0/osa_tool/operations/analysis/vkr_scoring/claims.py +0 -378
  99. osa_tool-0.3.0/osa_tool/operations/analysis/vkr_scoring/csv_analyzer.py +0 -178
  100. osa_tool-0.3.0/osa_tool/operations/analysis/vkr_scoring/pdf_parser.py +0 -171
  101. osa_tool-0.3.0/osa_tool/operations/analysis/vkr_scoring/vkr_scorer.py +0 -138
  102. osa_tool-0.3.0/osa_tool/operations/codebase/docstring_generation/insert/ts_js_augmentor.py +0 -217
  103. osa_tool-0.3.0/osa_tool/operations/codebase/docstring_generation/osa_treesitter.py +0 -808
  104. osa_tool-0.3.0/osa_tool/ui/__init__.py +0 -0
  105. osa_tool-0.3.0/osa_tool/utils/__init__.py +0 -0
  106. {osa_tool-0.3.0 → osa_tool-0.3.2}/LICENSE +0 -0
  107. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/__init__.py +0 -0
  108. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/__init__.py +0 -0
  109. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/osa_config.py +0 -0
  110. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/prompts/docstring_generation.toml +0 -0
  111. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/prompts/osa_agent.toml +0 -0
  112. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/prompts/paper_claims.toml +0 -0
  113. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/prompts/readme/prompts.toml +0 -0
  114. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/prompts/readme/system_messages.toml +0 -0
  115. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/prompts/readme.toml +0 -0
  116. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/prompts/repo_organization.toml +0 -0
  117. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/prompts/requirements.toml +0 -0
  118. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/prompts/scheduler.toml +0 -0
  119. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/prompts/system_messages.toml +0 -0
  120. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/templates/template.toml +0 -0
  121. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/github_gitverse/autopep8.yml +0 -0
  122. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/github_gitverse/black.yml +0 -0
  123. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/github_gitverse/fix_pep8.yml +0 -0
  124. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/github_gitverse/pypi_publish.yml +0 -0
  125. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/github_gitverse/slash_command_dispatch.yml +0 -0
  126. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/gitlab/pypi_publish.yml +0 -0
  127. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/gitlab/slash_command_dispatch.yml +0 -0
  128. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/core/__init__.py +0 -0
  129. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/core/git/__init__.py +0 -0
  130. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/core/git/request_utils.py +0 -0
  131. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/core/llm/__init__.py +0 -0
  132. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/core/models/__init__.py +0 -0
  133. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/core/models/agent_status.py +0 -0
  134. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/core/models/event.py +0 -0
  135. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/core/models/llm_output_models.py +0 -0
  136. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/core/models/task.py +0 -0
  137. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/docs/images/osa_logo.PNG +0 -0
  138. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/docs/images/osa_logo_transparent.PNG +0 -0
  139. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/docs/templates/ci_config.toml +0 -0
  140. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/docs/templates/community.toml +0 -0
  141. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/docs/templates/contributing.toml +0 -0
  142. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/docs/templates/licenses.toml +0 -0
  143. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/docs/templates/mkdocs.yml +0 -0
  144. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/__init__.py +0 -0
  145. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/__init__.py +0 -0
  146. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/notebook_report/__init__.py +0 -0
  147. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/claim_input_planner.py +0 -0
  148. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/claim_schemas.py +0 -0
  149. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/exceptions.py +0 -0
  150. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/section_parser.py +0 -0
  151. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/repository_report/__init__.py +0 -0
  152. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/analysis/repository_report/response_validation.py +0 -0
  153. {osa_tool-0.3.0/osa_tool/operations/analysis/repository_validation → osa_tool-0.3.2/osa_tool/operations/codebase}/__init__.py +0 -0
  154. {osa_tool-0.3.0/osa_tool/operations/analysis/repository_validation/analyze → osa_tool-0.3.2/osa_tool/operations/codebase/directory_translation}/__init__.py +0 -0
  155. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/directory_translation/dirs_and_files_translator.py +0 -0
  156. {osa_tool-0.3.0/osa_tool/operations/codebase → osa_tool-0.3.2/osa_tool/operations/codebase/docstring_generation}/__init__.py +0 -0
  157. {osa_tool-0.3.0/osa_tool/operations/codebase/directory_translation → osa_tool-0.3.2/osa_tool/operations/codebase/docstring_generation/adapters}/__init__.py +0 -0
  158. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/adapters/base.py +0 -0
  159. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/adapters/javascript_adapter.py +0 -0
  160. {osa_tool-0.3.0/osa_tool/operations/codebase/docstring_generation → osa_tool-0.3.2/osa_tool/operations/codebase/docstring_generation/core}/__init__.py +0 -0
  161. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/core/source_view.py +0 -0
  162. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/docstring_transformer.py +0 -0
  163. {osa_tool-0.3.0/osa_tool/operations/codebase/docstring_generation/adapters → osa_tool-0.3.2/osa_tool/operations/codebase/docstring_generation/insert}/__init__.py +0 -0
  164. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/insert/base_augmentor.py +0 -0
  165. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/insert/factory.py +0 -0
  166. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/insert/python_augmentor.py +0 -0
  167. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/topology.py +0 -0
  168. {osa_tool-0.3.0/osa_tool/operations/codebase/docstring_generation/core → osa_tool-0.3.2/osa_tool/operations/codebase/notebook_conversion}/__init__.py +0 -0
  169. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/notebook_conversion/notebook_converter.py +0 -0
  170. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/__init__.py +0 -0
  171. {osa_tool-0.3.0/osa_tool/operations/codebase/docstring_generation/insert → osa_tool-0.3.2/osa_tool/operations/codebase/organization/core}/__init__.py +0 -0
  172. {osa_tool-0.3.0/osa_tool/operations/codebase/notebook_conversion → osa_tool-0.3.2/osa_tool/operations/codebase/organization/core/analyzers}/__init__.py +0 -0
  173. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/base.py +0 -0
  174. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/cpp.py +0 -0
  175. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/csharp.py +0 -0
  176. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/factory.py +0 -0
  177. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/generic.py +0 -0
  178. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/go.py +0 -0
  179. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/java.py +0 -0
  180. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/javascript.py +0 -0
  181. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/kotlin.py +0 -0
  182. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/latex.py +0 -0
  183. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/python.py +0 -0
  184. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/ruby.py +0 -0
  185. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/rust.py +0 -0
  186. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/swift.py +0 -0
  187. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/executor/action_executor.py +0 -0
  188. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/executor/batch_updater.py +0 -0
  189. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/health_checker.py +0 -0
  190. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/planning_manager.py +0 -0
  191. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/snapshot_manager.py +0 -0
  192. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/utils.py +0 -0
  193. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/organize.py +0 -0
  194. {osa_tool-0.3.0/osa_tool/operations/codebase/organization/core → osa_tool-0.3.2/osa_tool/operations/codebase/requirements_generation}/__init__.py +0 -0
  195. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/requirements_generation/requirements_generation.py +0 -0
  196. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/codebase/workflow_generation/README.md +0 -0
  197. {osa_tool-0.3.0/osa_tool/operations/codebase/organization/core/analyzers → osa_tool-0.3.2/osa_tool/operations/codebase/workflow_generation}/__init__.py +0 -0
  198. {osa_tool-0.3.0/osa_tool/operations/codebase/requirements_generation → osa_tool-0.3.2/osa_tool/operations/docs}/__init__.py +0 -0
  199. {osa_tool-0.3.0/osa_tool/operations/codebase/workflow_generation → osa_tool-0.3.2/osa_tool/operations/docs/about_generation}/__init__.py +0 -0
  200. {osa_tool-0.3.0/osa_tool/operations/docs → osa_tool-0.3.2/osa_tool/operations/docs/community_docs_generation}/__init__.py +0 -0
  201. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/community_docs_generation/community.py +0 -0
  202. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/community_docs_generation/contributing.py +0 -0
  203. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/community_docs_generation/license_generation.py +0 -0
  204. {osa_tool-0.3.0/osa_tool/operations/docs/about_generation → osa_tool-0.3.2/osa_tool/operations/docs/readme_generation}/__init__.py +0 -0
  205. {osa_tool-0.3.0/osa_tool/operations/docs/community_docs_generation → osa_tool-0.3.2/osa_tool/operations/docs/readme_generation/inputs}/__init__.py +0 -0
  206. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/inputs/article_content.py +0 -0
  207. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/inputs/article_path.py +0 -0
  208. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/inputs/pypi_status_checker.py +0 -0
  209. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/__init__.py +0 -0
  210. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/graph.py +0 -0
  211. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/llm_schemas.py +0 -0
  212. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/models.py +0 -0
  213. {osa_tool-0.3.0/osa_tool/operations/docs/readme_generation → osa_tool-0.3.2/osa_tool/operations/docs/readme_generation/pipeline/nodes}/__init__.py +0 -0
  214. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/assembler.py +0 -0
  215. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/context_collector.py +0 -0
  216. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/deterministic_builder.py +0 -0
  217. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/intent_analyzer.py +0 -0
  218. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/readme_patch.py +0 -0
  219. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/section_generator.py +0 -0
  220. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/section_planner.py +0 -0
  221. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/self_eval.py +0 -0
  222. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/writer.py +0 -0
  223. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/runtime_context.py +0 -0
  224. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/section_catalog.py +0 -0
  225. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/section_catalog_entries.py +0 -0
  226. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/state.py +0 -0
  227. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/readme_agent.py +0 -0
  228. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/readme_utils.py +0 -0
  229. {osa_tool-0.3.0/osa_tool/operations/docs/readme_generation/inputs → osa_tool-0.3.2/osa_tool/operations/docs/readme_generation/sections}/__init__.py +0 -0
  230. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/sections/header.py +0 -0
  231. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/sections/icons/shieldsio_icons.json +0 -0
  232. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/sections/installation.py +0 -0
  233. {osa_tool-0.3.0/osa_tool/operations/docs/readme_generation/pipeline/nodes → osa_tool-0.3.2/osa_tool/operations/docs/readme_translation}/__init__.py +0 -0
  234. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_translation/readme_translator.py +0 -0
  235. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/operations/registry.py +0 -0
  236. {osa_tool-0.3.0/osa_tool/operations/docs/readme_generation/sections → osa_tool-0.3.2/osa_tool/osa_agent}/__init__.py +0 -0
  237. {osa_tool-0.3.0/osa_tool/operations/docs/readme_translation → osa_tool-0.3.2/osa_tool/osa_agent/agents}/__init__.py +0 -0
  238. {osa_tool-0.3.0/osa_tool/osa_agent → osa_tool-0.3.2/osa_tool/osa_agent/agents/executor}/__init__.py +0 -0
  239. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/executor/agent.py +0 -0
  240. {osa_tool-0.3.0/osa_tool/osa_agent/agents → osa_tool-0.3.2/osa_tool/osa_agent/agents/finalizer}/__init__.py +0 -0
  241. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/finalizer/agent.py +0 -0
  242. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/finalizer/models.py +0 -0
  243. {osa_tool-0.3.0/osa_tool/osa_agent/agents/executor → osa_tool-0.3.2/osa_tool/osa_agent/agents/intent_router}/__init__.py +0 -0
  244. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/intent_router/agent.py +0 -0
  245. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/intent_router/models.py +0 -0
  246. {osa_tool-0.3.0/osa_tool/osa_agent/agents/finalizer → osa_tool-0.3.2/osa_tool/osa_agent/agents/planner}/__init__.py +0 -0
  247. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/planner/agent.py +0 -0
  248. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/planner/models.py +0 -0
  249. {osa_tool-0.3.0/osa_tool/osa_agent/agents/intent_router → osa_tool-0.3.2/osa_tool/osa_agent/agents/repo_analysis}/__init__.py +0 -0
  250. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/repo_analysis/agent.py +0 -0
  251. {osa_tool-0.3.0/osa_tool/osa_agent/agents/planner → osa_tool-0.3.2/osa_tool/osa_agent/agents/reviewer}/__init__.py +0 -0
  252. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/reviewer/agent.py +0 -0
  253. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/reviewer/models.py +0 -0
  254. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/osa_agent/base.py +0 -0
  255. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/osa_agent/context.py +0 -0
  256. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/osa_agent/graph.py +0 -0
  257. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/osa_agent/state.py +0 -0
  258. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/run_multi_process.py +0 -0
  259. {osa_tool-0.3.0/osa_tool/osa_agent/agents/repo_analysis → osa_tool-0.3.2/osa_tool/scheduler}/__init__.py +0 -0
  260. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/scheduler/response_validation.py +0 -0
  261. {osa_tool-0.3.0/osa_tool/osa_agent/agents/reviewer → osa_tool-0.3.2/osa_tool/tools}/__init__.py +0 -0
  262. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/tools/paper_claims/__init__.py +0 -0
  263. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/tools/paper_claims/aggregate.py +0 -0
  264. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/tools/paper_claims/evaluate.py +0 -0
  265. {osa_tool-0.3.0/osa_tool/scheduler → osa_tool-0.3.2/osa_tool/tools/repository_analysis}/__init__.py +0 -0
  266. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/dependencies.py +0 -0
  267. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/documentation.py +0 -0
  268. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/models.py +0 -0
  269. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/repo_analyzer.py +0 -0
  270. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/repo_graph.py +0 -0
  271. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/sourcerank.py +0 -0
  272. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/testing.py +0 -0
  273. {osa_tool-0.3.0/osa_tool/tools → osa_tool-0.3.2/osa_tool/ui}/__init__.py +0 -0
  274. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/ui/input_for_chat.py +0 -0
  275. {osa_tool-0.3.0/osa_tool/tools/repository_analysis → osa_tool-0.3.2/osa_tool/utils}/__init__.py +0 -0
  276. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/utils/logger.py +0 -0
  277. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/utils/response_cleaner.py +0 -0
  278. {osa_tool-0.3.0 → osa_tool-0.3.2}/osa_tool/utils/token_counter.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: osa_tool
3
- Version: 0.3.0
3
+ Version: 0.3.2
4
4
  Summary: Tool that just makes your open source project better!
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE
@@ -12,8 +12,10 @@ Classifier: Programming Language :: Python :: 3.11
12
12
  Classifier: Programming Language :: Python :: 3.12
13
13
  Classifier: Programming Language :: Python :: 3.13
14
14
  Classifier: Programming Language :: Python :: 3.14
15
+ Classifier: Programming Language :: Python :: 3.15
15
16
  Provides-Extra: paper-claims
16
- Provides-Extra: repository-validation
17
+ Provides-Extra: paper-claims-lite
18
+ Provides-Extra: paper-claims-marker
17
19
  Requires-Dist: GitPython (>=3.1.40)
18
20
  Requires-Dist: Pygments (>=2.18.0)
19
21
  Requires-Dist: aiofiles (>=24.1.0)
@@ -23,16 +25,13 @@ Requires-Dist: docx2txt (>=0.9)
23
25
  Requires-Dist: json-repair[schema] (>=0.60.0,<0.61.0)
24
26
  Requires-Dist: libcst (>=1.8.6)
25
27
  Requires-Dist: markdown-it-py (>=3.0.0) ; extra == "paper-claims"
26
- Requires-Dist: marker-pdf (>=1.10.2,<2.0.0) ; (python_version < "3.15") and (extra == "paper-claims")
27
- Requires-Dist: matplotlib (>=3.10.9) ; extra == "repository-validation"
28
+ Requires-Dist: marker-pdf (>=1.10.2,<2.0.0) ; (python_version < "3.15") and (extra == "paper-claims-marker")
28
29
  Requires-Dist: mkdocs (>=1.6.0)
29
30
  Requires-Dist: mkdocs-material (>=9.6.0)
30
31
  Requires-Dist: mkdocstrings-python (>=1.16.0)
31
32
  Requires-Dist: mkdocstrings[python] (>=0.29.0)
32
33
  Requires-Dist: nbconvert (>=6.0)
33
34
  Requires-Dist: nbformat (>=5.0)
34
- Requires-Dist: networkx (>=3.6,<3.6.1) ; (python_full_version == "3.14.1") and (extra == "repository-validation")
35
- Requires-Dist: networkx (>=3.6.1) ; (python_full_version != "3.14.1") and (extra == "repository-validation")
36
35
  Requires-Dist: numpy (>=1.26.0,<3.0.0) ; extra == "paper-claims"
37
36
  Requires-Dist: packaging (>=25.0)
38
37
  Requires-Dist: pandas (>=2.2.0,<3.0.0)
@@ -44,15 +43,13 @@ Requires-Dist: pydantic (>=2.9.0,<3.0.0)
44
43
  Requires-Dist: pypdf (>=5.0.0) ; extra == "paper-claims"
45
44
  Requires-Dist: qrcode (>=7.4.0)
46
45
  Requires-Dist: rapidfuzz (>=3.14.0) ; extra == "paper-claims"
46
+ Requires-Dist: rapidfuzz (>=3.14.0) ; extra == "paper-claims-lite"
47
47
  Requires-Dist: reportlab (>=4.2.0,<5.0.0)
48
48
  Requires-Dist: scipy (>=1.13.0,<2.0.0) ; extra == "paper-claims"
49
49
  Requires-Dist: sentence-transformers (>=3.0.0,<6.0.0) ; extra == "paper-claims"
50
50
  Requires-Dist: structlog (>=24.4.0)
51
51
  Requires-Dist: tiktoken (>=0.8.0)
52
52
  Requires-Dist: tomli (>=2.0.0)
53
- Requires-Dist: torch (>=2.11.0) ; (python_version < "3.15") and (extra == "repository-validation")
54
- Requires-Dist: torch-geometric (>=2.7.0) ; extra == "repository-validation"
55
- Requires-Dist: transformers (>=4.45.2,<5.0.0) ; extra == "repository-validation"
56
53
  Requires-Dist: tree-sitter (>=0.23.0)
57
54
  Requires-Dist: tree-sitter-javascript (>=0.25.0)
58
55
  Requires-Dist: tree-sitter-python (>=0.23.0)
@@ -141,14 +138,14 @@ Here is a short video:
141
138
  5. **Workflow Generator**: Automatically generates customizable CI/CD workflows for Python repositories,
142
139
  including unit tests, code formatting, PEP 8 compliance checks, and PyPI publication.
143
140
 
144
- 6. **Thesis (VKR) check**: Evaluates a repository against a set of formal criteria (
145
- non-empty README, license file, etc.). It also extracts claims (unique entities such as preprocessing type, model
146
- architecture, etc.) from the thesis (VKR) text and matches them against the repository's code.
147
-
148
- 7. **Standalone paper claims pipeline**: Extracts technical claims from PDF papers through the reusable
149
- `paper_claims` operation and batch utilities. This pipeline is available as a separate module and is not registered
150
- in the scheduler yet.
151
-
141
+ 6. **Repository-quality score**: Evaluates a repository against formal criteria such as a non-empty README and
142
+ license file. The score is available as part of paper analysis with `--include-repository-quality`.
143
+
144
+ 7. **Paper repository analysis**: The canonical `osa-tool --paper-analysis` mode extracts or resumes typed paper
145
+ claims and verifies them against a repository. Formal repository-quality scoring is optional through
146
+ `--include-repository-quality`. With `--delete-dir`, the command removes only a remote clone created by that
147
+ invocation, never a user-supplied local repository.
148
+
152
149
  ---
153
150
 
154
151
  ## Installation
@@ -167,12 +164,12 @@ Install optional features when needed:
167
164
  # PDF-to-claims extraction and evaluation utilities
168
165
  pip install "osa_tool[paper-claims]"
169
166
 
170
- # Legacy graph-based document and paper validation
171
- pip install "osa_tool[repository-validation]"
167
+ # Add the optional local Marker parser
168
+ pip install "osa_tool[paper-claims,paper-claims-marker]"
172
169
  ```
173
170
 
174
- The core package supports Python 3.11 and later. The `paper-claims` PDF conversion workflow currently requires
175
- Python 3.11--3.14 because its Marker dependency stack is not available for Python 3.15+.
171
+ The core package and remote PDF parsers support Python 3.11 and later. The optional Marker parser requires Python
172
+ 3.11--3.14 because its dependency stack is not available for Python 3.15+.
176
173
 
177
174
  **Build from source:**
178
175
 
@@ -225,31 +222,29 @@ docker build --build-arg GIT_USER_NAME="your-user-name" --build-arg GIT_USER_EMA
225
222
 
226
223
  OSA requires Python 3.11 or higher.
227
224
 
228
- The .env file is required to specify the LLM API key (OPENAI_API_KEY or AUTHORIZATION_KEY) and optionally a Git token.
229
- The Git token (GIT_TOKEN) may be omitted if you plan to work with a public repository without creating a fork (using the
230
- --no-fork option).
231
-
232
- Alternatively, instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab, and
233
- Gitverse respectively.
234
-
235
- When running `osa-tool` from CLI, you need to set the GIT_TOKEN and API key first:
225
+ OSA can be configured in two common ways:
236
226
 
237
227
  ```sh
238
- # Linux / macOS (bash/zsh)
239
- export OPENAI_API_KEY=<your_api_key>
228
+ # Subscription-backed Host LLM provider (api = "host")
229
+ export HOST_LLM_COMMAND=codex
240
230
  export GIT_TOKEN=<your_git_token>
241
231
 
242
- # Windows (PowerShell)
243
- setx OPENAI_API_KEY "<your_api_key>"
244
- setx GIT_TOKEN "<your_git_token>"
232
+ # OpenAI-compatible API provider (--api openai)
233
+ export OPENAI_API_KEY=<your_api_key>
234
+ export GIT_TOKEN=<your_git_token>
245
235
  ```
246
236
 
237
+ The Git token (GIT_TOKEN) may be omitted if you plan to work with a public repository without creating a fork (using the
238
+ --no-fork option). Instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab,
239
+ and Gitverse respectively. `AUTHORIZATION_KEY` is only needed when using Gigachat.
240
+
247
241
  ### Tokens
248
242
 
249
243
  | Token name | Description | Mandatory |
250
244
  |---------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|
251
245
  | `GIT_TOKEN` | Personal GitHub/GitLab/Gitverse token used to clone private repositories, access metadata, and interact with its API. | Yes |
252
- | `OPENAI_API_KEY` | API key for accessing [OpenAI](https://platform.openai.com/docs/api-reference/introduction), [vsegpt](https://vsegpt.ru/Docs/API) and [openrouter](https://openrouter.ai/) providers | No |
246
+ | `HOST_LLM_COMMAND` | Logged-in Codex CLI command used by the subscription-backed `api = "host"` provider (`codex`). | No |
247
+ | `OPENAI_API_KEY` | API key for accessing [OpenAI](https://platform.openai.com/docs/api-reference/introduction), [vsegpt](https://vsegpt.ru/Docs/API), and [openrouter](https://openrouter.ai/) providers through `--api openai`. | No |
253
248
  | `AUTHORIZATION_KEY` | API key for [gigachat](https://developers.sber.ru/portal/products/gigachat-api) provider | No |
254
249
  | `X-API-Key` | API key for the [pepy.tech](https://pepy.tech/pepy-api) REST API, used to fetch Python package download statistics | No |
255
250
 
@@ -271,6 +266,8 @@ python -m osa_tool.run -r {repository} [--api {api}] [--base-url {base_url}] [--
271
266
  docker run --env-file .env {image-name} -r {repository} [--api {api}] [--base-url {base_url}] [--model {model_name}] [--attachment {article}] [--convert-notebooks {notebook_paths}]
272
267
  ```
273
268
 
269
+ Docker runs default to the OpenAI-compatible API-key provider because the container cannot inherit a logged-in host command from the user's machine. Pass `--api host` only when the container has access to a host command or bridge.
270
+
274
271
  The --attachment option enables you to choose a README template for a repository based on an article. You can provide
275
272
  either a link to a PDF file of the article or a path to a local PDF file after the --attachment option. If you are using
276
273
  Docker, ensure that you upload the PDF file to the OSA folder before building the image, then, specify the path as
@@ -281,30 +278,34 @@ documentation, see the [Workflow Generator README](./osa_tool/operations/codebas
281
278
 
282
279
  ### Configuration
283
280
 
284
- | Flag | Description | Default |
285
- |----------------------|-------------------------------------------------------------------------------------|--------------------------------|
286
- | `-r`, `--repository` | URL of the GitHub/GitLab/Gitverse repository (**Mandatory**) | |
287
- | `-b`, `--branch` | Branch name of the repository | Default branch |
288
- | `-o`, `--output` | Path to the output directory | Current working directory |
289
- | `--api` | LLM API service provider | `openai` |
290
- | `--base-url` | URL of the provider compatible with API OpenAI | `https://openrouter.ai/api/v1` |
291
- | `--model` | Specific LLM model to use | `gpt-3.5-turbo` |
292
- | `--top_p` | Nucleus sampling probability | `0.95` |
293
- | `--temperature` | Sampling temperature to use for the LLM output (0 = deterministic, 1 = creative). | `0.05` |
294
- | `--max_tokens` | Maximum number of output tokens the model can generate in a single response | `4096` |
295
- | `--context_window` | Total number of model context (Input + Output) | `16385` |
296
- | `--attachment` | Path to a local PDF or .docx file, or a URL to a PDF resource | `None` |
297
- | `-m`, `--mode` | Operation mode for repository processing: `basic`, `auto` (default), or `advanced`. | `auto` |
298
- | `--delete-dir` | Enable deleting the downloaded repository after processing | `disabled` |
299
- | `--no-fork` | Avoid create fork for target repository | `False` |
300
- | `--no-pull-request` | Avoid create pull request for target repository | `False` |
281
+ | Flag | Description | Default |
282
+ |------------------------|-------------------------------------------------------------------------------------|--------------------------------|
283
+ | `-r`, `--repository` | URL of the GitHub/GitLab/Gitverse repository (**Mandatory**) | |
284
+ | `-b`, `--branch` | Branch name of the repository | Default branch |
285
+ | `--based-on-date` | Analyse the repository version closest to the given date (forces no fork / no PR) | `None` |
286
+ | `-o`, `--output` | Path to the output directory | Current working directory |
287
+ | `--api` | LLM API service provider | `openai` |
288
+ | `--base-url` | URL of the provider compatible with API OpenAI | `https://openrouter.ai/api/v1` |
289
+ | `--model` | Specific LLM model to use | `gpt-3.5-turbo` |
290
+ | `--top-p` | Nucleus sampling probability | `0.95` |
291
+ | `--temperature` | Sampling temperature to use for the LLM output (0 = deterministic, 1 = creative). | `0.05` |
292
+ | `--max-tokens` | Maximum number of output tokens the model can generate in a single response | `4096` |
293
+ | `--context-window` | Total number of model context (Input + Output) | `16385` |
294
+ | `--attachment` | Path to a local PDF or .docx file, or a URL to a PDF resource | `None` |
295
+ | `-m`, `--mode` | Operation mode for repository processing: `basic`, `auto` (default), or `advanced`. | `auto` |
296
+ | `--delete-dir` | Enable deleting the downloaded repository after processing | `disabled` |
297
+ | `--no-fork` | Avoid create fork for target repository | `False` |
298
+ | `--no-pull-request` | Avoid create pull request for target repository | `False` |
299
+ | `--artefacts-language` | Language for report generation | `English` |
301
300
 
302
301
  Also OSA supports custom configuration via TOML files. Use the `--config-file` option to specify a path to custom
303
302
  configuration file. If no custom configuration file is provided, OSA will use the default configuration.
304
303
 
305
- By default, OSA uses a single model for all tasks (specified via `--model`). If you want to use different models for
306
- different types of tasks, disable the `--use-single-model` flag and specify models for each task type (
307
- `--model-docstring`, `--model-readme`, `--model-validation`, `--model-general`).
304
+ OSA uses the shared `[llm]` model settings unless a task-specific profile is configured. Task profiles fall back to the
305
+ shared settings when they do not override a value. The `--use-single-model` flag forces all tasks to use the shared
306
+ `[llm]` settings; omit it to allow task-specific profiles and model flags. Supported task model flags include
307
+ `--model-docstring`, `--model-readme`, `--model-general`, `--model-repository-quality`, `--model-paper-claims`, and
308
+ `--model-paper-verification`. There is no `--model-validation` option in the current CLI.
308
309
 
309
310
  To learn how to work with the interactive CLI and view descriptions of all available keys, visit
310
311
  the [CLI usage guide](./docs/scheduler/index.md).
@@ -318,9 +319,23 @@ Examples of generated README files are available in [examples](./examples).
318
319
  URL of the GitHub/GitLab/Gitverse repository, LLM API service provider (*optional*) and Specific LLM model to use
319
320
  (*optional*) are required to use the generator.
320
321
 
321
- Supported LLM providers are available as part of the [ProtoLLM](https://github.com/aimclub/ProtoLLM/)
322
- ecosystem. See the [connectors directory](https://github.com/aimclub/ProtoLLM/tree/main/protollm/connectors) for the
323
- full list.
322
+ OSA supports the subscription-backed Host LLM provider directly. `HOST_LLM_COMMAND` currently expects the Codex CLI protocol; use the bridge or an API-backed provider when custom generation controls are required. Other LLM providers are available as part of the
323
+ [ProtoLLM](https://github.com/aimclub/ProtoLLM/) ecosystem. See the
324
+ [connectors directory](https://github.com/aimclub/ProtoLLM/tree/main/protollm/connectors) for the full list.
325
+
326
+ Subscription-backed Host LLM:
327
+
328
+ ```sh
329
+ export HOST_LLM_COMMAND=codex
330
+ python -m osa_tool.run -r https://github.com/aimclub/OSA --api host
331
+ ```
332
+
333
+ OpenAI-compatible API key:
334
+
335
+ ```sh
336
+ export OPENAI_API_KEY=<your_api_key>
337
+ python -m osa_tool.run -r https://github.com/aimclub/OSA --api openai --base-url https://api.openai.com/v1 --model gpt-4o
338
+ ```
324
339
 
325
340
  Local ITMO model:
326
341
 
@@ -77,14 +77,14 @@ Here is a short video:
77
77
  5. **Workflow Generator**: Automatically generates customizable CI/CD workflows for Python repositories,
78
78
  including unit tests, code formatting, PEP 8 compliance checks, and PyPI publication.
79
79
 
80
- 6. **Thesis (VKR) check**: Evaluates a repository against a set of formal criteria (
81
- non-empty README, license file, etc.). It also extracts claims (unique entities such as preprocessing type, model
82
- architecture, etc.) from the thesis (VKR) text and matches them against the repository's code.
83
-
84
- 7. **Standalone paper claims pipeline**: Extracts technical claims from PDF papers through the reusable
85
- `paper_claims` operation and batch utilities. This pipeline is available as a separate module and is not registered
86
- in the scheduler yet.
87
-
80
+ 6. **Repository-quality score**: Evaluates a repository against formal criteria such as a non-empty README and
81
+ license file. The score is available as part of paper analysis with `--include-repository-quality`.
82
+
83
+ 7. **Paper repository analysis**: The canonical `osa-tool --paper-analysis` mode extracts or resumes typed paper
84
+ claims and verifies them against a repository. Formal repository-quality scoring is optional through
85
+ `--include-repository-quality`. With `--delete-dir`, the command removes only a remote clone created by that
86
+ invocation, never a user-supplied local repository.
87
+
88
88
  ---
89
89
 
90
90
  ## Installation
@@ -103,12 +103,12 @@ Install optional features when needed:
103
103
  # PDF-to-claims extraction and evaluation utilities
104
104
  pip install "osa_tool[paper-claims]"
105
105
 
106
- # Legacy graph-based document and paper validation
107
- pip install "osa_tool[repository-validation]"
106
+ # Add the optional local Marker parser
107
+ pip install "osa_tool[paper-claims,paper-claims-marker]"
108
108
  ```
109
109
 
110
- The core package supports Python 3.11 and later. The `paper-claims` PDF conversion workflow currently requires
111
- Python 3.11--3.14 because its Marker dependency stack is not available for Python 3.15+.
110
+ The core package and remote PDF parsers support Python 3.11 and later. The optional Marker parser requires Python
111
+ 3.11--3.14 because its dependency stack is not available for Python 3.15+.
112
112
 
113
113
  **Build from source:**
114
114
 
@@ -161,31 +161,29 @@ docker build --build-arg GIT_USER_NAME="your-user-name" --build-arg GIT_USER_EMA
161
161
 
162
162
  OSA requires Python 3.11 or higher.
163
163
 
164
- The .env file is required to specify the LLM API key (OPENAI_API_KEY or AUTHORIZATION_KEY) and optionally a Git token.
165
- The Git token (GIT_TOKEN) may be omitted if you plan to work with a public repository without creating a fork (using the
166
- --no-fork option).
167
-
168
- Alternatively, instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab, and
169
- Gitverse respectively.
170
-
171
- When running `osa-tool` from CLI, you need to set the GIT_TOKEN and API key first:
164
+ OSA can be configured in two common ways:
172
165
 
173
166
  ```sh
174
- # Linux / macOS (bash/zsh)
175
- export OPENAI_API_KEY=<your_api_key>
167
+ # Subscription-backed Host LLM provider (api = "host")
168
+ export HOST_LLM_COMMAND=codex
176
169
  export GIT_TOKEN=<your_git_token>
177
170
 
178
- # Windows (PowerShell)
179
- setx OPENAI_API_KEY "<your_api_key>"
180
- setx GIT_TOKEN "<your_git_token>"
171
+ # OpenAI-compatible API provider (--api openai)
172
+ export OPENAI_API_KEY=<your_api_key>
173
+ export GIT_TOKEN=<your_git_token>
181
174
  ```
182
175
 
176
+ The Git token (GIT_TOKEN) may be omitted if you plan to work with a public repository without creating a fork (using the
177
+ --no-fork option). Instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab,
178
+ and Gitverse respectively. `AUTHORIZATION_KEY` is only needed when using Gigachat.
179
+
183
180
  ### Tokens
184
181
 
185
182
  | Token name | Description | Mandatory |
186
183
  |---------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|
187
184
  | `GIT_TOKEN` | Personal GitHub/GitLab/Gitverse token used to clone private repositories, access metadata, and interact with its API. | Yes |
188
- | `OPENAI_API_KEY` | API key for accessing [OpenAI](https://platform.openai.com/docs/api-reference/introduction), [vsegpt](https://vsegpt.ru/Docs/API) and [openrouter](https://openrouter.ai/) providers | No |
185
+ | `HOST_LLM_COMMAND` | Logged-in Codex CLI command used by the subscription-backed `api = "host"` provider (`codex`). | No |
186
+ | `OPENAI_API_KEY` | API key for accessing [OpenAI](https://platform.openai.com/docs/api-reference/introduction), [vsegpt](https://vsegpt.ru/Docs/API), and [openrouter](https://openrouter.ai/) providers through `--api openai`. | No |
189
187
  | `AUTHORIZATION_KEY` | API key for [gigachat](https://developers.sber.ru/portal/products/gigachat-api) provider | No |
190
188
  | `X-API-Key` | API key for the [pepy.tech](https://pepy.tech/pepy-api) REST API, used to fetch Python package download statistics | No |
191
189
 
@@ -207,6 +205,8 @@ python -m osa_tool.run -r {repository} [--api {api}] [--base-url {base_url}] [--
207
205
  docker run --env-file .env {image-name} -r {repository} [--api {api}] [--base-url {base_url}] [--model {model_name}] [--attachment {article}] [--convert-notebooks {notebook_paths}]
208
206
  ```
209
207
 
208
+ Docker runs default to the OpenAI-compatible API-key provider because the container cannot inherit a logged-in host command from the user's machine. Pass `--api host` only when the container has access to a host command or bridge.
209
+
210
210
  The --attachment option enables you to choose a README template for a repository based on an article. You can provide
211
211
  either a link to a PDF file of the article or a path to a local PDF file after the --attachment option. If you are using
212
212
  Docker, ensure that you upload the PDF file to the OSA folder before building the image, then, specify the path as
@@ -217,30 +217,34 @@ documentation, see the [Workflow Generator README](./osa_tool/operations/codebas
217
217
 
218
218
  ### Configuration
219
219
 
220
- | Flag | Description | Default |
221
- |----------------------|-------------------------------------------------------------------------------------|--------------------------------|
222
- | `-r`, `--repository` | URL of the GitHub/GitLab/Gitverse repository (**Mandatory**) | |
223
- | `-b`, `--branch` | Branch name of the repository | Default branch |
224
- | `-o`, `--output` | Path to the output directory | Current working directory |
225
- | `--api` | LLM API service provider | `openai` |
226
- | `--base-url` | URL of the provider compatible with API OpenAI | `https://openrouter.ai/api/v1` |
227
- | `--model` | Specific LLM model to use | `gpt-3.5-turbo` |
228
- | `--top_p` | Nucleus sampling probability | `0.95` |
229
- | `--temperature` | Sampling temperature to use for the LLM output (0 = deterministic, 1 = creative). | `0.05` |
230
- | `--max_tokens` | Maximum number of output tokens the model can generate in a single response | `4096` |
231
- | `--context_window` | Total number of model context (Input + Output) | `16385` |
232
- | `--attachment` | Path to a local PDF or .docx file, or a URL to a PDF resource | `None` |
233
- | `-m`, `--mode` | Operation mode for repository processing: `basic`, `auto` (default), or `advanced`. | `auto` |
234
- | `--delete-dir` | Enable deleting the downloaded repository after processing | `disabled` |
235
- | `--no-fork` | Avoid create fork for target repository | `False` |
236
- | `--no-pull-request` | Avoid create pull request for target repository | `False` |
220
+ | Flag | Description | Default |
221
+ |------------------------|-------------------------------------------------------------------------------------|--------------------------------|
222
+ | `-r`, `--repository` | URL of the GitHub/GitLab/Gitverse repository (**Mandatory**) | |
223
+ | `-b`, `--branch` | Branch name of the repository | Default branch |
224
+ | `--based-on-date` | Analyse the repository version closest to the given date (forces no fork / no PR) | `None` |
225
+ | `-o`, `--output` | Path to the output directory | Current working directory |
226
+ | `--api` | LLM API service provider | `openai` |
227
+ | `--base-url` | URL of the provider compatible with API OpenAI | `https://openrouter.ai/api/v1` |
228
+ | `--model` | Specific LLM model to use | `gpt-3.5-turbo` |
229
+ | `--top-p` | Nucleus sampling probability | `0.95` |
230
+ | `--temperature` | Sampling temperature to use for the LLM output (0 = deterministic, 1 = creative). | `0.05` |
231
+ | `--max-tokens` | Maximum number of output tokens the model can generate in a single response | `4096` |
232
+ | `--context-window` | Total number of model context (Input + Output) | `16385` |
233
+ | `--attachment` | Path to a local PDF or .docx file, or a URL to a PDF resource | `None` |
234
+ | `-m`, `--mode` | Operation mode for repository processing: `basic`, `auto` (default), or `advanced`. | `auto` |
235
+ | `--delete-dir` | Enable deleting the downloaded repository after processing | `disabled` |
236
+ | `--no-fork` | Avoid create fork for target repository | `False` |
237
+ | `--no-pull-request` | Avoid create pull request for target repository | `False` |
238
+ | `--artefacts-language` | Language for report generation | `English` |
237
239
 
238
240
  Also OSA supports custom configuration via TOML files. Use the `--config-file` option to specify a path to custom
239
241
  configuration file. If no custom configuration file is provided, OSA will use the default configuration.
240
242
 
241
- By default, OSA uses a single model for all tasks (specified via `--model`). If you want to use different models for
242
- different types of tasks, disable the `--use-single-model` flag and specify models for each task type (
243
- `--model-docstring`, `--model-readme`, `--model-validation`, `--model-general`).
243
+ OSA uses the shared `[llm]` model settings unless a task-specific profile is configured. Task profiles fall back to the
244
+ shared settings when they do not override a value. The `--use-single-model` flag forces all tasks to use the shared
245
+ `[llm]` settings; omit it to allow task-specific profiles and model flags. Supported task model flags include
246
+ `--model-docstring`, `--model-readme`, `--model-general`, `--model-repository-quality`, `--model-paper-claims`, and
247
+ `--model-paper-verification`. There is no `--model-validation` option in the current CLI.
244
248
 
245
249
  To learn how to work with the interactive CLI and view descriptions of all available keys, visit
246
250
  the [CLI usage guide](./docs/scheduler/index.md).
@@ -254,9 +258,23 @@ Examples of generated README files are available in [examples](./examples).
254
258
  URL of the GitHub/GitLab/Gitverse repository, LLM API service provider (*optional*) and Specific LLM model to use
255
259
  (*optional*) are required to use the generator.
256
260
 
257
- Supported LLM providers are available as part of the [ProtoLLM](https://github.com/aimclub/ProtoLLM/)
258
- ecosystem. See the [connectors directory](https://github.com/aimclub/ProtoLLM/tree/main/protollm/connectors) for the
259
- full list.
261
+ OSA supports the subscription-backed Host LLM provider directly. `HOST_LLM_COMMAND` currently expects the Codex CLI protocol; use the bridge or an API-backed provider when custom generation controls are required. Other LLM providers are available as part of the
262
+ [ProtoLLM](https://github.com/aimclub/ProtoLLM/) ecosystem. See the
263
+ [connectors directory](https://github.com/aimclub/ProtoLLM/tree/main/protollm/connectors) for the full list.
264
+
265
+ Subscription-backed Host LLM:
266
+
267
+ ```sh
268
+ export HOST_LLM_COMMAND=codex
269
+ python -m osa_tool.run -r https://github.com/aimclub/OSA --api host
270
+ ```
271
+
272
+ OpenAI-compatible API key:
273
+
274
+ ```sh
275
+ export OPENAI_API_KEY=<your_api_key>
276
+ python -m osa_tool.run -r https://github.com/aimclub/OSA --api openai --base-url https://api.openai.com/v1 --model gpt-4o
277
+ ```
260
278
 
261
279
  Local ITMO model:
262
280
 
@@ -0,0 +1,168 @@
1
+ language = "English"
2
+
3
+ [translations]
4
+ report_header = "Repository Analysis Report"
5
+ statistics = "Statistics"
6
+ values = "Values"
7
+ stars_count = "Stars Count"
8
+ forks_count = "Forks Count"
9
+ issues_count = "Issues Count"
10
+ metric = "Metric"
11
+ readme_presence = "README Presence"
12
+ license_presence = "License Presence"
13
+ documentation_presence = "Documentation Presence"
14
+ examples_presence = "Examples Presence"
15
+ requirements_presence = "Requirements Presence"
16
+ tests_presence = "Tests Presence"
17
+ description_presence = "Description Presence"
18
+ repository_name = "Repository Name"
19
+ owner = "Owner"
20
+ created_at = "Created at"
21
+ repository_structure = "Repository Structure"
22
+ compliance = "Compliance"
23
+ missing_files = "Missing Files"
24
+ organization = "Organization"
25
+ readme_analysis = "README Analysis"
26
+ quality = "Quality"
27
+ documentation = "Documentation"
28
+ test_present = "Test present"
29
+ documentation_quality = "Document quality"
30
+ outdated_content = "Outdated content"
31
+ key_shortcomings = "Key Shortcomings"
32
+ recommendations = "Recommendations"
33
+ readme_quality = "text"
34
+ project_description = "Project description"
35
+ installation = "Installation"
36
+ usage_examples = "Usage examples"
37
+ contribution_guidelines = "Contribution guidelines"
38
+ license_specified = "License specified"
39
+ badges_present = "Badges present"
40
+ summary_header = "OSA Work Summary"
41
+ what_have_been_done = "What have been done"
42
+ report_by_tasks = "Report by tasks"
43
+ yes = "Yes"
44
+ no = "No"
45
+ partial = "Partial"
46
+ report = "Report"
47
+ translate_dirs = "Translate dirs"
48
+ convert_notebooks = "Convert notebooks"
49
+ translate_readme = "Translate readme"
50
+ ensure_license = "Ensure license"
51
+ community_docs = "Community docs"
52
+ docstring = "Docstring"
53
+ ignore_list = "Ignore list"
54
+ incremental = "Incremental"
55
+ target_files = "Target files"
56
+ readme = "Readme"
57
+ refine_readme = "Refine readme"
58
+ requirements = "Requirements"
59
+ organize = "Organize"
60
+ about = "About"
61
+ validate_paper = "Validate paper"
62
+ validate_doc = "Validate doc"
63
+ author = "Author"
64
+ generate_workflows = "Generate workflows"
65
+ include_tests = "Include tests"
66
+ include_black = "Include black"
67
+ include_pep8 = "Include pep8"
68
+ include_autopep8 = "Include autopep8"
69
+ include_fix_pep8 = "Include fix pep8"
70
+ include_pypi = "Include pypi"
71
+ python_versions = "Python versions"
72
+ pep8_tool = "Pep8 tool"
73
+ use_poetry = "Use poetry"
74
+ include_codecov = "Include codecov"
75
+ unknown = "Unknown"
76
+ for = "for"
77
+
78
+ # Notebook Analysis Report
79
+ notebook_report_header = "Notebook Analysis Report"
80
+ notebook_summary = "Notebook Summary"
81
+ value = "Value"
82
+ quality_signals = "Quality Signals"
83
+ total_notebooks_scanned = "Total notebooks scanned"
84
+ total_findings = "Total findings"
85
+ successfully_analyzed = "Successfully analyzed"
86
+ invalid_syntax_notebooks = "Invalid syntax notebooks"
87
+ read_or_parse_failures = "Read or parse failures"
88
+ fully_non_executed_notebooks = "Fully non-executed notebooks"
89
+ notebooks_with_findings = "Notebooks with findings"
90
+ analysis_scope = "Analysis scope"
91
+ repository_wide = "Repository-wide"
92
+ overview = "Overview"
93
+ notebook_overview_text = "This report reviewed <b>{total_notebooks}</b> notebook(s) and recorded <b>{total_issues}</b> finding(s) across structure, execution, and readability."
94
+ notebook_explicit_targets = "Selected targets were provided explicitly: <b>{count}</b> path(s)."
95
+ notebook_full_scan = "Scope: full repository notebook scan."
96
+ most_frequent_findings = "Most Frequent Findings"
97
+ notebook_details = "Notebook Details"
98
+ status_label = "Status"
99
+ analysis_errors_present = "analysis errors present"
100
+ finding_count = "{count} finding(s)"
101
+ no_findings_detected = "no findings detected"
102
+ cells_line = "Cells: total <b>{total}</b>, code {code}, markdown {markdown}, raw {raw}"
103
+ markdown_line = "Markdown lines {lines}, titles {titles}, functions {functions}, classes {classes}"
104
+ analysis_error_line = "Analysis error: {error}"
105
+ no_notebook_issues = "No notebook issues detected."
106
+ recommendation_label = "Recommendation"
107
+
108
+ # Notebook issue catalog (keyed by NotebookReportAnalyzer's slug).
109
+ # NOTE: the "notebook-too-long" text below bakes in the current _MAX_CELLS_IN_NOTEBOOK
110
+ # threshold (50); update both locales together if that constant ever changes.
111
+ "notebook_issue_non-linear-execution_description" = "Notebook cells were executed in a non-linear order."
112
+ "notebook_issue_non-linear-execution_recommendation" = "Re-run your notebook top to bottom to ensure it is reproducible."
113
+ "notebook_issue_notebook-too-long_description" = "Notebook contains more than 50 cells."
114
+ "notebook_issue_notebook-too-long_recommendation" = "Split this notebook into two or more notebooks."
115
+ "notebook_issue_imports-beyond-first-cell_description" = "Import statements were found beyond the first code cell."
116
+ "notebook_issue_imports-beyond-first-cell_recommendation" = "Move import statements to the first code cell to make your notebook dependencies more explicit."
117
+ "notebook_issue_missing-h1-heading_description" = "Initial cells do not contain an H1 markdown heading."
118
+ "notebook_issue_missing-h1-heading_recommendation" = "Clarify the notebook subject by writing an H1 Markdown heading in one of the initial cells of your notebook."
119
+ "notebook_issue_missing-opening-markdown_description" = "Initial notebook cells do not contain descriptive markdown text."
120
+ "notebook_issue_missing-opening-markdown_recommendation" = "Begin your notebook by describing what you intend to do in one or more introductory Markdown cells."
121
+ "notebook_issue_missing-closing-markdown_description" = "Final notebook cells do not contain descriptive markdown text."
122
+ "notebook_issue_missing-closing-markdown_recommendation" = "Conclude your notebook by describing what you have accomplished in one or more concluding Markdown cells."
123
+ "notebook_issue_too-few-markdown-cells_description" = "Notebook contains too few markdown cells relative to code cells."
124
+ "notebook_issue_too-few-markdown-cells_recommendation" = "Describe the steps of your computation by adding a few more Markdown cells."
125
+ "notebook_issue_invalid-python-syntax_description" = "Notebook contains invalid Python syntax in exported code."
126
+ "notebook_issue_invalid-python-syntax_recommendation" = "Fix syntax errors in the notebook code cells."
127
+ "notebook_issue_non-executed-notebook_description" = "All code cells appear to be non-executed."
128
+ "notebook_issue_non-executed-notebook_recommendation" = "Before committing, run your notebook top to bottom to ensure that all cells are executed."
129
+ "notebook_issue_non-executed-cells_description" = "Notebook contains non-executed code cells."
130
+ "notebook_issue_non-executed-cells_recommendation" = "Re-run your notebook top to bottom to ensure that all cells are executed."
131
+ "notebook_issue_empty-cells_description" = "Notebook contains empty code cells."
132
+ "notebook_issue_empty-cells_recommendation" = "Keep your notebook clean by deleting unused cells."
133
+ "notebook_issue_long-multiline-python-comment_description" = "Notebook contains long multiline Python comments inside code cells."
134
+ "notebook_issue_long-multiline-python-comment_recommendation" = "For improved notebook readability, prefer using Markdown formatted text to long multiline Python comments."
135
+ "notebook_issue_cell-too-long_description" = "Notebook contains long code cells."
136
+ "notebook_issue_cell-too-long_recommendation" = "Consider consolidating your code outside the notebook by moving utility functions to a structured and tested codebase.\nUse notebooks to display results, not to compute them."
137
+ "notebook_issue_untitled-notebook_description" = "Notebook still uses a default Untitled name."
138
+ "notebook_issue_untitled-notebook_recommendation" = "Give it a meaningful title to make it easy to recognize."
139
+ "notebook_issue_non-portable-chars-in-name_description" = "Notebook filename contains non-portable characters."
140
+ "notebook_issue_non-portable-chars-in-name_recommendation" = "Rename your notebook by using characters contained in the following portable charset: [A-Za-z0-9_.-]."
141
+ "notebook_issue_duplicate-notebook-not-renamed_description" = "Notebook looks like a duplicate copy that was not renamed."
142
+ "notebook_issue_duplicate-notebook-not-renamed_recommendation" = "Give it a meaningful title to make it easy to recognize."
143
+
144
+ # Notebook issue short labels (used in the "Most Frequent Findings" list).
145
+ "notebook_issue_non-linear-execution_label" = "Non-linear execution"
146
+ "notebook_issue_notebook-too-long_label" = "Notebook too long"
147
+ "notebook_issue_imports-beyond-first-cell_label" = "Imports beyond first cell"
148
+ "notebook_issue_missing-h1-heading_label" = "Missing H1 heading"
149
+ "notebook_issue_missing-opening-markdown_label" = "Missing opening markdown"
150
+ "notebook_issue_missing-closing-markdown_label" = "Missing closing markdown"
151
+ "notebook_issue_too-few-markdown-cells_label" = "Too few markdown cells"
152
+ "notebook_issue_invalid-python-syntax_label" = "Invalid Python syntax"
153
+ "notebook_issue_non-executed-notebook_label" = "Non-executed notebook"
154
+ "notebook_issue_non-executed-cells_label" = "Non-executed cells"
155
+ "notebook_issue_empty-cells_label" = "Empty cells"
156
+ "notebook_issue_long-multiline-python-comment_label" = "Long multiline Python comment"
157
+ "notebook_issue_cell-too-long_label" = "Cell too long"
158
+ "notebook_issue_untitled-notebook_label" = "Untitled notebook"
159
+ "notebook_issue_non-portable-chars-in-name_label" = "Non-portable characters in name"
160
+ "notebook_issue_duplicate-notebook-not-renamed_label" = "Duplicate notebook not renamed"
161
+
162
+ # Notebook issue "details" fragments (only slugs that carry dynamic details_kwargs).
163
+ "notebook_issue_notebook-too-long_details" = "Detected {count} cells."
164
+ "notebook_issue_too-few-markdown-cells_details" = "Markdown/code ratio is {ratio:.2f}."
165
+ "notebook_issue_non-executed-cells_details" = "{count} code cell(s) are non-executed."
166
+ "notebook_issue_empty-cells_details" = "{count} empty code cell(s) detected."
167
+ "notebook_issue_long-multiline-python-comment_details" = "{count} code cell(s) contain long comment blocks."
168
+ "notebook_issue_cell-too-long_details" = "{count} code cell(s) exceed {limit} lines."