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.
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/PKG-INFO +2 -1
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/__init__.py +1 -1
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/__main__.py +4 -2
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/ara_command_action.py +54 -1
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/ara_command_parser.py +42 -2
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/ara_config.py +118 -94
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/chat.py +203 -142
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/prompt_handler.py +268 -127
- ara_cli-0.1.10.0/ara_cli/template_loader.py +245 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/version.py +1 -1
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli.egg-info/PKG-INFO +2 -1
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli.egg-info/SOURCES.txt +2 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli.egg-info/requires.txt +1 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/docker/base/requirements.txt +1 -0
- ara_cli-0.1.10.0/tests/test_chat.py +2635 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_prompt_handler.py +40 -4
- ara_cli-0.1.10.0/tests/test_template_loader.py +192 -0
- ara_cli-0.1.9.96/tests/test_chat.py +0 -1369
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/MANIFEST.in +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/README.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_autofix.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_creator.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_deleter.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_fuzzy_search.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_link_updater.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_lister.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/__init__.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/artefact_data_retrieval.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/artefact_load.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/artefact_mapping.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/artefact_model.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/artefact_templates.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/businessgoal_artefact_model.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/capability_artefact_model.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/epic_artefact_model.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/example_artefact_model.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/feature_artefact_model.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/issue_artefact_model.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/keyfeature_artefact_model.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/serialize_helper.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/task_artefact_model.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/userstory_artefact_model.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_models/vision_artefact_model.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_reader.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_renamer.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/artefact_scan.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/classifier.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/codefusionretriever.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/codehierachieretriever.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/commandline_completer.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/commands/__init__.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/commands/command.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/commands/extract_command.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/commands/load_command.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/commands/load_image_command.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/commands/read_command.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/directory_navigator.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/error_handler.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_classifier.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_lister.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/__init__.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/binary_file_loader.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/document_file_loader.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/document_reader.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/document_readers.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/file_loader.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/file_loaders.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/image_processor.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/markdown_reader.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/file_loaders/text_file_loader.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/filename_validator.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/global_file_lister.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/list_filter.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/output_suppressor.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/prompt_chat.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/prompt_extractor.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/prompt_rag.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/run_file_lister.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/tag_extractor.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/template_manager.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/agile.artefacts +0 -0
- {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
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/blueprints/empty.blueprint.md +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/artefact_classification.commands.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/artefact_extension.commands.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/artefact_formulation.commands.md +0 -0
- {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
- {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
- {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
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/empty.commands.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/error_fixing.commands.md +0 -0
- {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
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/feature_formulation.commands.md +0 -0
- {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
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/refactoring.commands.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/commands/refactoring_analysis.commands.md +0 -0
- {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
- {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
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/classify_task.intention.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/empty.intention.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/error_fixing.intention.md +0 -0
- {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
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/feature_formulation.intention.md +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/intentions/task_implementation.intention.md +0 -0
- {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
- {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
- {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
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/architecture_analyst.rules.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/code_analyst.rules.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/empty.rules.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/error_analyst.rules.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/gherkin_expert.rules.md +0 -0
- {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
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/product_owner.rules.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/python_behave.rules.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/prompt-modules/rules/python_developer.rules.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.concept.exploration.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.concept.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.customer.exploration.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.customer.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.persona.exploration.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.persona.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.step.exploration.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.step.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.technology.exploration.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/specification_breakdown_files/template.technology.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.businessgoal.prompt_log.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.capability.prompt_log.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.epic.prompt_log.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.example.prompt_log.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.feature.prompt_log.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.issue.prompt_log.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.keyfeature.prompt_log.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.steps.prompt_log.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.task.prompt_log.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.userstory.prompt_log.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/templates/template.vision.prompt_log.md +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli/update_config_prompt.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli.egg-info/dependency_links.txt +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli.egg-info/entry_points.txt +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/ara_cli.egg-info/top_level.txt +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/setup.cfg +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/setup.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/__init__.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_ara_command_action.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_ara_config.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_artefact_autofix.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_artefact_fuzzy_search.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_artefact_link_updater.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_artefact_lister.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_artefact_reader.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_artefact_renamer.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_artefact_scan.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_classifier.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_directory_navigator.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_file_classifier.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_file_creator.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_file_lister.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_global_file_lister.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_list_filter.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_tag_extractor.py +0 -0
- {ara_cli-0.1.9.96 → ara_cli-0.1.10.0}/tests/test_template_manager.py +0 -0
- {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.
|
|
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(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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=
|
|
106
|
-
def check_critical_fields(self) ->
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
134
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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[
|
|
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()
|