ara-cli 0.1.9.96__tar.gz → 0.1.10.0__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 (179) hide show
  1. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/PKG-INFO +2 -1
  2. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/__init__.py +1 -1
  3. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/__main__.py +4 -2
  4. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/ara_command_action.py +54 -1
  5. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/ara_command_parser.py +42 -2
  6. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/ara_config.py +118 -94
  7. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/chat.py +203 -142
  8. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/prompt_handler.py +268 -127
  9. ara_cli-0.1.10.0/ara_cli/template_loader.py +245 -0
  10. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/version.py +1 -1
  11. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli.egg-info/PKG-INFO +2 -1
  12. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli.egg-info/SOURCES.txt +2 -0
  13. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli.egg-info/requires.txt +1 -0
  14. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/docker/base/requirements.txt +1 -0
  15. ara_cli-0.1.10.0/tests/test_chat.py +2635 -0
  16. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_prompt_handler.py +40 -4
  17. ara_cli-0.1.10.0/tests/test_template_loader.py +192 -0
  18. ara_cli-0.1.9.96/tests/test_chat.py +0 -1369
  19. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/MANIFEST.in +0 -0
  20. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/README.md +0 -0
  21. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_autofix.py +0 -0
  22. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_creator.py +0 -0
  23. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_deleter.py +0 -0
  24. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_fuzzy_search.py +0 -0
  25. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_link_updater.py +0 -0
  26. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_lister.py +0 -0
  27. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/__init__.py +0 -0
  28. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/artefact_data_retrieval.py +0 -0
  29. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/artefact_load.py +0 -0
  30. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/artefact_mapping.py +0 -0
  31. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/artefact_model.py +0 -0
  32. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/artefact_templates.py +0 -0
  33. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/businessgoal_artefact_model.py +0 -0
  34. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/capability_artefact_model.py +0 -0
  35. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/epic_artefact_model.py +0 -0
  36. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/example_artefact_model.py +0 -0
  37. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/feature_artefact_model.py +0 -0
  38. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/issue_artefact_model.py +0 -0
  39. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/keyfeature_artefact_model.py +0 -0
  40. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/serialize_helper.py +0 -0
  41. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/task_artefact_model.py +0 -0
  42. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/userstory_artefact_model.py +0 -0
  43. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/vision_artefact_model.py +0 -0
  44. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_reader.py +0 -0
  45. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_renamer.py +0 -0
  46. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_scan.py +0 -0
  47. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/classifier.py +0 -0
  48. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/codefusionretriever.py +0 -0
  49. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/codehierachieretriever.py +0 -0
  50. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/commandline_completer.py +0 -0
  51. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/commands/__init__.py +0 -0
  52. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/commands/command.py +0 -0
  53. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/commands/extract_command.py +0 -0
  54. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/commands/load_command.py +0 -0
  55. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/commands/load_image_command.py +0 -0
  56. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/commands/read_command.py +0 -0
  57. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/directory_navigator.py +0 -0
  58. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/error_handler.py +0 -0
  59. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_classifier.py +0 -0
  60. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_lister.py +0 -0
  61. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/__init__.py +0 -0
  62. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/binary_file_loader.py +0 -0
  63. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/document_file_loader.py +0 -0
  64. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/document_reader.py +0 -0
  65. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/document_readers.py +0 -0
  66. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/file_loader.py +0 -0
  67. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/file_loaders.py +0 -0
  68. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/image_processor.py +0 -0
  69. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/markdown_reader.py +0 -0
  70. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/text_file_loader.py +0 -0
  71. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/filename_validator.py +0 -0
  72. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/global_file_lister.py +0 -0
  73. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/list_filter.py +0 -0
  74. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/output_suppressor.py +0 -0
  75. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/prompt_chat.py +0 -0
  76. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/prompt_extractor.py +0 -0
  77. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/prompt_rag.py +0 -0
  78. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/run_file_lister.py +0 -0
  79. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/tag_extractor.py +0 -0
  80. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/template_manager.py +0 -0
  81. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/agile.artefacts +0 -0
  82. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/blueprints/complete_pytest_unittest.blueprint.md +0 -0
  83. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/blueprints/empty.blueprint.md +0 -0
  84. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/blueprints/task_todo_list_C4_architecture_analysis.blueprint.md +0 -0
  85. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/blueprints/task_todo_list_implement_feature_BDD_way.blueprint.md +0 -0
  86. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/architecture_C4_analysis.commands.md +0 -0
  87. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/architecture_radon_cc_score.commands.md +0 -0
  88. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/architecture_radon_halstead_v.commands.md +0 -0
  89. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/architecture_radon_maintainability_score.commands.md +0 -0
  90. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/artefact_classification.commands.md +0 -0
  91. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/artefact_extension.commands.md +0 -0
  92. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/artefact_formulation.commands.md +0 -0
  93. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/behave_step_generation.commands.md +0 -0
  94. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/code_generation_complex.commands.md +0 -0
  95. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/code_generation_simple.commands.md +0 -0
  96. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/empty.commands.md +0 -0
  97. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/error_fixing.commands.md +0 -0
  98. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/feature_file_update.commands.md +0 -0
  99. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/feature_formulation.commands.md +0 -0
  100. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/js_code_generation_simple.commands.md +0 -0
  101. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/refactoring.commands.md +0 -0
  102. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/refactoring_analysis.commands.md +0 -0
  103. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/reverse_engineer_feature_file.commands.md +0 -0
  104. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/reverse_engineer_program_flow.commands.md +0 -0
  105. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/classify_task.intention.md +0 -0
  106. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/empty.intention.md +0 -0
  107. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/error_fixing.intention.md +0 -0
  108. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/feature_fix_steps_for_scenario.intention.md +0 -0
  109. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/feature_formulation.intention.md +0 -0
  110. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/feature_reverse_formulation_from_code.intention.md +0 -0
  111. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/feature_scenario_implementation.intention.md +0 -0
  112. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/feature_scenario_implementation_update.intention.md +0 -0
  113. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/feature_scenario_outline_extension.intention.md +0 -0
  114. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/feature_update_formulation.intention.md +0 -0
  115. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/fibonacci_example_implementation.intention.md +0 -0
  116. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/js_implementation_from_task_description.intention.md +0 -0
  117. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/js_steps_implementation.intention.md +0 -0
  118. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/python_cli_implementation_with_test.intention.md +0 -0
  119. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/python_code_understanding.intention.md +0 -0
  120. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/task_implementation.intention.md +0 -0
  121. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/task_prompt_control_by_status.intention.md +0 -0
  122. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/task_stepwise_implementation_by_number.intention.md +0 -0
  123. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/task_stepwise_implementation_by_status.intention.md +0 -0
  124. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/architecture_analyst.rules.md +0 -0
  125. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/code_analyst.rules.md +0 -0
  126. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/empty.rules.md +0 -0
  127. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/error_analyst.rules.md +0 -0
  128. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/gherkin_expert.rules.md +0 -0
  129. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/js_expert_developer.rules.md +0 -0
  130. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/product_owner.rules.md +0 -0
  131. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/python_behave.rules.md +0 -0
  132. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/python_developer.rules.md +0 -0
  133. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.concept.exploration.md +0 -0
  134. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.concept.md +0 -0
  135. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.customer.exploration.md +0 -0
  136. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.customer.md +0 -0
  137. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.persona.exploration.md +0 -0
  138. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.persona.md +0 -0
  139. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.step.exploration.md +0 -0
  140. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.step.md +0 -0
  141. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.technology.exploration.md +0 -0
  142. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.technology.md +0 -0
  143. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.businessgoal.prompt_log.md +0 -0
  144. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.capability.prompt_log.md +0 -0
  145. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.epic.prompt_log.md +0 -0
  146. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.example.prompt_log.md +0 -0
  147. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.feature.prompt_log.md +0 -0
  148. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.issue.prompt_log.md +0 -0
  149. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.keyfeature.prompt_log.md +0 -0
  150. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.steps.prompt_log.md +0 -0
  151. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.task.prompt_log.md +0 -0
  152. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.userstory.prompt_log.md +0 -0
  153. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.vision.prompt_log.md +0 -0
  154. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/update_config_prompt.py +0 -0
  155. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli.egg-info/dependency_links.txt +0 -0
  156. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli.egg-info/entry_points.txt +0 -0
  157. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli.egg-info/top_level.txt +0 -0
  158. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/setup.cfg +0 -0
  159. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/setup.py +0 -0
  160. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/__init__.py +0 -0
  161. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_ara_command_action.py +0 -0
  162. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_ara_config.py +0 -0
  163. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_artefact_autofix.py +0 -0
  164. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_artefact_fuzzy_search.py +0 -0
  165. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_artefact_link_updater.py +0 -0
  166. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_artefact_lister.py +0 -0
  167. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_artefact_reader.py +0 -0
  168. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_artefact_renamer.py +0 -0
  169. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_artefact_scan.py +0 -0
  170. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_classifier.py +0 -0
  171. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_directory_navigator.py +0 -0
  172. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_file_classifier.py +0 -0
  173. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_file_creator.py +0 -0
  174. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_file_lister.py +0 -0
  175. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_global_file_lister.py +0 -0
  176. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_list_filter.py +0 -0
  177. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_tag_extractor.py +0 -0
  178. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_template_manager.py +0 -0
  179. {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_update_config_prompt.py +0 -0
@@ -1,8 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ara_cli
3
- Version: 0.1.9.96
3
+ Version: 0.1.10.0
4
4
  Summary: Powerful, open source command-line tool for managing, structuring and automating software development artifacts in line with Business-Driven Development (BDD) and AI-assisted processes
5
5
  Description-Content-Type: text/markdown
6
+ Requires-Dist: langfuse
6
7
  Requires-Dist: litellm
7
8
  Requires-Dist: llama-index
8
9
  Requires-Dist: llama-index-llms-openai
@@ -14,7 +14,7 @@ RESET = '\033[0m'
14
14
 
15
15
 
16
16
  def format_warning(message, category, *args, **kwargs):
17
- return f'{YELLOW}{category.__name__}: {message}{RESET}\n'
17
+ return f'{YELLOW}[WARNING] {category.__name__}: {message}{RESET}\n'
18
18
 
19
19
 
20
20
  warnings.formatwarning = format_warning
@@ -21,7 +21,8 @@ from ara_cli.ara_command_action import (
21
21
  classifier_directory_action,
22
22
  scan_action,
23
23
  autofix_action,
24
- extract_action
24
+ extract_action,
25
+ load_action
25
26
  )
26
27
  from . import error_handler
27
28
  import argcomplete
@@ -49,7 +50,8 @@ def define_action_mapping():
49
50
  "classifier-directory": classifier_directory_action,
50
51
  "scan": scan_action,
51
52
  "autofix": autofix_action,
52
- "extract": extract_action
53
+ "extract": extract_action,
54
+ "load": load_action
53
55
  }
54
56
 
55
57
 
@@ -261,6 +261,59 @@ def chat_action(args):
261
261
  chat.start()
262
262
 
263
263
 
264
+ def _find_chat_file(chat_name: str) -> str | None:
265
+ """Resolves the chat file path based on common naming conventions."""
266
+ # Logic from setup_chat for finding existing files.
267
+ if os.path.exists(chat_name) and os.path.isfile(chat_name):
268
+ return chat_name
269
+
270
+ chat_name_md = f"{chat_name}.md"
271
+ if os.path.exists(chat_name_md) and os.path.isfile(chat_name_md):
272
+ return chat_name_md
273
+
274
+ chat_name_chat_md = f"{chat_name}_chat.md"
275
+ if os.path.exists(chat_name_chat_md) and os.path.isfile(chat_name_chat_md):
276
+ return chat_name_chat_md
277
+
278
+ return None
279
+
280
+
281
+ @handle_errors(context="load action", error_handler=error_handler)
282
+ def load_action(args):
283
+ from ara_cli.template_loader import TemplateLoader
284
+
285
+ chat_name = args.chat_name
286
+ template_type = args.template_type
287
+ template_name = args.template_name
288
+
289
+ chat_file_path = _find_chat_file(chat_name)
290
+
291
+ if not chat_file_path:
292
+ raise AraError(f"Chat file for '{chat_name}' not found.")
293
+
294
+ default_patterns = {
295
+ "rules": "*.rules.md",
296
+ "intention": "*.intention.md",
297
+ "commands": "*.commands.md"
298
+ }
299
+
300
+ default_pattern = default_patterns.get(template_type)
301
+
302
+ if not template_name and not default_pattern:
303
+ raise AraError(f"A template name is required for template type '{template_type}'.")
304
+
305
+ loader = TemplateLoader() # No chat instance for CLI context
306
+ success = loader.load_template(
307
+ template_name=template_name,
308
+ template_type=template_type,
309
+ chat_file_path=chat_file_path,
310
+ default_pattern=default_pattern
311
+ )
312
+
313
+ if not success:
314
+ sys.exit(1)
315
+
316
+
264
317
  @handle_errors(context="template action", error_handler=error_handler)
265
318
  def template_action(args):
266
319
  from ara_cli.classifier import Classifier
@@ -615,4 +668,4 @@ def extract_action(args):
615
668
  write=write,
616
669
  output=lambda msg: print(msg, file=sys.stdout)
617
670
  )
618
- command.execute()
671
+ command.execute()
@@ -7,7 +7,8 @@ from ara_cli.commandline_completer import (
7
7
  StatusCompleter,
8
8
  )
9
9
  from ara_cli.template_manager import SpecificationBreakdownAspects
10
-
10
+ import os
11
+ import glob
11
12
 
12
13
  classifiers = Classifier.ordered_classifiers()
13
14
  aspects = SpecificationBreakdownAspects.VALID_ASPECTS
@@ -191,6 +192,44 @@ def list_tags_parser(subparsers):
191
192
  )
192
193
 
193
194
 
195
+ class TemplateNameCompleter:
196
+ """Provides command-line completion for template names."""
197
+ def __call__(self, prefix, parsed_args, **kwargs):
198
+ import os
199
+ from ara_cli.template_loader import TemplateLoader
200
+
201
+ if not hasattr(parsed_args, 'template_type'):
202
+ return []
203
+
204
+ template_type = parsed_args.template_type
205
+ context_path = os.getcwd()
206
+
207
+ loader = TemplateLoader()
208
+ templates = loader.get_available_templates(template_type, context_path)
209
+
210
+ return [t for t in templates if t.startswith(prefix)]
211
+
212
+
213
+ def load_parser(subparsers):
214
+ load_parser = subparsers.add_parser(
215
+ "load", help="Load a template into a chat file."
216
+ )
217
+ load_parser.add_argument(
218
+ "chat_name", help="Name of the chat file to load template into (without extension)."
219
+ )
220
+ load_parser.add_argument(
221
+ "template_type",
222
+ choices=['rules', 'intention', 'commands', 'blueprint'],
223
+ help="Type of template to load."
224
+ )
225
+ load_parser.add_argument(
226
+ "template_name",
227
+ nargs='?',
228
+ default="",
229
+ help="Name of the template to load. Supports wildcards and 'global/' prefix."
230
+ ).completer = TemplateNameCompleter()
231
+
232
+
194
233
  def add_chat_arguments(chat_parser):
195
234
  chat_parser.add_argument(
196
235
  "chat_name",
@@ -560,6 +599,7 @@ def action_parser():
560
599
  classifier_directory_parser(subparsers)
561
600
  scan_parser(subparsers)
562
601
  autofix_parser(subparsers)
602
+ load_parser(subparsers)
563
603
  extract_parser(subparsers)
564
604
 
565
- return parser
605
+ return parser
@@ -10,6 +10,7 @@ import warnings
10
10
 
11
11
  DEFAULT_CONFIG_LOCATION = "./ara/.araconfig/ara_config.json"
12
12
 
13
+
13
14
  class LLMConfigItem(BaseModel):
14
15
  provider: str
15
16
  model: str
@@ -17,6 +18,7 @@ class LLMConfigItem(BaseModel):
17
18
  max_tokens: Optional[int] = None
18
19
  max_completion_tokens: Optional[int] = None
19
20
 
21
+
20
22
  class ARAconfig(BaseModel):
21
23
  ext_code_dirs: List[Dict[str, str]] = Field(default_factory=lambda: [
22
24
  {"source_dir": "./src"},
@@ -28,98 +30,104 @@ class ARAconfig(BaseModel):
28
30
  local_prompt_templates_dir: str = "./ara/.araconfig"
29
31
  custom_prompt_templates_subdir: Optional[str] = "custom-prompt-modules"
30
32
  local_ara_templates_dir: str = "./ara/.araconfig/templates/"
31
- ara_prompt_given_list_includes: List[str] = Field(default_factory=lambda: [
32
- "*.businessgoal",
33
- "*.vision",
34
- "*.capability",
35
- "*.keyfeature",
36
- "*.epic",
37
- "*.userstory",
38
- "*.example",
39
- "*.feature",
40
- "*.task",
41
- "*.py",
42
- "*.md",
43
- "*.png",
44
- "*.jpg",
45
- "*.jpeg",
46
- ])
47
- llm_config: Dict[str, LLMConfigItem] = Field(default_factory=lambda: {
48
- "gpt-5": LLMConfigItem(
49
- provider="openai",
50
- model="openai/gpt-5",
51
- temperature=1,
52
- max_completion_tokens=16000
53
- ),
54
- "gpt-5-mini": LLMConfigItem(
55
- provider="openai",
56
- model="openai/gpt-5-mini-2025-08-07",
57
- temperature=1
58
- ),
59
- "gpt-4o": LLMConfigItem(
60
- provider="openai",
61
- model="openai/gpt-4o",
62
- temperature=0.8,
63
- max_tokens=16000
64
- ),
65
- "gpt-4.1": LLMConfigItem(
66
- provider="openai",
67
- model="openai/gpt-4.1",
68
- temperature=0.8,
69
- max_tokens=16000
70
- ),
71
- "o3-mini": LLMConfigItem(
72
- provider="openai",
73
- model="openai/o3-mini",
74
- temperature=1.0,
75
- max_tokens=8000
76
- ),
77
- "opus-4": LLMConfigItem(
78
- provider="anthropic",
79
- model="anthropic/claude-opus-4-20250514",
80
- temperature=0.5,
81
- max_tokens=32000
82
- ),
83
- "sonnet-4": LLMConfigItem(
84
- provider="anthropic",
85
- model="anthropic/claude-sonnet-4-20250514",
86
- temperature=0.5,
87
- max_tokens=32000
88
- ),
89
- "together-ai-llama-2": LLMConfigItem(
90
- provider="together_ai",
91
- model="together_ai/togethercomputer/llama-2-70b",
92
- temperature=0.8,
93
- max_tokens=4000
94
- ),
95
- "groq-llama-3": LLMConfigItem(
96
- provider="groq",
97
- model="groq/llama3-70b-8192",
98
- temperature=0.8,
99
- max_tokens=4000
100
- )
101
- })
33
+ ara_prompt_given_list_includes: List[str] = Field(
34
+ default_factory=lambda: [
35
+ "*.businessgoal",
36
+ "*.vision",
37
+ "*.capability",
38
+ "*.keyfeature",
39
+ "*.epic",
40
+ "*.userstory",
41
+ "*.example",
42
+ "*.feature",
43
+ "*.task",
44
+ "*.py",
45
+ "*.md",
46
+ "*.png",
47
+ "*.jpg",
48
+ "*.jpeg",
49
+ ]
50
+ )
51
+ llm_config: Dict[str, LLMConfigItem] = Field(
52
+ default_factory=lambda: {
53
+ "gpt-5": LLMConfigItem(
54
+ provider="openai",
55
+ model="openai/gpt-5",
56
+ temperature=1,
57
+ max_completion_tokens=16000,
58
+ ),
59
+ "gpt-5-mini": LLMConfigItem(
60
+ provider="openai", model="openai/gpt-5-mini-2025-08-07", temperature=1
61
+ ),
62
+ "gpt-4o": LLMConfigItem(
63
+ provider="openai",
64
+ model="openai/gpt-4o",
65
+ temperature=0.8,
66
+ max_tokens=16000,
67
+ ),
68
+ "gpt-4.1": LLMConfigItem(
69
+ provider="openai",
70
+ model="openai/gpt-4.1",
71
+ temperature=0.8,
72
+ max_tokens=16000,
73
+ ),
74
+ "o3-mini": LLMConfigItem(
75
+ provider="openai",
76
+ model="openai/o3-mini",
77
+ temperature=1.0,
78
+ max_tokens=8000,
79
+ ),
80
+ "opus-4": LLMConfigItem(
81
+ provider="anthropic",
82
+ model="anthropic/claude-opus-4-20250514",
83
+ temperature=0.5,
84
+ max_tokens=32000,
85
+ ),
86
+ "sonnet-4": LLMConfigItem(
87
+ provider="anthropic",
88
+ model="anthropic/claude-sonnet-4-20250514",
89
+ temperature=0.5,
90
+ max_tokens=32000,
91
+ ),
92
+ "together-ai-llama-2": LLMConfigItem(
93
+ provider="together_ai",
94
+ model="together_ai/togethercomputer/llama-2-70b",
95
+ temperature=0.8,
96
+ max_tokens=4000,
97
+ ),
98
+ "groq-llama-3": LLMConfigItem(
99
+ provider="groq",
100
+ model="groq/llama3-70b-8192",
101
+ temperature=0.8,
102
+ max_tokens=4000,
103
+ ),
104
+ }
105
+ )
102
106
  default_llm: Optional[str] = None
103
107
  extraction_llm: Optional[str] = None
104
108
 
105
- @model_validator(mode='after')
106
- def check_critical_fields(self) -> 'ARAconfig':
109
+ @model_validator(mode="after")
110
+ def check_critical_fields(self) -> "ARAconfig":
107
111
  """Check for empty critical fields and validate default_llm and extraction_llm."""
108
112
  critical_fields = {
109
- 'ext_code_dirs': [{"source_dir": "./src"}, {"source_dir": "./tests"}],
110
- 'local_ara_templates_dir': "./ara/.araconfig/templates/",
111
- 'local_prompt_templates_dir': "./ara/.araconfig",
112
- 'glossary_dir': "./glossary"
113
+ "ext_code_dirs": [{"source_dir": "./src"}, {"source_dir": "./tests"}],
114
+ "local_ara_templates_dir": "./ara/.araconfig/templates/",
115
+ "local_prompt_templates_dir": "./ara/.araconfig",
116
+ "glossary_dir": "./glossary",
113
117
  }
114
118
 
115
119
  for field, default_value in critical_fields.items():
116
120
  current_value = getattr(self, field)
117
121
  if not current_value:
118
- print(f"Warning: Value for '{field}' is missing or empty. Using default.")
122
+ print(
123
+ f"Warning: Value for '{field}' is missing or empty. Using default."
124
+ )
119
125
  setattr(self, field, default_value)
120
-
126
+
121
127
  if not self.llm_config:
122
- print("Warning: 'llm_config' is empty. 'default_llm' and 'extraction_llm' cannot be set.")
128
+ print(
129
+ "Warning: 'llm_config' is empty. 'default_llm' and 'extraction_llm' cannot be set."
130
+ )
123
131
  self.default_llm = None
124
132
  self.extraction_llm = None
125
133
  return self
@@ -127,23 +135,34 @@ class ARAconfig(BaseModel):
127
135
  first_available_llm = next(iter(self.llm_config))
128
136
 
129
137
  if not self.default_llm:
130
- print(f"Warning: 'default_llm' is not set. Defaulting to the first available model: '{first_available_llm}'.")
138
+ print(
139
+ f"Warning: 'default_llm' is not set. Defaulting to the first available model: '{first_available_llm}'."
140
+ )
131
141
  self.default_llm = first_available_llm
132
142
  elif self.default_llm not in self.llm_config:
133
- print(f"Warning: The configured 'default_llm' ('{self.default_llm}') does not exist in 'llm_config'.")
134
- print(f"-> Reverting to the first available model: '{first_available_llm}'.")
143
+ print(
144
+ f"Warning: The configured 'default_llm' ('{self.default_llm}') does not exist in 'llm_config'."
145
+ )
146
+ print(
147
+ f"-> Reverting to the first available model: '{first_available_llm}'."
148
+ )
135
149
  self.default_llm = first_available_llm
136
150
 
137
151
  if not self.extraction_llm:
138
- print(f"Warning: 'extraction_llm' is not set. Setting it to the same as 'default_llm': '{self.default_llm}'.")
152
+ print(
153
+ f"Warning: 'extraction_llm' is not set. Setting it to the same as 'default_llm': '{self.default_llm}'."
154
+ )
139
155
  self.extraction_llm = self.default_llm
140
156
  elif self.extraction_llm not in self.llm_config:
141
- print(f"Warning: The configured 'extraction_llm' ('{self.extraction_llm}') does not exist in 'llm_config'.")
157
+ print(
158
+ f"Warning: The configured 'extraction_llm' ('{self.extraction_llm}') does not exist in 'llm_config'."
159
+ )
142
160
  print(f"-> Reverting to the 'default_llm' value: '{self.default_llm}'.")
143
161
  self.extraction_llm = self.default_llm
144
-
162
+
145
163
  return self
146
164
 
165
+
147
166
  # Function to ensure the necessary directories exist
148
167
  @lru_cache(maxsize=None)
149
168
  def ensure_directory_exists(directory: str):
@@ -153,6 +172,7 @@ def ensure_directory_exists(directory: str):
153
172
  print(f"New directory created at {directory}")
154
173
  return directory
155
174
 
175
+
156
176
  def handle_unrecognized_keys(data: dict) -> dict:
157
177
  """Removes unrecognized keys from the data and warns the user."""
158
178
  known_fields = set(ARAconfig.model_fields.keys())
@@ -211,13 +231,15 @@ def read_data(filepath: str) -> ARAconfig:
211
231
  return config
212
232
  except ValidationError as e:
213
233
  print("--- Configuration Error Detected ---")
214
- print("Some settings in your configuration file are invalid. Attempting to fix them.")
215
-
234
+ print(
235
+ "Some settings in your configuration file are invalid. Attempting to fix them."
236
+ )
237
+
216
238
  corrected_data = data.copy()
217
239
  defaults = ARAconfig().model_dump()
218
-
219
- error_fields = {err['loc'][0] for err in e.errors() if err['loc']}
220
-
240
+
241
+ error_fields = {err["loc"][0] for err in e.errors() if err["loc"]}
242
+
221
243
  for field_name in error_fields:
222
244
  print(f"-> Field '{field_name}' is invalid and will be reverted to its default value.")
223
245
  if field_name in corrected_data:
@@ -228,15 +250,17 @@ def read_data(filepath: str) -> ARAconfig:
228
250
  final_config = ARAconfig(**corrected_data)
229
251
  save_data(filepath, final_config)
230
252
  print(f"Configuration has been corrected and saved to '{filepath}'.")
231
-
253
+
232
254
  return final_config
233
255
 
256
+
234
257
  # Function to save the modified configuration back to the JSON file
235
258
  def save_data(filepath: str, config: ARAconfig):
236
259
  """Saves the Pydantic config model to a JSON file."""
237
260
  with open(filepath, "w", encoding="utf-8") as file:
238
261
  json.dump(config.model_dump(), file, indent=4)
239
262
 
263
+
240
264
  # Singleton for configuration management
241
265
  class ConfigManager:
242
266
  _config_instance = None
@@ -246,9 +270,9 @@ class ConfigManager:
246
270
  if cls._config_instance is None:
247
271
  cls._config_instance = read_data(filepath)
248
272
  return cls._config_instance
249
-
273
+
250
274
  @classmethod
251
275
  def reset(cls):
252
276
  """Reset the configuration instance (useful for testing)."""
253
277
  cls._config_instance = None
254
- read_data.cache_clear()
278
+ read_data.cache_clear()