ara-cli 0.1.9.63__tar.gz → 0.1.9.64__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.
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/PKG-INFO +1 -1
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/README.md +11 -9
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/ara_command_action.py +12 -1
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/ara_command_parser.py +1 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_autofix.py +2 -3
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_fuzzy_search.py +21 -2
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/feature_artefact_model.py +64 -1
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/prompt_extractor.py +7 -3
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/prompt_handler.py +20 -7
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/version.py +1 -1
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli.egg-info/PKG-INFO +1 -1
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/MANIFEST.in +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/__init__.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/__main__.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/ara_config.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_creator.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_deleter.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_link_updater.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_lister.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/artefact_load.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/artefact_mapping.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/artefact_model.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/artefact_templates.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/businessgoal_artefact_model.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/capability_artefact_model.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/epic_artefact_model.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/example_artefact_model.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/issue_artefact_model.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/keyfeature_artefact_model.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/serialize_helper.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/task_artefact_model.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/userstory_artefact_model.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/vision_artefact_model.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_reader.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_renamer.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_scan.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/chat.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/classifier.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/codefusionretriever.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/codehierachieretriever.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/commandline_completer.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/directory_navigator.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/file_classifier.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/file_lister.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/filename_validator.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/list_filter.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/output_suppressor.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/prompt_chat.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/prompt_rag.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/run_file_lister.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tag_extractor.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/template_manager.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/agile.artefacts +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/blueprints/complete_pytest_unittest.blueprint.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/blueprints/empty.blueprint.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/blueprints/task_todo_list_C4_architecture_analysis.blueprint.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/blueprints/task_todo_list_implement_feature_BDD_way.blueprint.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/architecture_C4_analysis.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/architecture_radon_cc_score.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/architecture_radon_halstead_v.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/architecture_radon_maintainability_score.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/artefact_classification.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/artefact_extension.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/artefact_formulation.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/behave_step_generation.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/code_generation_complex.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/code_generation_simple.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/empty.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/error_fixing.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/feature_file_update.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/feature_formulation.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/js_code_generation_simple.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/refactoring.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/refactoring_analysis.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/reverse_engineer_feature_file.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/reverse_engineer_program_flow.commands.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/classify_task.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/empty.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/error_fixing.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/feature_fix_steps_for_scenario.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/feature_formulation.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/feature_reverse_formulation_from_code.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/feature_scenario_implementation.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/feature_scenario_implementation_update.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/feature_scenario_outline_extension.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/feature_update_formulation.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/fibonacci_example_implementation.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/js_implementation_from_task_description.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/js_steps_implementation.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/python_cli_implementation_with_test.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/python_code_understanding.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/task_implementation.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/task_prompt_control_by_status.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/task_stepwise_implementation_by_number.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/task_stepwise_implementation_by_status.intention.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/rules/architecture_analyst.rules.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/rules/code_analyst.rules.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/rules/empty.rules.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/rules/error_analyst.rules.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/rules/gherkin_expert.rules.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/rules/js_expert_developer.rules.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/rules/product_owner.rules.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/rules/python_behave.rules.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/rules/python_developer.rules.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/specification_breakdown_files/template.concept.exploration.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/specification_breakdown_files/template.concept.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/specification_breakdown_files/template.customer.exploration.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/specification_breakdown_files/template.customer.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/specification_breakdown_files/template.persona.exploration.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/specification_breakdown_files/template.persona.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/specification_breakdown_files/template.step.exploration.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/specification_breakdown_files/template.step.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/specification_breakdown_files/template.technology.exploration.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/specification_breakdown_files/template.technology.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.businessgoal +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.businessgoal.prompt_log.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.capability +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.capability.prompt_log.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.epic +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.epic.prompt_log.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.example +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.example.prompt_log.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.feature +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.feature.prompt_log.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.issue +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.issue.prompt_log.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.keyfeature +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.keyfeature.prompt_log.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.steps.prompt_log.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.task +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.task.prompt_log.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.userstory +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.userstory.prompt_log.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.vision +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/template.vision.prompt_log.md +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/__init__.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_ara_autofix.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_ara_command_action.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_ara_config.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_artefact_fuzzy_search.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_artefact_link_updater.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_artefact_lister.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_artefact_reader.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_artefact_renamer.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_artefact_scan.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_chat.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_classifier.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_directory_navigator.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_file_classifier.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_file_creator.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_file_lister.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_list_filter.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_tag_extractor.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_template_manager.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/tests/test_update_config_prompt.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/update_config_prompt.py +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli.egg-info/SOURCES.txt +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli.egg-info/dependency_links.txt +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli.egg-info/entry_points.txt +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli.egg-info/requires.txt +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli.egg-info/top_level.txt +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/setup.cfg +0 -0
- {ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/setup.py +0 -0
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
- [update dependencies](#update-dependencies)
|
|
7
7
|
- [test and run during development](#test-and-run-during-development)
|
|
8
8
|
- [set version and build and install locally for testing outside of container](#set-version-and-build-and-install-locally-for-testing-outside-of-container)
|
|
9
|
-
- [upload to test pypi with test pypi API key](#upload-to-test-pypi-with-test-pypi-api-key)
|
|
10
9
|
- [upload to live pypi with talsen team production API key (from main branch)](#upload-to-live-pypi-with-talsen-team-production-api-key-from-main-branch)
|
|
11
10
|
|
|
12
11
|
# ara usage
|
|
@@ -59,6 +58,8 @@ To update dependencies, add package names in `setup.py`. The packages will ONLY
|
|
|
59
58
|
4. Test the functionality
|
|
60
59
|
|
|
61
60
|
|
|
61
|
+
<!--
|
|
62
|
+
#### DEPRECATED
|
|
62
63
|
## upload to test pypi with test pypi API key
|
|
63
64
|
1. run `bash deploy.sh`
|
|
64
65
|
2. run `login.sh`
|
|
@@ -73,19 +74,20 @@ twine upload --repository testpypi dist/* --verbose -u __token__ -p pypi-AgENdGV
|
|
|
73
74
|
|
|
74
75
|
this will upload to a test pypi account.
|
|
75
76
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
1. run `python3 -m pip install --index-url https://test.pypi.org/simple/ ara_cli==<VERSION>`
|
|
78
|
+
2. run `ara -h`
|
|
79
|
+
3. if everything has worked (upload, installation and usage) you can now continue to upload the package to pypi (live)
|
|
80
|
+
-->
|
|
80
81
|
|
|
81
82
|
|
|
82
83
|
## upload to live pypi with talsen team production API key (from main branch)
|
|
83
84
|
1. run `bash deploy.sh`
|
|
84
85
|
2. run `login.sh`
|
|
85
|
-
3.
|
|
86
|
-
4.
|
|
87
|
-
5. Get the
|
|
88
|
-
6.
|
|
86
|
+
3. from inside container run `python setup.py sdist bdist_wheel`
|
|
87
|
+
4. `dist` folder should now contain the built wheel ready to upload
|
|
88
|
+
5. Get the API-Key from [nextcloud](https://cloud.talsen.team/apps/keeweb/?open=%2Finfrastructure%2Fpublic-services%2Fapi-keys.kdbx)
|
|
89
|
+
6. Get the Password from Hans or DevOps
|
|
90
|
+
7. run the following command:
|
|
89
91
|
```bash
|
|
90
92
|
twine upload dist/* --verbose -u __token__ -p <API-Key>
|
|
91
93
|
```
|
|
@@ -334,11 +334,15 @@ def reconnect_action(args):
|
|
|
334
334
|
from ara_cli.artefact_models.artefact_load import artefact_from_content
|
|
335
335
|
from ara_cli.artefact_models.artefact_model import Contribution
|
|
336
336
|
from ara_cli.artefact_reader import ArtefactReader
|
|
337
|
+
from ara_cli.artefact_fuzzy_search import find_closest_rule
|
|
337
338
|
|
|
338
339
|
classifier = args.classifier
|
|
339
340
|
artefact_name = args.parameter
|
|
340
341
|
parent_classifier = args.parent_classifier
|
|
341
342
|
parent_name = args.parent_name
|
|
343
|
+
rule = None
|
|
344
|
+
if args.rule:
|
|
345
|
+
rule = ' '.join(args.rule)
|
|
342
346
|
|
|
343
347
|
read_error_message = f"Could not connect {classifier} '{artefact_name}' to {parent_classifier} '{parent_name}'"
|
|
344
348
|
|
|
@@ -367,10 +371,17 @@ def reconnect_action(args):
|
|
|
367
371
|
content=parent_content
|
|
368
372
|
)
|
|
369
373
|
|
|
370
|
-
|
|
374
|
+
contribution = Contribution(
|
|
371
375
|
artefact_name=parent.title,
|
|
372
376
|
classifier=parent.artefact_type
|
|
373
377
|
)
|
|
378
|
+
|
|
379
|
+
if rule:
|
|
380
|
+
closest_rule = find_closest_rule(parent, rule)
|
|
381
|
+
print("")
|
|
382
|
+
contribution.rule = closest_rule
|
|
383
|
+
|
|
384
|
+
artefact.contribution = contribution
|
|
374
385
|
with open(artefact.file_path, 'w') as file:
|
|
375
386
|
artefact_content = artefact.serialize()
|
|
376
387
|
file.write(artefact_content)
|
|
@@ -184,6 +184,7 @@ def reconnect_parser(subparsers):
|
|
|
184
184
|
reconnect_parser.add_argument("parameter", help="Filename of artefact").completer = ArtefactCompleter()
|
|
185
185
|
reconnect_parser.add_argument("parent_classifier", choices=classifiers, help="Classifier of the parent artefact type")
|
|
186
186
|
reconnect_parser.add_argument("parent_name", help="Filename of parent artefact").completer = ParentNameCompleter()
|
|
187
|
+
reconnect_parser.add_argument("-r", "--rule", dest="rule", nargs='+')
|
|
187
188
|
|
|
188
189
|
|
|
189
190
|
def read_status_parser(subparsers):
|
|
@@ -83,9 +83,8 @@ def construct_prompt(artefact_type, reason, file_path, artefact_text):
|
|
|
83
83
|
|
|
84
84
|
prompt = (
|
|
85
85
|
f"Correct the following {artefact_type} artefact to fix the issue: {reason}. "
|
|
86
|
-
"Provide the
|
|
86
|
+
"Provide the corrected artefact. Do not reformulate the artefact, "
|
|
87
87
|
"just fix the pydantic model errors, use correct grammar. "
|
|
88
|
-
"Do not remove comments. "
|
|
89
88
|
"You should follow the name of the file "
|
|
90
89
|
f"from its path {file_path} for naming the arteafact's title. "
|
|
91
90
|
"You are not allowed to use file extention in the artefact title. "
|
|
@@ -114,7 +113,7 @@ def run_agent(prompt, artefact_class):
|
|
|
114
113
|
from pydantic_ai import Agent
|
|
115
114
|
# gpt-4o
|
|
116
115
|
# anthropic:claude-3-7-sonnet-20250219
|
|
117
|
-
agent = Agent(model="
|
|
116
|
+
agent = Agent(model="anthropic:claude-3-7-sonnet-20250219",
|
|
118
117
|
result_type=artefact_class, instrument=True)
|
|
119
118
|
result = agent.run_sync(prompt)
|
|
120
119
|
return result.data
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import difflib
|
|
2
|
+
from textwrap import indent
|
|
2
3
|
from typing import Optional
|
|
3
4
|
|
|
4
5
|
|
|
5
|
-
def suggest_close_names(artefact_name: str, all_artefact_names: list[str], message: str):
|
|
6
|
-
closest_matches = difflib.get_close_matches(artefact_name, all_artefact_names, cutoff=
|
|
6
|
+
def suggest_close_names(artefact_name: str, all_artefact_names: list[str], message: str, cutoff=0.5):
|
|
7
|
+
closest_matches = difflib.get_close_matches(artefact_name, all_artefact_names, cutoff=cutoff)
|
|
7
8
|
print(message)
|
|
8
9
|
if not closest_matches:
|
|
9
10
|
return
|
|
@@ -38,3 +39,21 @@ def find_closest_name_match(artefact_name: str, all_artefact_names: list[str]) -
|
|
|
38
39
|
return None
|
|
39
40
|
closest_match = closest_matches[0]
|
|
40
41
|
return closest_match
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def find_closest_rule(parent_artefact, rule):
|
|
45
|
+
parent_classifier = parent_artefact.artefact_type.value
|
|
46
|
+
parent_title = parent_artefact.title
|
|
47
|
+
if not hasattr(parent_artefact, 'rules'):
|
|
48
|
+
raise TypeError(f"{parent_classifier.capitalize()} artefact '{parent_title}' can not possess rules. Only userstories and epics have rules.")
|
|
49
|
+
rules = parent_artefact.rules
|
|
50
|
+
if rule in rules:
|
|
51
|
+
return rule
|
|
52
|
+
print(f"Rule '{rule}' does not match existing rules in {parent_classifier} artefact '{parent_title}'. Attempting to find closest match among existing rules.")
|
|
53
|
+
closest_matches = difflib.get_close_matches(rule, rules, cutoff=0.5)
|
|
54
|
+
rules_list_string = indent('\n'.join(rules), prefix='\t- ')
|
|
55
|
+
if not closest_matches:
|
|
56
|
+
raise ValueError(f"Can not determine a match for rule '{rule}' in {parent_classifier} artefact '{parent_title}'. Found rules:\n{rules_list_string}")
|
|
57
|
+
closest_match = closest_matches[0]
|
|
58
|
+
print(f"Found closest matching rule of '{closest_match}'")
|
|
59
|
+
return closest_match
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from pydantic import BaseModel, field_validator, model_validator, Field
|
|
2
|
-
from typing import List, Dict, Tuple, Union
|
|
2
|
+
from typing import List, Dict, Tuple, Union, Optional
|
|
3
3
|
from ara_cli.artefact_models.artefact_model import Artefact, ArtefactType, Intent
|
|
4
4
|
import re
|
|
5
5
|
|
|
@@ -98,6 +98,35 @@ class Example(BaseModel):
|
|
|
98
98
|
return cls(values=values)
|
|
99
99
|
|
|
100
100
|
|
|
101
|
+
class Background(BaseModel):
|
|
102
|
+
steps: List[str] = Field(
|
|
103
|
+
description="A list of Gherkin 'Given' type steps that describe what the background does."
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
@field_validator('steps', mode='before')
|
|
107
|
+
def validate_steps(cls, v: List[str]) -> List[str]:
|
|
108
|
+
"""Ensure steps are non-empty and stripped."""
|
|
109
|
+
steps = [step.strip() for step in v if step.strip()]
|
|
110
|
+
if not steps:
|
|
111
|
+
raise ValueError("steps list must not be empty")
|
|
112
|
+
return steps
|
|
113
|
+
|
|
114
|
+
@classmethod
|
|
115
|
+
def from_lines(cls, lines: List[str], start_idx: int) -> Tuple['Background', int]:
|
|
116
|
+
"""Parse a Background from a list of lines starting at start_idx."""
|
|
117
|
+
if not lines[start_idx].startswith('Background:'):
|
|
118
|
+
raise ValueError("Expected 'Background:' at start index")
|
|
119
|
+
|
|
120
|
+
steps = []
|
|
121
|
+
idx = start_idx + 1
|
|
122
|
+
while idx < len(lines) and not lines[idx].startswith('Background:'):
|
|
123
|
+
step = lines[idx].strip()
|
|
124
|
+
if step:
|
|
125
|
+
steps.append(step)
|
|
126
|
+
idx += 1
|
|
127
|
+
return cls(steps=steps), idx
|
|
128
|
+
|
|
129
|
+
|
|
101
130
|
class Scenario(BaseModel):
|
|
102
131
|
title: str = Field(
|
|
103
132
|
description="The name of the scenario, giving a short summary of the test case. It comes from the 'Scenario:' line in the feature file."
|
|
@@ -213,6 +242,8 @@ class FeatureArtefact(Artefact):
|
|
|
213
242
|
artefact_type: ArtefactType = ArtefactType.feature
|
|
214
243
|
intent: FeatureIntent
|
|
215
244
|
scenarios: List[Union[Scenario, ScenarioOutline]] = Field(default=None)
|
|
245
|
+
background: Optional[Background] = Field(
|
|
246
|
+
default=None, description="Highly optional background Gherkin steps for Feature Artefacts. This steps apply for all scenarios and scenario outlines in this feature file.")
|
|
216
247
|
|
|
217
248
|
@field_validator('artefact_type')
|
|
218
249
|
def validate_artefact_type(cls, v):
|
|
@@ -229,6 +260,16 @@ class FeatureArtefact(Artefact):
|
|
|
229
260
|
def _artefact_type(cls) -> ArtefactType:
|
|
230
261
|
return ArtefactType.feature
|
|
231
262
|
|
|
263
|
+
def _serialize_background(self) -> str:
|
|
264
|
+
"""Helper method to dispatch background serialization."""
|
|
265
|
+
if not self.background:
|
|
266
|
+
return ""
|
|
267
|
+
lines = []
|
|
268
|
+
lines.append(" Background:")
|
|
269
|
+
for step in self.background.steps:
|
|
270
|
+
lines.append(f" {step}")
|
|
271
|
+
return "\n".join(lines)
|
|
272
|
+
|
|
232
273
|
def _serialize_scenario(self, scenario: Union[Scenario, ScenarioOutline]) -> str:
|
|
233
274
|
"""Helper method to dispatch scenario serialization."""
|
|
234
275
|
if isinstance(scenario, Scenario):
|
|
@@ -309,6 +350,10 @@ class FeatureArtefact(Artefact):
|
|
|
309
350
|
lines.append(description)
|
|
310
351
|
lines.append("")
|
|
311
352
|
|
|
353
|
+
if self.background:
|
|
354
|
+
lines.append(self._serialize_background())
|
|
355
|
+
lines.append("")
|
|
356
|
+
|
|
312
357
|
if self.scenarios:
|
|
313
358
|
for scenario in self.scenarios:
|
|
314
359
|
lines.append(self._serialize_scenario(scenario))
|
|
@@ -321,9 +366,11 @@ class FeatureArtefact(Artefact):
|
|
|
321
366
|
fields = super()._parse_common_fields(text)
|
|
322
367
|
|
|
323
368
|
intent = FeatureIntent.deserialize(text)
|
|
369
|
+
background = cls.deserialize_background(text)
|
|
324
370
|
scenarios = cls.deserialize_scenarios(text)
|
|
325
371
|
|
|
326
372
|
fields['scenarios'] = scenarios
|
|
373
|
+
fields['background'] = background
|
|
327
374
|
fields['intent'] = intent
|
|
328
375
|
|
|
329
376
|
return cls(**fields)
|
|
@@ -348,3 +395,19 @@ class FeatureArtefact(Artefact):
|
|
|
348
395
|
else:
|
|
349
396
|
idx += 1
|
|
350
397
|
return scenarios
|
|
398
|
+
|
|
399
|
+
@classmethod
|
|
400
|
+
def deserialize_background(cls, text):
|
|
401
|
+
lines = [line.strip()
|
|
402
|
+
for line in text.strip().splitlines() if line.strip()]
|
|
403
|
+
|
|
404
|
+
background = None
|
|
405
|
+
idx = 0
|
|
406
|
+
while idx < len(lines):
|
|
407
|
+
line = lines[idx].strip()
|
|
408
|
+
if line.startswith('Background:'):
|
|
409
|
+
background, next_idx = Background.from_lines(lines, idx)
|
|
410
|
+
break
|
|
411
|
+
else:
|
|
412
|
+
idx += 1
|
|
413
|
+
return background
|
|
@@ -184,10 +184,14 @@ def handle_existing_file(filename, block_content):
|
|
|
184
184
|
create_file_if_not_exist(filename, block_content)
|
|
185
185
|
else:
|
|
186
186
|
print(f"File {filename} exists, creating modification prompt")
|
|
187
|
-
|
|
187
|
+
prompt_text = create_prompt_for_file_modification(block_content, filename)
|
|
188
|
+
messages = [{"role": "user", "content": prompt_text}]
|
|
188
189
|
response = ""
|
|
189
|
-
|
|
190
|
-
|
|
190
|
+
|
|
191
|
+
for chunk in send_prompt(messages):
|
|
192
|
+
content = chunk.choices[0].delta.content
|
|
193
|
+
if content:
|
|
194
|
+
response += content
|
|
191
195
|
modify_and_save_file(response, filename)
|
|
192
196
|
|
|
193
197
|
|
|
@@ -355,8 +355,12 @@ def prepend_system_prompt(message_list):
|
|
|
355
355
|
|
|
356
356
|
|
|
357
357
|
def append_images_to_message(message, image_data_list):
|
|
358
|
-
|
|
359
|
-
|
|
358
|
+
if not image_data_list:
|
|
359
|
+
return message
|
|
360
|
+
new_content_list = [{"type": "text", "text": message}]
|
|
361
|
+
new_content_list.extend(image_data_list)
|
|
362
|
+
|
|
363
|
+
message["content"] = new_content_list
|
|
360
364
|
|
|
361
365
|
return message
|
|
362
366
|
|
|
@@ -376,14 +380,23 @@ def create_and_send_custom_prompt(classifier, parameter):
|
|
|
376
380
|
append_headings(classifier, parameter, "prompt")
|
|
377
381
|
write_prompt_result(classifier, parameter, prompt)
|
|
378
382
|
|
|
379
|
-
|
|
380
|
-
|
|
383
|
+
base_message = {
|
|
384
|
+
"role": "user",
|
|
385
|
+
"content": combined_content_markdown
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
final_message = append_images_to_message(base_message, image_data_list)
|
|
381
389
|
|
|
390
|
+
message_list_to_send = [final_message]
|
|
391
|
+
|
|
392
|
+
append_headings(classifier, parameter, "result")
|
|
382
393
|
artefact_data_path = f"ara/{sub_directory}/{parameter}.data/{classifier}.prompt_log.md"
|
|
383
394
|
with open(artefact_data_path, 'a') as file:
|
|
384
|
-
for chunk in send_prompt(
|
|
385
|
-
|
|
386
|
-
|
|
395
|
+
for chunk in send_prompt(message_list_to_send):
|
|
396
|
+
content = chunk.choices[0].delta.content
|
|
397
|
+
if content:
|
|
398
|
+
file.write(content)
|
|
399
|
+
file.flush()
|
|
387
400
|
# write_prompt_result(classifier, parameter, response)
|
|
388
401
|
|
|
389
402
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# version.py
|
|
2
|
-
__version__ = "0.1.9.
|
|
2
|
+
__version__ = "0.1.9.64" # fith parameter like .0 for local install test purposes only. official numbers should be 4 digit numbers
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/artefact_models/businessgoal_artefact_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/blueprints/empty.blueprint.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/commands/empty.commands.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/intentions/empty.intention.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/rules/code_analyst.rules.md
RENAMED
|
File without changes
|
|
File without changes
|
{ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/rules/error_analyst.rules.md
RENAMED
|
File without changes
|
{ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/rules/gherkin_expert.rules.md
RENAMED
|
File without changes
|
|
File without changes
|
{ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/rules/product_owner.rules.md
RENAMED
|
File without changes
|
{ara_cli-0.1.9.63 → ara_cli-0.1.9.64}/ara_cli/templates/prompt-modules/rules/python_behave.rules.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|