ara-cli 0.1.9.66__tar.gz → 0.1.9.67__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ara-cli might be problematic. Click here for more details.

Files changed (166) hide show
  1. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/MANIFEST.in +2 -0
  2. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/PKG-INFO +1 -1
  3. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/README.md +1 -1
  4. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/ara_command_action.py +15 -5
  5. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/ara_command_parser.py +4 -1
  6. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/ara_config.py +9 -19
  7. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_autofix.py +73 -27
  8. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_models/artefact_model.py +1 -4
  9. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_scan.py +11 -1
  10. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/prompt_handler.py +2 -1
  11. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/version.py +1 -1
  12. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli.egg-info/PKG-INFO +1 -1
  13. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli.egg-info/SOURCES.txt +22 -20
  14. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli.egg-info/top_level.txt +1 -0
  15. ara_cli-0.1.9.67/docker/base/requirements.txt +12 -0
  16. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/setup.py +4 -14
  17. ara_cli-0.1.9.67/tests/__init__.py +0 -0
  18. ara_cli-0.1.9.67/tests/test_ara_autofix.py +219 -0
  19. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_artefact_renamer.py +3 -5
  20. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_artefact_scan.py +37 -10
  21. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_chat.py +39 -22
  22. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_file_creator.py +1 -1
  23. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_template_manager.py +37 -21
  24. ara_cli-0.1.9.66/ara_cli/tests/test_ara_autofix.py +0 -113
  25. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/__init__.py +0 -0
  26. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/__main__.py +0 -0
  27. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_creator.py +0 -0
  28. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_deleter.py +0 -0
  29. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_fuzzy_search.py +0 -0
  30. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_link_updater.py +0 -0
  31. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_lister.py +0 -0
  32. {ara_cli-0.1.9.66/ara_cli/tests → ara_cli-0.1.9.67/ara_cli/artefact_models}/__init__.py +0 -0
  33. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_models/artefact_load.py +0 -0
  34. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_models/artefact_mapping.py +0 -0
  35. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_models/artefact_templates.py +0 -0
  36. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_models/businessgoal_artefact_model.py +0 -0
  37. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_models/capability_artefact_model.py +0 -0
  38. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_models/epic_artefact_model.py +0 -0
  39. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_models/example_artefact_model.py +0 -0
  40. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_models/feature_artefact_model.py +0 -0
  41. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_models/issue_artefact_model.py +0 -0
  42. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_models/keyfeature_artefact_model.py +0 -0
  43. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_models/serialize_helper.py +0 -0
  44. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_models/task_artefact_model.py +0 -0
  45. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_models/userstory_artefact_model.py +0 -0
  46. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_models/vision_artefact_model.py +0 -0
  47. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_reader.py +0 -0
  48. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/artefact_renamer.py +0 -0
  49. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/chat.py +0 -0
  50. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/classifier.py +0 -0
  51. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/codefusionretriever.py +0 -0
  52. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/codehierachieretriever.py +0 -0
  53. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/commandline_completer.py +0 -0
  54. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/directory_navigator.py +0 -0
  55. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/file_classifier.py +0 -0
  56. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/file_lister.py +0 -0
  57. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/filename_validator.py +0 -0
  58. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/list_filter.py +0 -0
  59. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/output_suppressor.py +0 -0
  60. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/prompt_chat.py +0 -0
  61. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/prompt_extractor.py +0 -0
  62. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/prompt_rag.py +0 -0
  63. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/run_file_lister.py +0 -0
  64. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/tag_extractor.py +0 -0
  65. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/template_manager.py +0 -0
  66. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/agile.artefacts +0 -0
  67. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/blueprints/complete_pytest_unittest.blueprint.md +0 -0
  68. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/blueprints/empty.blueprint.md +0 -0
  69. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/blueprints/task_todo_list_C4_architecture_analysis.blueprint.md +0 -0
  70. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/blueprints/task_todo_list_implement_feature_BDD_way.blueprint.md +0 -0
  71. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/architecture_C4_analysis.commands.md +0 -0
  72. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/architecture_radon_cc_score.commands.md +0 -0
  73. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/architecture_radon_halstead_v.commands.md +0 -0
  74. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/architecture_radon_maintainability_score.commands.md +0 -0
  75. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/artefact_classification.commands.md +0 -0
  76. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/artefact_extension.commands.md +0 -0
  77. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/artefact_formulation.commands.md +0 -0
  78. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/behave_step_generation.commands.md +0 -0
  79. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/code_generation_complex.commands.md +0 -0
  80. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/code_generation_simple.commands.md +0 -0
  81. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/empty.commands.md +0 -0
  82. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/error_fixing.commands.md +0 -0
  83. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/feature_file_update.commands.md +0 -0
  84. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/feature_formulation.commands.md +0 -0
  85. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/js_code_generation_simple.commands.md +0 -0
  86. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/refactoring.commands.md +0 -0
  87. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/refactoring_analysis.commands.md +0 -0
  88. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/reverse_engineer_feature_file.commands.md +0 -0
  89. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/commands/reverse_engineer_program_flow.commands.md +0 -0
  90. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/classify_task.intention.md +0 -0
  91. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/empty.intention.md +0 -0
  92. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/error_fixing.intention.md +0 -0
  93. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/feature_fix_steps_for_scenario.intention.md +0 -0
  94. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/feature_formulation.intention.md +0 -0
  95. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/feature_reverse_formulation_from_code.intention.md +0 -0
  96. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/feature_scenario_implementation.intention.md +0 -0
  97. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/feature_scenario_implementation_update.intention.md +0 -0
  98. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/feature_scenario_outline_extension.intention.md +0 -0
  99. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/feature_update_formulation.intention.md +0 -0
  100. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/fibonacci_example_implementation.intention.md +0 -0
  101. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/js_implementation_from_task_description.intention.md +0 -0
  102. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/js_steps_implementation.intention.md +0 -0
  103. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/python_cli_implementation_with_test.intention.md +0 -0
  104. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/python_code_understanding.intention.md +0 -0
  105. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/task_implementation.intention.md +0 -0
  106. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/task_prompt_control_by_status.intention.md +0 -0
  107. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/task_stepwise_implementation_by_number.intention.md +0 -0
  108. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/intentions/task_stepwise_implementation_by_status.intention.md +0 -0
  109. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/rules/architecture_analyst.rules.md +0 -0
  110. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/rules/code_analyst.rules.md +0 -0
  111. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/rules/empty.rules.md +0 -0
  112. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/rules/error_analyst.rules.md +0 -0
  113. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/rules/gherkin_expert.rules.md +0 -0
  114. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/rules/js_expert_developer.rules.md +0 -0
  115. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/rules/product_owner.rules.md +0 -0
  116. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/rules/python_behave.rules.md +0 -0
  117. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/prompt-modules/rules/python_developer.rules.md +0 -0
  118. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/specification_breakdown_files/template.concept.exploration.md +0 -0
  119. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/specification_breakdown_files/template.concept.md +0 -0
  120. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/specification_breakdown_files/template.customer.exploration.md +0 -0
  121. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/specification_breakdown_files/template.customer.md +0 -0
  122. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/specification_breakdown_files/template.persona.exploration.md +0 -0
  123. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/specification_breakdown_files/template.persona.md +0 -0
  124. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/specification_breakdown_files/template.step.exploration.md +0 -0
  125. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/specification_breakdown_files/template.step.md +0 -0
  126. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/specification_breakdown_files/template.technology.exploration.md +0 -0
  127. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/specification_breakdown_files/template.technology.md +0 -0
  128. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.businessgoal +0 -0
  129. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.businessgoal.prompt_log.md +0 -0
  130. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.capability +0 -0
  131. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.capability.prompt_log.md +0 -0
  132. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.epic +0 -0
  133. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.epic.prompt_log.md +0 -0
  134. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.example +0 -0
  135. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.example.prompt_log.md +0 -0
  136. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.feature +0 -0
  137. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.feature.prompt_log.md +0 -0
  138. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.issue +0 -0
  139. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.issue.prompt_log.md +0 -0
  140. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.keyfeature +0 -0
  141. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.keyfeature.prompt_log.md +0 -0
  142. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.steps.prompt_log.md +0 -0
  143. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.task +0 -0
  144. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.task.prompt_log.md +0 -0
  145. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.userstory +0 -0
  146. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.userstory.prompt_log.md +0 -0
  147. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.vision +0 -0
  148. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/templates/template.vision.prompt_log.md +0 -0
  149. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli/update_config_prompt.py +0 -0
  150. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli.egg-info/dependency_links.txt +0 -0
  151. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli.egg-info/entry_points.txt +0 -0
  152. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/ara_cli.egg-info/requires.txt +0 -0
  153. {ara_cli-0.1.9.66 → ara_cli-0.1.9.67}/setup.cfg +0 -0
  154. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_ara_command_action.py +0 -0
  155. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_ara_config.py +0 -0
  156. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_artefact_fuzzy_search.py +0 -0
  157. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_artefact_link_updater.py +0 -0
  158. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_artefact_lister.py +0 -0
  159. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_artefact_reader.py +0 -0
  160. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_classifier.py +0 -0
  161. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_directory_navigator.py +0 -0
  162. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_file_classifier.py +0 -0
  163. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_file_lister.py +0 -0
  164. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_list_filter.py +0 -0
  165. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_tag_extractor.py +0 -0
  166. {ara_cli-0.1.9.66/ara_cli → ara_cli-0.1.9.67}/tests/test_update_config_prompt.py +0 -0
@@ -1,2 +1,4 @@
1
1
  recursive-include ara_cli/templates *
2
2
  recursive-include ara_cli/artefact_models *
3
+
4
+ include docker/base/requirements.txt
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ara_cli
3
- Version: 0.1.9.66
3
+ Version: 0.1.9.67
4
4
  Requires-Dist: litellm
5
5
  Requires-Dist: llama-index
6
6
  Requires-Dist: llama-index-llms-openai
@@ -46,7 +46,7 @@ To update dependencies, add package names in `setup.py`. The packages will ONLY
46
46
  3. --> in container --> for behave BDD tests `bash test-feature.sh`
47
47
  3. a) --> in container --> for only 1 test: behave ara/features/<name>.feature
48
48
  3. b) --> in container --> for unit tests and (if successful) feature tests: `bash test-all.sh`
49
- 4. --> in container --> for unit tests in folder ara_cli `pytest --cov=. --cov-report term-missing ara_cli/tests/ `
49
+ 4. --> in container --> for unit tests in folder ara_cli `pytest --cov=. --cov-report term-missing tests/ `
50
50
  5. --> in container --> example for running a single unit test in ara_cli folder `pytest tests/test_template_manager.py::test_files_created_from_template`
51
51
  6. if change is successfull always commit before proceeding with next change
52
52
  7. if change was successfully reviewd merge in gitlab: https://git.talsen.team/talsen-products/ara-cli/-/merge_requests/new
@@ -576,22 +576,32 @@ def scan_action(args):
576
576
  def autofix_action(args):
577
577
  from ara_cli.artefact_autofix import parse_report, apply_autofix, read_report_file
578
578
 
579
- content = read_report_file()
579
+ # If the user passes --non-deterministic, only_deterministic_fix becomes False.
580
+ # If the user passes --deterministic, only_non_deterministic_fix becomes False.
581
+ # If no flags are passed, both are True, and all fixes are attempted.
582
+ run_deterministic = not args.non_deterministic
583
+ run_non_deterministic = not args.deterministic
580
584
 
585
+ content = read_report_file()
581
586
  if not content:
582
587
  return False
583
588
 
584
589
  issues = parse_report(content)
585
-
586
590
  if not issues:
587
591
  print("No issues found in the report. Nothing to fix.")
588
592
  return
589
593
 
590
- # print("Found issues to fix:")
594
+ # print("\nStarting autofix process...")
591
595
  for classifier, files in issues.items():
592
596
  print(f"\nClassifier: {classifier}")
593
597
  for file_path, reason in files:
594
- print(f"Attempting to fix {file_path} for reason: {reason}")
595
- apply_autofix(file_path, classifier, reason)
598
+ apply_autofix(
599
+ file_path,
600
+ classifier,
601
+ reason,
602
+ deterministic=run_deterministic,
603
+ non_deterministic=run_non_deterministic
604
+ )
596
605
 
597
606
  print("\nAutofix process completed. Please review the changes.")
607
+
@@ -229,7 +229,10 @@ def scan_parser(subparsers):
229
229
 
230
230
 
231
231
  def autofix_parser(subparsers):
232
- subparsers.add_parser("autofix", help="Fix ARA tree with llm models for scanned artefacts with ara scan command.")
232
+ autofix_parser = subparsers.add_parser("autofix", help="Fix ARA tree with llm models for scanned artefacts with ara scan command.")
233
+ determinism_group = autofix_parser.add_mutually_exclusive_group()
234
+ determinism_group.add_argument("--deterministic", "-d", action="store_true", help="Run only deterministic fixes e.g Title-FileName Mismatch fix")
235
+ determinism_group.add_argument("--non-deterministic", "-nd", action="store_true", help="Run only non-deterministic fixes")
233
236
 
234
237
 
235
238
  class CustomHelpFormatter(argparse.HelpFormatter):
@@ -42,9 +42,9 @@ class ARAconfig(BaseModel):
42
42
  "model": "openai/gpt-4o",
43
43
  "temperature": 0.8
44
44
  },
45
- "gpt-4.5-preview": {
45
+ "gpt-4.1": {
46
46
  "provider": "openai",
47
- "model": "openai/gpt-4.5-preview",
47
+ "model": "openai/gpt-4.1",
48
48
  "temperature": 0.8,
49
49
  },
50
50
  "o3-mini": {
@@ -52,9 +52,14 @@ class ARAconfig(BaseModel):
52
52
  "model": "openai/o3-mini",
53
53
  "temperature": 1.0,
54
54
  },
55
- "claude-3.7": {
55
+ "opus-4": {
56
+ "provider": "anthropic",
57
+ "model": "anthropic/claude-opus-4-20250514",
58
+ "temperature": 0.8,
59
+ },
60
+ "sonnet-4": {
56
61
  "provider": "anthropic",
57
- "model": "anthropic/claude-3-7-sonnet-20250219",
62
+ "model": "anthropic/claude-sonnet-4-20250514",
58
63
  "temperature": 0.8,
59
64
  },
60
65
  "together-ai-llama-2": {
@@ -67,21 +72,6 @@ class ARAconfig(BaseModel):
67
72
  "model": "groq/llama3-70b-8192",
68
73
  "temperature": 0.8,
69
74
  },
70
- "opus-4": {
71
- "provider": "anthropic",
72
- "model": "anthropic/claude-opus-4-20250514",
73
- "temperature": 0.8,
74
- },
75
- "sonnet-3.7": {
76
- "provider": "anthropic",
77
- "model": "anthropic/claude-3-7-sonnet-20250219",
78
- "temperature": 0.8,
79
- },
80
- "sonnet-4": {
81
- "provider": "anthropic",
82
- "model": "anthropic/claude-sonnet-4-20250514",
83
- "temperature": 0.8,
84
- },
85
75
  }
86
76
  default_llm: Optional[str] = "gpt-4o"
87
77
 
@@ -1,3 +1,6 @@
1
+ import os
2
+ from typing import Dict, List, Tuple
3
+
1
4
  def read_report_file():
2
5
  file_path = "incompatible_artefacts_report.md"
3
6
  try:
@@ -5,12 +8,11 @@ def read_report_file():
5
8
  content = f.read()
6
9
  except OSError:
7
10
  print('Artefact scan results file not found. Did you run the "ara scan" command?')
8
- return
9
-
11
+ return None
10
12
  return content
11
13
 
12
14
 
13
- def parse_report(content: str) -> dict:
15
+ def parse_report(content: str) -> Dict[str, List[Tuple[str, str]]]:
14
16
  """
15
17
  Parses the incompatible artefacts report and returns structured data.
16
18
  Returns a dictionary where keys are artefact classifiers, and values are lists of (file_path, reason) tuples.
@@ -20,31 +22,27 @@ def parse_report(content: str) -> dict:
20
22
  current_classifier = None
21
23
 
22
24
  if not lines or lines[0] != "# Artefact Check Report":
23
- return issues # Geçersiz rapor formatı
25
+ return issues
24
26
 
25
27
  if len(lines) >= 3 and lines[2] == "No problems found.":
26
- return issues # Hiç sorun bulunamadı
28
+ return issues
27
29
 
28
- for line in lines[1:]: # Başlıktan sonraki satırları işle
30
+ for line in lines[1:]:
29
31
  line = line.strip()
30
32
  if not line:
31
33
  continue
32
34
 
33
- # Classifier başlığı tespiti (## ile başlayan)
34
35
  if line.startswith("## "):
35
36
  current_classifier = line[3:].strip()
36
37
  issues[current_classifier] = []
37
38
 
38
- # Dosya listesi tespiti (- ile başlayan)
39
39
  elif line.startswith("- ") and current_classifier is not None:
40
- # Format: "- `file_path`: reason"
41
40
  parts = line.split("`", 2)
42
41
  if len(parts) < 3:
43
- continue # Geçersiz format
42
+ continue
44
43
 
45
44
  file_path = parts[1]
46
- reason = parts[2].split(
47
- ":", 1)[1].strip() if ":" in parts[2] else ""
45
+ reason = parts[2].split(":", 1)[1].strip() if ":" in parts[2] else ""
48
46
  issues[current_classifier].append((file_path, reason))
49
47
 
50
48
  return issues
@@ -53,7 +51,7 @@ def parse_report(content: str) -> dict:
53
51
  def read_artefact(file_path):
54
52
  """Reads the artefact text from the given file path."""
55
53
  try:
56
- with open(file_path, 'r') as file:
54
+ with open(file_path, 'r', encoding="utf-8") as file:
57
55
  return file.read()
58
56
  except FileNotFoundError:
59
57
  print(f"File not found: {file_path}")
@@ -82,7 +80,7 @@ def construct_prompt(artefact_type, reason, file_path, artefact_text):
82
80
  from ara_cli.artefact_models.artefact_model import ArtefactType
83
81
 
84
82
  prompt = (
85
- f"Correct the following {artefact_type} artefact to fix the issue: {reason}. "
83
+ f"Correct the following {artefact_type.value} artefact to fix the issue: {reason}. "
86
84
  "Provide the corrected artefact. Do not reformulate the artefact, "
87
85
  "just fix the pydantic model errors, use correct grammar. "
88
86
  "You should follow the name of the file "
@@ -113,33 +111,81 @@ def run_agent(prompt, artefact_class):
113
111
  from pydantic_ai import Agent
114
112
  # gpt-4o
115
113
  # anthropic:claude-3-7-sonnet-20250219
116
- agent = Agent(model="anthropic:claude-3-7-sonnet-20250219",
114
+ # anthropic:claude-4-sonnet-20250514
115
+ agent = Agent(model="anthropic:claude-4-sonnet-20250514",
117
116
  result_type=artefact_class, instrument=True)
118
117
  result = agent.run_sync(prompt)
119
118
  return result.data
120
119
 
121
120
 
122
121
  def write_corrected_artefact(file_path, corrected_text):
123
- with open(file_path, 'w') as file:
122
+ with open(file_path, 'w', encoding="utf-8") as file:
124
123
  file.write(corrected_text)
125
124
  print(f"Fixed artefact at {file_path}")
126
125
 
127
126
 
128
- def apply_autofix(file_path, classifier, reason):
127
+ def fix_title_mismatch(file_path: str, artefact_text: str, artefact_class) -> str:
128
+ """
129
+ Deterministically fixes the title in the artefact text to match the filename.
130
+ """
131
+ base_name = os.path.basename(file_path)
132
+ correct_title_underscores, _ = os.path.splitext(base_name)
133
+ correct_title_spaces = correct_title_underscores.replace('_', ' ')
134
+
135
+ title_prefix = artefact_class._title_prefix()
136
+
137
+ lines = artefact_text.splitlines()
138
+ new_lines = []
139
+ title_found_and_replaced = False
140
+
141
+ for line in lines:
142
+ if not title_found_and_replaced and line.strip().startswith(title_prefix):
143
+ new_lines.append(f"{title_prefix} {correct_title_spaces}")
144
+ title_found_and_replaced = True
145
+ else:
146
+ new_lines.append(line)
147
+
148
+ if not title_found_and_replaced:
149
+ print(f"Warning: Title prefix '{title_prefix}' not found in {file_path}. Title could not be fixed.")
150
+ return artefact_text
151
+
152
+ return "\n".join(new_lines)
153
+
154
+
155
+ def apply_autofix(file_path: str, classifier: str, reason: str, deterministic: bool, non_deterministic: bool) -> bool:
129
156
  artefact_text = read_artefact(file_path)
130
157
  if artefact_text is None:
131
- return
158
+ return False
132
159
 
133
- artefact_type, artefact_class = determine_artefact_type_and_class(
134
- classifier)
160
+ artefact_type, artefact_class = determine_artefact_type_and_class(classifier)
135
161
  if artefact_type is None or artefact_class is None:
136
- return
162
+ return False
137
163
 
138
- prompt = construct_prompt(artefact_type, reason, file_path, artefact_text)
164
+ is_deterministic_issue = "Filename-Title Mismatch" in reason
139
165
 
140
- try:
141
- corrected_artefact = run_agent(prompt, artefact_class)
142
- corrected_text = corrected_artefact.serialize()
166
+ if deterministic and is_deterministic_issue:
167
+ print(f"Attempting deterministic fix for {file_path}...")
168
+ corrected_text = fix_title_mismatch(file_path, artefact_text, artefact_class)
143
169
  write_corrected_artefact(file_path, corrected_text)
144
- except Exception as e:
145
- print(f"Failed to fix artefact at {file_path}: {e}")
170
+ return True
171
+
172
+ # Attempt non-deterministic fix if requested and the issue is NOT deterministic
173
+ if non_deterministic and not is_deterministic_issue:
174
+ print(f"Attempting non-deterministic (LLM) fix for {file_path}...")
175
+ prompt = construct_prompt(artefact_type, reason, file_path, artefact_text)
176
+ try:
177
+ corrected_artefact = run_agent(prompt, artefact_class)
178
+ corrected_text = corrected_artefact.serialize()
179
+ write_corrected_artefact(file_path, corrected_text)
180
+ return True
181
+ except Exception as e:
182
+ print(f"LLM agent failed to fix artefact at {file_path}: {e}")
183
+ return False
184
+
185
+ # Log if a fix was skipped due to flags
186
+ if is_deterministic_issue and not deterministic:
187
+ print(f"Skipping deterministic fix for {file_path} as per request.")
188
+ elif not is_deterministic_issue and not non_deterministic:
189
+ print(f"Skipping non-deterministic fix for {file_path} as per request.")
190
+
191
+ return False
@@ -49,16 +49,13 @@ class Contribution(BaseModel):
49
49
 
50
50
  @model_validator(mode="after")
51
51
  def validate_parent(self) -> Self:
52
+
52
53
  artefact_name = self.artefact_name
53
54
  classifier = self.classifier
54
55
  rule = self.rule
55
56
 
56
57
  if artefact_name:
57
58
  artefact_name = replace_space_with_underscore(artefact_name)
58
- if artefact_name and classifier:
59
- artefact_name = artefact_name.removesuffix(f"_{classifier}")
60
- artefact_name = artefact_name.removesuffix(f"_{classifier.capitalize()}")
61
- self.artefact_name = artefact_name
62
59
  if not artefact_name or not classifier:
63
60
  self.artefact_name = None
64
61
  self.classifier = None
@@ -1,4 +1,5 @@
1
1
  from textwrap import indent
2
+ import os
2
3
 
3
4
 
4
5
  def check_file(file_path, artefact_class):
@@ -9,7 +10,16 @@ def check_file(file_path, artefact_class):
9
10
  except OSError as e:
10
11
  return False, f"File error: {e}"
11
12
  try:
12
- artefact_class.deserialize(content)
13
+ artefact_instance = artefact_class.deserialize(content)
14
+
15
+ base_name = os.path.basename(file_path)
16
+ file_name_without_ext, _ = os.path.splitext(base_name)
17
+
18
+ if artefact_instance.title != file_name_without_ext:
19
+ reason = (f"Filename-Title Mismatch: The file name '{file_name_without_ext}' "
20
+ f"does not match the artefact title '{artefact_instance.title}'.")
21
+ return False, reason
22
+
13
23
  return True, None
14
24
  except (ValidationError, ValueError, AssertionError) as e:
15
25
  return False, str(e)
@@ -81,7 +81,8 @@ def send_prompt(prompt):
81
81
  completion = litellm.completion(
82
82
  **config_parameters,
83
83
  messages=prompt,
84
- stream=True
84
+ stream=True,
85
+ max_tokens=8192
85
86
  )
86
87
  for chunk in completion:
87
88
  yield chunk
@@ -1,2 +1,2 @@
1
1
  # version.py
2
- __version__ = "0.1.9.66" # fith parameter like .0 for local install test purposes only. official numbers should be 4 digit numbers
2
+ __version__ = "0.1.9.67" # fith parameter like .0 for local install test purposes only. official numbers should be 4 digit numbers
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ara_cli
3
- Version: 0.1.9.66
3
+ Version: 0.1.9.67
4
4
  Requires-Dist: litellm
5
5
  Requires-Dist: llama-index
6
6
  Requires-Dist: llama-index-llms-openai
@@ -41,6 +41,7 @@ ara_cli.egg-info/dependency_links.txt
41
41
  ara_cli.egg-info/entry_points.txt
42
42
  ara_cli.egg-info/requires.txt
43
43
  ara_cli.egg-info/top_level.txt
44
+ ara_cli/artefact_models/__init__.py
44
45
  ara_cli/artefact_models/artefact_load.py
45
46
  ara_cli/artefact_models/artefact_mapping.py
46
47
  ara_cli/artefact_models/artefact_model.py
@@ -139,23 +140,24 @@ ara_cli/templates/specification_breakdown_files/template.step.exploration.md
139
140
  ara_cli/templates/specification_breakdown_files/template.step.md
140
141
  ara_cli/templates/specification_breakdown_files/template.technology.exploration.md
141
142
  ara_cli/templates/specification_breakdown_files/template.technology.md
142
- ara_cli/tests/__init__.py
143
- ara_cli/tests/test_ara_autofix.py
144
- ara_cli/tests/test_ara_command_action.py
145
- ara_cli/tests/test_ara_config.py
146
- ara_cli/tests/test_artefact_fuzzy_search.py
147
- ara_cli/tests/test_artefact_link_updater.py
148
- ara_cli/tests/test_artefact_lister.py
149
- ara_cli/tests/test_artefact_reader.py
150
- ara_cli/tests/test_artefact_renamer.py
151
- ara_cli/tests/test_artefact_scan.py
152
- ara_cli/tests/test_chat.py
153
- ara_cli/tests/test_classifier.py
154
- ara_cli/tests/test_directory_navigator.py
155
- ara_cli/tests/test_file_classifier.py
156
- ara_cli/tests/test_file_creator.py
157
- ara_cli/tests/test_file_lister.py
158
- ara_cli/tests/test_list_filter.py
159
- ara_cli/tests/test_tag_extractor.py
160
- ara_cli/tests/test_template_manager.py
161
- ara_cli/tests/test_update_config_prompt.py
143
+ docker/base/requirements.txt
144
+ tests/__init__.py
145
+ tests/test_ara_autofix.py
146
+ tests/test_ara_command_action.py
147
+ tests/test_ara_config.py
148
+ tests/test_artefact_fuzzy_search.py
149
+ tests/test_artefact_link_updater.py
150
+ tests/test_artefact_lister.py
151
+ tests/test_artefact_reader.py
152
+ tests/test_artefact_renamer.py
153
+ tests/test_artefact_scan.py
154
+ tests/test_chat.py
155
+ tests/test_classifier.py
156
+ tests/test_directory_navigator.py
157
+ tests/test_file_classifier.py
158
+ tests/test_file_creator.py
159
+ tests/test_file_lister.py
160
+ tests/test_list_filter.py
161
+ tests/test_tag_extractor.py
162
+ tests/test_template_manager.py
163
+ tests/test_update_config_prompt.py
@@ -0,0 +1,12 @@
1
+ litellm
2
+ llama-index
3
+ llama-index-llms-openai
4
+ llama-index-retrievers-bm25
5
+ openai
6
+ markdown-it-py
7
+ json-repair
8
+ argparse
9
+ argcomplete
10
+ cmd2>=2.5
11
+ pydantic
12
+ pydantic_ai
@@ -5,6 +5,9 @@ version = {}
5
5
  with open("./ara_cli/version.py") as fp:
6
6
  exec(fp.read(), version)
7
7
 
8
+ with open("./docker/base/requirements.txt", "r") as pip_reqs_file:
9
+ reqs = [line.strip() for line in pip_reqs_file.readlines()]
10
+
8
11
  setup(
9
12
  name="ara_cli",
10
13
  version=version['__version__'],
@@ -15,18 +18,5 @@ setup(
15
18
  "ara = ara_cli.__main__:cli",
16
19
  ],
17
20
  },
18
- install_requires=[
19
- 'litellm',
20
- 'llama-index',
21
- 'llama-index-llms-openai',
22
- 'llama-index-retrievers-bm25',
23
- 'openai',
24
- 'markdown-it-py',
25
- 'json-repair',
26
- 'argparse',
27
- 'argcomplete',
28
- 'cmd2>=2.5',
29
- 'pydantic',
30
- 'pydantic_ai'
31
- ],
21
+ install_requires=reqs,
32
22
  )
File without changes