ara-cli 0.1.10.7__tar.gz → 0.1.11.1__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.10.7 → ara_cli-0.1.11.1}/PKG-INFO +1 -1
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/__main__.py +3 -1
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_config.py +3 -0
- ara_cli-0.1.11.1/ara_cli/ara_subcommands/fetch_scripts.py +8 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/chat.py +88 -0
- ara_cli-0.1.11.1/ara_cli/chat_script_runner/script_completer.py +23 -0
- ara_cli-0.1.11.1/ara_cli/chat_script_runner/script_finder.py +24 -0
- ara_cli-0.1.11.1/ara_cli/chat_script_runner/script_lister.py +24 -0
- ara_cli-0.1.11.1/ara_cli/chat_script_runner/script_runner.py +32 -0
- ara_cli-0.1.11.1/ara_cli/commands/fetch_scripts_command.py +43 -0
- ara_cli-0.1.11.1/ara_cli/templates/global-scripts/hello_global.py +1 -0
- ara_cli-0.1.11.1/ara_cli/templates/prompt-modules/commands/empty.commands.md +4 -0
- ara_cli-0.1.11.1/ara_cli/templates/prompt-modules/commands/extract_general.commands.md +12 -0
- ara_cli-0.1.11.1/ara_cli/templates/prompt-modules/commands/extract_markdown.commands.md +11 -0
- ara_cli-0.1.11.1/ara_cli/templates/prompt-modules/commands/extract_python.commands.md +13 -0
- ara_cli-0.1.11.1/ara_cli/templates/prompt-modules/commands/feature_add_or_modifiy_specified_behavior.commands.md +36 -0
- ara_cli-0.1.11.1/ara_cli/templates/prompt-modules/commands/feature_generate_initial_specified_bevahior.commands.md +53 -0
- ara_cli-0.1.11.1/ara_cli/templates/prompt-modules/commands/prompt_template_tech_stack_transformer.commands.md +95 -0
- ara_cli-0.1.11.1/ara_cli/templates/prompt-modules/commands/python_bug_fixing_code.commands.md +34 -0
- ara_cli-0.1.11.1/ara_cli/templates/prompt-modules/commands/python_generate_code.commands.md +27 -0
- ara_cli-0.1.11.1/ara_cli/templates/prompt-modules/commands/python_refactoring_code.commands.md +39 -0
- ara_cli-0.1.11.1/ara_cli/templates/prompt-modules/commands/python_step_definitions_generation_and_fixing.commands.md +40 -0
- ara_cli-0.1.11.1/ara_cli/templates/prompt-modules/commands/python_unittest_generation_and_fixing.commands.md +48 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/version.py +1 -1
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli.egg-info/PKG-INFO +1 -1
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli.egg-info/SOURCES.txt +19 -17
- ara_cli-0.1.11.1/tests/__init__.py +0 -0
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/blueprints/complete_pytest_unittest.blueprint.md +0 -27
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/blueprints/pytest_unittest_prompt.blueprint.md +0 -32
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/blueprints/task_todo_list_implement_feature_BDD_way.blueprint.md +0 -30
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/commands/artefact_classification.commands.md +0 -9
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/commands/artefact_extension.commands.md +0 -17
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/commands/artefact_formulation.commands.md +0 -14
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/commands/behave_step_generation.commands.md +0 -102
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/commands/code_generation_complex.commands.md +0 -20
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/commands/code_generation_simple.commands.md +0 -13
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/commands/empty.commands.md +0 -14
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/commands/error_fixing.commands.md +0 -20
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/commands/feature_file_update.commands.md +0 -18
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/commands/feature_formulation.commands.md +0 -43
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/commands/js_code_generation_simple.commands.md +0 -13
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/commands/refactoring.commands.md +0 -15
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/commands/refactoring_analysis.commands.md +0 -9
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/commands/reverse_engineer_feature_file.commands.md +0 -15
- ara_cli-0.1.10.7/ara_cli/templates/prompt-modules/commands/reverse_engineer_program_flow.commands.md +0 -19
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/MANIFEST.in +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/README.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/__init__.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_command_action.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/__init__.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/autofix.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/chat.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/classifier_directory.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/common.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/create.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/delete.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/extract.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/fetch_templates.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/list.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/list_tags.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/load.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/prompt.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/read.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/read_status.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/read_user.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/reconnect.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/rename.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/scan.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/set_status.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/set_user.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/ara_subcommands/template.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_autofix.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_creator.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_deleter.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_fuzzy_search.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_link_updater.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_lister.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/__init__.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/artefact_data_retrieval.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/artefact_load.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/artefact_mapping.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/artefact_model.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/artefact_templates.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/businessgoal_artefact_model.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/capability_artefact_model.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/epic_artefact_model.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/example_artefact_model.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/feature_artefact_model.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/issue_artefact_model.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/keyfeature_artefact_model.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/serialize_helper.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/task_artefact_model.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/userstory_artefact_model.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_models/vision_artefact_model.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_reader.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_renamer.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/artefact_scan.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/chat_agent/__init__.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/chat_agent/agent_communicator.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/chat_agent/agent_process_manager.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/chat_agent/agent_status_manager.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/chat_agent/agent_workspace_manager.py +0 -0
- {ara_cli-0.1.10.7/ara_cli/commands → ara_cli-0.1.11.1/ara_cli/chat_script_runner}/__init__.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/classifier.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/codefusionretriever.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/codehierachieretriever.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/commandline_completer.py +0 -0
- {ara_cli-0.1.10.7/ara_cli/file_loaders → ara_cli-0.1.11.1/ara_cli/commands}/__init__.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/commands/command.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/commands/extract_command.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/commands/load_command.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/commands/load_image_command.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/commands/read_command.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/completers.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/directory_navigator.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/error_handler.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/file_classifier.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/file_lister.py +0 -0
- {ara_cli-0.1.10.7/tests → ara_cli-0.1.11.1/ara_cli/file_loaders}/__init__.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/file_loaders/binary_file_loader.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/file_loaders/document_file_loader.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/file_loaders/document_reader.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/file_loaders/document_readers.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/file_loaders/file_loader.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/file_loaders/file_loaders.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/file_loaders/image_processor.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/file_loaders/markdown_reader.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/file_loaders/text_file_loader.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/filename_validator.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/global_file_lister.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/list_filter.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/output_suppressor.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/prompt_chat.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/prompt_extractor.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/prompt_handler.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/prompt_rag.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/run_file_lister.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/tag_extractor.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/template_loader.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/template_manager.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/agile.artefacts +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/blueprints/empty.blueprint.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/blueprints/task_todo_list_C4_architecture_analysis.blueprint.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/commands/architecture_C4_analysis.commands.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/commands/architecture_radon_cc_score.commands.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/commands/architecture_radon_halstead_v.commands.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/commands/architecture_radon_maintainability_score.commands.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/classify_task.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/empty.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/error_fixing.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/feature_fix_steps_for_scenario.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/feature_formulation.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/feature_reverse_formulation_from_code.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/feature_scenario_implementation.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/feature_scenario_implementation_update.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/feature_scenario_outline_extension.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/feature_update_formulation.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/fibonacci_example_implementation.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/js_implementation_from_task_description.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/js_steps_implementation.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/python_cli_implementation_with_test.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/python_code_understanding.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/task_implementation.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/task_prompt_control_by_status.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/task_stepwise_implementation_by_number.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/intentions/task_stepwise_implementation_by_status.intention.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/rules/architecture_analyst.rules.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/rules/code_analyst.rules.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/rules/empty.rules.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/rules/error_analyst.rules.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/rules/gherkin_expert.rules.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/rules/js_expert_developer.rules.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/rules/product_owner.rules.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/rules/python_behave.rules.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/prompt-modules/rules/python_developer.rules.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/specification_breakdown_files/template.concept.exploration.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/specification_breakdown_files/template.concept.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/specification_breakdown_files/template.customer.exploration.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/specification_breakdown_files/template.customer.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/specification_breakdown_files/template.persona.exploration.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/specification_breakdown_files/template.persona.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/specification_breakdown_files/template.step.exploration.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/specification_breakdown_files/template.step.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/specification_breakdown_files/template.technology.exploration.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/specification_breakdown_files/template.technology.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/template.businessgoal.prompt_log.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/template.capability.prompt_log.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/template.epic.prompt_log.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/template.example.prompt_log.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/template.feature.prompt_log.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/template.issue.prompt_log.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/template.keyfeature.prompt_log.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/template.steps.prompt_log.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/template.task.prompt_log.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/template.userstory.prompt_log.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/templates/template.vision.prompt_log.md +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli/update_config_prompt.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli.egg-info/dependency_links.txt +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli.egg-info/entry_points.txt +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli.egg-info/requires.txt +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/ara_cli.egg-info/top_level.txt +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/docker/base/requirements.txt +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/setup.cfg +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/setup.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_ara_command_action.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_ara_config.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_artefact_autofix.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_artefact_fuzzy_search.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_artefact_link_updater.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_artefact_lister.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_artefact_reader.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_artefact_renamer.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_artefact_scan.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_chat.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_classifier.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_directory_navigator.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_file_classifier.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_file_creator.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_file_lister.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_global_file_lister.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_list_filter.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_prompt_handler.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_tag_extractor.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_template_loader.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_template_manager.py +0 -0
- {ara_cli-0.1.10.7 → ara_cli-0.1.11.1}/tests/test_update_config_prompt.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ara_cli
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.11.1
|
|
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
6
|
Requires-Dist: langfuse
|
|
@@ -13,6 +13,7 @@ from ara_cli.ara_subcommands.prompt import register as register_prompt_cli
|
|
|
13
13
|
from ara_cli.ara_subcommands.chat import register as register_chat_cli
|
|
14
14
|
from ara_cli.ara_subcommands.template import register as register_template_cli
|
|
15
15
|
from ara_cli.ara_subcommands.fetch_templates import register as register_fetch_templates_cli
|
|
16
|
+
from ara_cli.ara_subcommands.fetch_scripts import register as register_fetch_scripts_cli
|
|
16
17
|
from ara_cli.ara_subcommands.read import register as register_read_cli
|
|
17
18
|
from ara_cli.ara_subcommands.reconnect import register as register_reconnect_cli
|
|
18
19
|
from ara_cli.ara_subcommands.read_status import register as register_read_status_cli
|
|
@@ -212,7 +213,7 @@ ara chat examples:
|
|
|
212
213
|
commands_requiring_ara = {
|
|
213
214
|
'create', 'delete', 'rename', 'list', 'list-tags', 'prompt',
|
|
214
215
|
'read', 'reconnect', 'read-status', 'read-user', 'set-status',
|
|
215
|
-
'set-user', '
|
|
216
|
+
'set-user', 'scan', 'autofix'
|
|
216
217
|
}
|
|
217
218
|
|
|
218
219
|
if ctx.invoked_subcommand in commands_requiring_ara:
|
|
@@ -228,6 +229,7 @@ ara chat examples:
|
|
|
228
229
|
register_chat_cli(app)
|
|
229
230
|
register_template_cli(app)
|
|
230
231
|
register_fetch_templates_cli(app)
|
|
232
|
+
register_fetch_scripts_cli(app)
|
|
231
233
|
register_read_cli(app)
|
|
232
234
|
register_reconnect_cli(app)
|
|
233
235
|
register_read_status_cli(app)
|
|
@@ -29,6 +29,8 @@ class ARAconfig(BaseModel):
|
|
|
29
29
|
doc_dir: str = "./docs"
|
|
30
30
|
local_prompt_templates_dir: str = "./ara/.araconfig"
|
|
31
31
|
custom_prompt_templates_subdir: Optional[str] = "custom-prompt-modules"
|
|
32
|
+
local_scripts_dir: str = "./ara/.araconfig"
|
|
33
|
+
custom_scripts_subdir: Optional[str] = "custom-scripts"
|
|
32
34
|
local_ara_templates_dir: str = "./ara/.araconfig/templates/"
|
|
33
35
|
ara_prompt_given_list_includes: List[str] = Field(
|
|
34
36
|
default_factory=lambda: [
|
|
@@ -113,6 +115,7 @@ class ARAconfig(BaseModel):
|
|
|
113
115
|
"ext_code_dirs": [{"source_dir": "./src"}, {"source_dir": "./tests"}],
|
|
114
116
|
"local_ara_templates_dir": "./ara/.araconfig/templates/",
|
|
115
117
|
"local_prompt_templates_dir": "./ara/.araconfig",
|
|
118
|
+
"local_scripts_dir": "./ara/.araconfig",
|
|
116
119
|
"glossary_dir": "./glossary",
|
|
117
120
|
}
|
|
118
121
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import typer
|
|
2
|
+
from ara_cli.commands.fetch_scripts_command import FetchScriptsCommand
|
|
3
|
+
|
|
4
|
+
def register(app: typer.Typer):
|
|
5
|
+
@app.command(name="fetch-scripts", help="Fetch global scripts into your config directory.")
|
|
6
|
+
def fetch_scripts():
|
|
7
|
+
command = FetchScriptsCommand()
|
|
8
|
+
command.execute()
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import argparse
|
|
3
3
|
import cmd2
|
|
4
|
+
import tempfile
|
|
5
|
+
import time
|
|
4
6
|
|
|
5
7
|
from ara_cli.prompt_handler import send_prompt
|
|
6
8
|
|
|
@@ -11,6 +13,9 @@ from ara_cli.file_loaders.document_file_loader import DocumentFileLoader
|
|
|
11
13
|
from ara_cli.file_loaders.binary_file_loader import BinaryFileLoader
|
|
12
14
|
from ara_cli.file_loaders.text_file_loader import TextFileLoader
|
|
13
15
|
from ara_cli.chat_agent.agent_process_manager import AgentProcessManager
|
|
16
|
+
from ara_cli.chat_script_runner.script_runner import ScriptRunner
|
|
17
|
+
from ara_cli.chat_script_runner.script_completer import ScriptCompleter
|
|
18
|
+
from ara_cli.chat_script_runner.script_lister import ScriptLister
|
|
14
19
|
|
|
15
20
|
|
|
16
21
|
extract_parser = argparse.ArgumentParser()
|
|
@@ -37,6 +42,7 @@ load_parser.add_argument(
|
|
|
37
42
|
class Chat(cmd2.Cmd):
|
|
38
43
|
CATEGORY_CHAT_CONTROL = "Chat control commands"
|
|
39
44
|
CATEGORY_LLM_CONTROL = "Language model controls"
|
|
45
|
+
CATEGORY_SCRIPT_CONTROL = "Script control commands"
|
|
40
46
|
CATEGORY_AGENT_CONTROL = "Agent control commands"
|
|
41
47
|
|
|
42
48
|
INTRO = """/***************************************/
|
|
@@ -117,6 +123,9 @@ Start chatting (type 'HELP'/'h' for available commands, 'QUIT'/'q' to exit chat
|
|
|
117
123
|
self.message_buffer = []
|
|
118
124
|
self.config = self._retrieve_ara_config()
|
|
119
125
|
self.template_loader = TemplateLoader(chat_instance=self)
|
|
126
|
+
self.script_runner = ScriptRunner(chat_instance=self)
|
|
127
|
+
self.script_lister = ScriptLister()
|
|
128
|
+
self.script_completer = ScriptCompleter()
|
|
120
129
|
|
|
121
130
|
# Initialize agent process manager
|
|
122
131
|
self.agent_manager = AgentProcessManager(self)
|
|
@@ -148,6 +157,7 @@ Start chatting (type 'HELP'/'h' for available commands, 'QUIT'/'q' to exit chat
|
|
|
148
157
|
self.aliases["lg"] = "LOAD_GIVENS"
|
|
149
158
|
self.aliases["lb"] = "LOAD_BLUEPRINT"
|
|
150
159
|
self.aliases["lt"] = "LOAD_TEMPLATE"
|
|
160
|
+
self.aliases["rpy"] = "run_pyscript"
|
|
151
161
|
# Agent control aliases
|
|
152
162
|
self.aliases["a"] = "AGENT_RUN"
|
|
153
163
|
self.aliases["as"] = "AGENT_STOP"
|
|
@@ -1117,6 +1127,84 @@ Start chatting (type 'HELP'/'h' for available commands, 'QUIT'/'q' to exit chat
|
|
|
1117
1127
|
"""Completer for the LOAD_BLUEPRINT command."""
|
|
1118
1128
|
return self._template_completer(text, "blueprint")
|
|
1119
1129
|
|
|
1130
|
+
def _select_script_from_list(self, scripts: list[str], not_found_message: str, prompt: str) -> str | None:
|
|
1131
|
+
"""Displays a list of scripts and prompts the user to select one."""
|
|
1132
|
+
if not scripts:
|
|
1133
|
+
self.poutput(not_found_message)
|
|
1134
|
+
return None
|
|
1135
|
+
|
|
1136
|
+
# Sort the scripts alphabetically by their basename for consistent display
|
|
1137
|
+
# Create a list of (basename, full_script_name) tuples for sorting and later retrieval
|
|
1138
|
+
scripts_with_basenames = [(os.path.basename(s), s) for s in scripts]
|
|
1139
|
+
scripts_with_basenames.sort(key=lambda x: x[0].lower()) # Sort by lowercase basename
|
|
1140
|
+
|
|
1141
|
+
for i, (basename, full_script_name) in enumerate(scripts_with_basenames):
|
|
1142
|
+
self.poutput(f"{i + 1}: {basename}")
|
|
1143
|
+
|
|
1144
|
+
try:
|
|
1145
|
+
choice = input(prompt)
|
|
1146
|
+
choice_index = int(choice) - 1
|
|
1147
|
+
if 0 <= choice_index < len(scripts_with_basenames):
|
|
1148
|
+
# Return the full script name from the sorted list
|
|
1149
|
+
return scripts_with_basenames[choice_index][1]
|
|
1150
|
+
else:
|
|
1151
|
+
self.poutput("Invalid choice. Aborting.")
|
|
1152
|
+
return None
|
|
1153
|
+
except (ValueError, EOFError):
|
|
1154
|
+
self.poutput("Invalid input. Aborting.")
|
|
1155
|
+
return None
|
|
1156
|
+
|
|
1157
|
+
@cmd2.with_category(CATEGORY_SCRIPT_CONTROL)
|
|
1158
|
+
def do_run_pyscript(self, arg_list: list):
|
|
1159
|
+
"""Run a python script from the chat."""
|
|
1160
|
+
|
|
1161
|
+
if not arg_list:
|
|
1162
|
+
script_name = ""
|
|
1163
|
+
else:
|
|
1164
|
+
script_name = "".join(arg_list)
|
|
1165
|
+
|
|
1166
|
+
script_map = {
|
|
1167
|
+
"global/*": (self.script_lister.get_global_scripts, "No global scripts found. Have you run 'ara fetch-scripts'?", "global/"),
|
|
1168
|
+
"*": (self.script_lister.get_custom_scripts, "No custom scripts found.", ""),
|
|
1169
|
+
"": (self.script_lister.get_all_scripts, "No scripts found.", "")
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1172
|
+
script_to_run = script_name
|
|
1173
|
+
if script_name in script_map:
|
|
1174
|
+
get_scripts, msg, prefix = script_map[script_name]
|
|
1175
|
+
scripts = get_scripts()
|
|
1176
|
+
|
|
1177
|
+
prompt = "Please choose a script to run (enter number): "
|
|
1178
|
+
|
|
1179
|
+
chosen_script = self._select_script_from_list(scripts, msg, prompt)
|
|
1180
|
+
if not chosen_script:
|
|
1181
|
+
return
|
|
1182
|
+
|
|
1183
|
+
if prefix:
|
|
1184
|
+
script_to_run = f"{prefix}{chosen_script}"
|
|
1185
|
+
else:
|
|
1186
|
+
script_to_run = chosen_script
|
|
1187
|
+
|
|
1188
|
+
if not script_to_run:
|
|
1189
|
+
return
|
|
1190
|
+
|
|
1191
|
+
output = self.script_runner.run_script(script_to_run)
|
|
1192
|
+
if output:
|
|
1193
|
+
self.poutput(output.strip())
|
|
1194
|
+
|
|
1195
|
+
def complete_run_pyscript(self, text, line, begidx, endidx):
|
|
1196
|
+
"""Completer for the run_pyscript command."""
|
|
1197
|
+
# Get all scripts: ['custom.py', 'global/global.py']
|
|
1198
|
+
available_scripts = self.script_lister.get_all_scripts()
|
|
1199
|
+
|
|
1200
|
+
# Add special commands
|
|
1201
|
+
special_commands = ['*', 'global/*', 'global/']
|
|
1202
|
+
|
|
1203
|
+
possible_completions = sorted(list(set(available_scripts + special_commands)))
|
|
1204
|
+
|
|
1205
|
+
# Filter based on what the user has typed
|
|
1206
|
+
return [s for s in possible_completions if s.startswith(text)]
|
|
1207
|
+
|
|
1120
1208
|
# ===== AGENT CONTROL COMMANDS =====
|
|
1121
1209
|
|
|
1122
1210
|
@cmd2.with_category(CATEGORY_AGENT_CONTROL)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from ara_cli.chat_script_runner.script_lister import ScriptLister
|
|
2
|
+
|
|
3
|
+
class ScriptCompleter:
|
|
4
|
+
def __init__(self):
|
|
5
|
+
self.script_lister = ScriptLister()
|
|
6
|
+
|
|
7
|
+
def __call__(self, text, line, begidx, endidx):
|
|
8
|
+
if line.startswith("rpy global/"):
|
|
9
|
+
return self._complete_global_scripts(text)
|
|
10
|
+
|
|
11
|
+
return self._complete_all_scripts(text)
|
|
12
|
+
|
|
13
|
+
def _complete_all_scripts(self, text):
|
|
14
|
+
all_scripts = self.script_lister.get_all_scripts()
|
|
15
|
+
if not text:
|
|
16
|
+
return all_scripts
|
|
17
|
+
return [s for s in all_scripts if s.startswith(text)]
|
|
18
|
+
|
|
19
|
+
def _complete_global_scripts(self, text):
|
|
20
|
+
global_scripts = self.script_lister.get_global_scripts()
|
|
21
|
+
if not text:
|
|
22
|
+
return global_scripts
|
|
23
|
+
return [s for s in global_scripts if s.startswith(text)]
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from ara_cli.ara_config import ConfigManager
|
|
3
|
+
from ara_cli.template_manager import TemplatePathManager
|
|
4
|
+
|
|
5
|
+
class ScriptFinder:
|
|
6
|
+
def __init__(self):
|
|
7
|
+
self.config = ConfigManager.get_config()
|
|
8
|
+
|
|
9
|
+
def get_custom_scripts_dir(self):
|
|
10
|
+
return os.path.join(self.config.local_prompt_templates_dir, "custom-scripts")
|
|
11
|
+
|
|
12
|
+
def get_global_scripts_dir(self):
|
|
13
|
+
return os.path.join(self.config.local_prompt_templates_dir, "global-scripts")
|
|
14
|
+
|
|
15
|
+
def find_script(self, script_name: str) -> str | None:
|
|
16
|
+
if script_name.startswith("global/"):
|
|
17
|
+
script_path = os.path.join(self.get_global_scripts_dir(), script_name.replace("global/", ""))
|
|
18
|
+
if os.path.exists(script_path):
|
|
19
|
+
return script_path
|
|
20
|
+
else:
|
|
21
|
+
script_path = os.path.join(self.get_custom_scripts_dir(), script_name)
|
|
22
|
+
if os.path.exists(script_path):
|
|
23
|
+
return script_path
|
|
24
|
+
return None
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import glob
|
|
3
|
+
from ara_cli.chat_script_runner.script_finder import ScriptFinder
|
|
4
|
+
|
|
5
|
+
class ScriptLister:
|
|
6
|
+
def __init__(self):
|
|
7
|
+
self.script_finder = ScriptFinder()
|
|
8
|
+
|
|
9
|
+
def get_all_scripts(self):
|
|
10
|
+
custom_scripts = self.get_custom_scripts()
|
|
11
|
+
global_scripts = [f"global/{s}" for s in self.get_global_scripts()]
|
|
12
|
+
return custom_scripts + global_scripts
|
|
13
|
+
|
|
14
|
+
def get_custom_scripts(self):
|
|
15
|
+
custom_scripts_dir = self.script_finder.get_custom_scripts_dir()
|
|
16
|
+
if not custom_scripts_dir or not os.path.isdir(custom_scripts_dir):
|
|
17
|
+
return []
|
|
18
|
+
return [os.path.basename(f) for f in glob.glob(os.path.join(custom_scripts_dir, "*.py"))]
|
|
19
|
+
|
|
20
|
+
def get_global_scripts(self):
|
|
21
|
+
global_scripts_dir = self.script_finder.get_global_scripts_dir()
|
|
22
|
+
if not global_scripts_dir or not os.path.isdir(global_scripts_dir):
|
|
23
|
+
return []
|
|
24
|
+
return [os.path.basename(f) for f in glob.glob(os.path.join(global_scripts_dir, "*.py"))]
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import subprocess
|
|
3
|
+
from ara_cli.chat_script_runner.script_finder import ScriptFinder
|
|
4
|
+
from ara_cli.chat_script_runner.script_lister import ScriptLister
|
|
5
|
+
|
|
6
|
+
class ScriptRunner:
|
|
7
|
+
def __init__(self, chat_instance):
|
|
8
|
+
self.chat_instance = chat_instance
|
|
9
|
+
self.script_finder = ScriptFinder()
|
|
10
|
+
self.script_lister = ScriptLister()
|
|
11
|
+
|
|
12
|
+
def run_script(self, script_name: str):
|
|
13
|
+
script_path = self.script_finder.find_script(script_name)
|
|
14
|
+
if not script_path:
|
|
15
|
+
return f"Script '{script_name}' not found."
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
result = subprocess.run(
|
|
19
|
+
["python", script_path],
|
|
20
|
+
capture_output=True,
|
|
21
|
+
text=True,
|
|
22
|
+
check=True,
|
|
23
|
+
)
|
|
24
|
+
return result.stdout
|
|
25
|
+
except subprocess.CalledProcessError as e:
|
|
26
|
+
return f"Error running script: {e}\n{e.stderr}"
|
|
27
|
+
|
|
28
|
+
def get_available_scripts(self):
|
|
29
|
+
return self.script_lister.get_all_scripts()
|
|
30
|
+
|
|
31
|
+
def get_global_scripts(self):
|
|
32
|
+
return self.script_lister.get_global_scripts()
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import shutil
|
|
3
|
+
from ara_cli.commands.command import Command
|
|
4
|
+
from ara_cli.ara_config import ConfigManager
|
|
5
|
+
from ara_cli.directory_navigator import DirectoryNavigator
|
|
6
|
+
|
|
7
|
+
class FetchScriptsCommand(Command):
|
|
8
|
+
def __init__(self, output=None):
|
|
9
|
+
self.output = output or print
|
|
10
|
+
self.config = ConfigManager.get_config()
|
|
11
|
+
|
|
12
|
+
def execute(self):
|
|
13
|
+
navigator = DirectoryNavigator()
|
|
14
|
+
original_directory = os.getcwd()
|
|
15
|
+
navigator.navigate_to_target()
|
|
16
|
+
os.chdir('..')
|
|
17
|
+
|
|
18
|
+
global_scripts_dir = self._get_global_scripts_dir()
|
|
19
|
+
global_scripts_config_dir = self._get_global_scripts_config_dir()
|
|
20
|
+
|
|
21
|
+
if not os.path.exists(global_scripts_dir):
|
|
22
|
+
self.output("Global scripts directory not found.")
|
|
23
|
+
os.chdir(original_directory)
|
|
24
|
+
return
|
|
25
|
+
|
|
26
|
+
if not os.path.exists(global_scripts_config_dir):
|
|
27
|
+
os.makedirs(global_scripts_config_dir)
|
|
28
|
+
|
|
29
|
+
for item in os.listdir(global_scripts_dir):
|
|
30
|
+
source = os.path.join(global_scripts_dir, item)
|
|
31
|
+
destination = os.path.join(global_scripts_config_dir, item)
|
|
32
|
+
if os.path.isfile(source):
|
|
33
|
+
shutil.copy2(source, destination)
|
|
34
|
+
self.output(f"Copied {item} to global scripts directory.")
|
|
35
|
+
|
|
36
|
+
os.chdir(original_directory)
|
|
37
|
+
|
|
38
|
+
def _get_global_scripts_dir(self):
|
|
39
|
+
base_path = os.path.dirname(os.path.dirname(__file__))
|
|
40
|
+
return os.path.join(base_path, "templates", "global-scripts")
|
|
41
|
+
|
|
42
|
+
def _get_global_scripts_config_dir(self):
|
|
43
|
+
return os.path.join(self.config.local_prompt_templates_dir, "global-scripts")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
print('Hello Global')
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# general file generation and file extract instructions
|
|
2
|
+
* return only full copy pastable file content using this markdown codeblock format with 5 backticks:
|
|
3
|
+
`````
|
|
4
|
+
# [ ] extract
|
|
5
|
+
# filename: <absolute filepath>/<filename>.<file_extension>
|
|
6
|
+
{valid file content depending on the given file_extension}
|
|
7
|
+
`````
|
|
8
|
+
|
|
9
|
+
* The extract and filename statements are only allowed once per markdown code block
|
|
10
|
+
* The first character of the first line inside your code block must be '#' and the first character of the second line inside your code block must be '#'
|
|
11
|
+
* replace the '# [ ] extract' statement of the template with '# [x] extract' in your response
|
|
12
|
+
* in case of files get deprecated give me a list of files that can be safely deleted
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# general markdown file generation and file extract instructions
|
|
2
|
+
* return full copy pastable file content using a markdown code block with 5-backticks:
|
|
3
|
+
`````
|
|
4
|
+
# [ ] extract
|
|
5
|
+
# filename: <filepath>/<filename>.md
|
|
6
|
+
{markdown formatted text}
|
|
7
|
+
`````
|
|
8
|
+
* The extract and filename statements are only allowed once per markdown code block
|
|
9
|
+
* The first character of the first line inside your code block must be '#' and the first character of the second line inside your code block must be '#'
|
|
10
|
+
* replace the '# [ ] extract' statement of the template with '# [x] extract' in your response
|
|
11
|
+
* in case of files get deprecated give me a list of files that can be safely deleted
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# general python code file generation and file extract instructions
|
|
2
|
+
* return only full copy pastable file content using this markdown codeblock format:
|
|
3
|
+
|
|
4
|
+
```python
|
|
5
|
+
# [ ] extract
|
|
6
|
+
# filename: src/{filename}.py
|
|
7
|
+
{python code}
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
* The extract and filename statements are only allowed once per markdown code block
|
|
11
|
+
* The first character of the first line inside your code block must be '#' and the first character of the second line inside your code block must be '#'
|
|
12
|
+
* replace the '# [ ] extract' statement of the template with '# [x] extract' in your response
|
|
13
|
+
* in case of files get deprecated give me a list of files that can be safely deleted
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# COMMANDS FOR ADDING OR MODIFYING EXISTING SPECIFIED BEHAVIOR
|
|
2
|
+
|
|
3
|
+
**At first**:
|
|
4
|
+
|
|
5
|
+
Check if a set of feature files is given
|
|
6
|
+
|
|
7
|
+
* In case no feature files are given:
|
|
8
|
+
* Stop immediately and respond with: "Error in prompt context: no feature files are given as already specified application behavior"
|
|
9
|
+
|
|
10
|
+
* Else:
|
|
11
|
+
* Continue following the given instructions
|
|
12
|
+
|
|
13
|
+
# Instructions
|
|
14
|
+
Your job is now:
|
|
15
|
+
* Silently analyze the given feature files and the specified behavior.
|
|
16
|
+
* Silently analyze the additionally given information about new wanted behavior or changes of existing behavior
|
|
17
|
+
* Develop adaptation strategies that minimize feature file changes with respect to any given already existing feature files, prefer reusing and adapting existing formulations/scenarios and steps over completely new formulations
|
|
18
|
+
* Now formulate to fully cover the new or changed behavior (one, two or many changed or new feature files)
|
|
19
|
+
|
|
20
|
+
Follow these feature file quality rules:
|
|
21
|
+
* Each feature file should not consist of more than max 3 scenarios, each feature file should follow the single responsibility principle as well as the feature file formulations should follow the separation of concerns of feature files that fully cover the human user observable behavior described in the specification notes. Consider in your formulation of the Gherkin feature files that, when implementing the graphical user interfaces, the full functionality of the Python package Streamlit can be utilized.
|
|
22
|
+
* Follow strictly the given feature file format in order to structure your feature files.
|
|
23
|
+
* You are allowed to use scenario outlines where useful. But in case they are not helpful in order to increase the readability you can just use standard scenario formulations.
|
|
24
|
+
|
|
25
|
+
* Wrap and return the formulated feature files as full copy pastable file content in the following format as markdown code block:
|
|
26
|
+
|
|
27
|
+
```artefact
|
|
28
|
+
# [ ] extract
|
|
29
|
+
# filename: ara/features/{filename}.feature
|
|
30
|
+
{formulation, with the valid feature file structure following the given feature files as reference}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
* The extract and filename statements are only allowed once per markdown code block
|
|
34
|
+
* The first character of the first line inside your code block must be '#' and the first character of the second line inside your code block must be '#'
|
|
35
|
+
* replace the '# [ ] extract' statement of the template with '# [x] extract' in your response
|
|
36
|
+
* in case of files get deprecated give me a list of files that can be safely deleted
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# COMMANDS FOR INITIALLY SPECIFYING APPLICATION BEHAVIOR USING FEATURE FILES
|
|
2
|
+
|
|
3
|
+
* Given a description of the wanted application behavior as bullet point list, specification document, ...
|
|
4
|
+
|
|
5
|
+
* And given this feature template with placeholders in <...>
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
@creator_Egermeier
|
|
9
|
+
Feature: <descriptive title>
|
|
10
|
+
|
|
11
|
+
As a <user>
|
|
12
|
+
I want to <do something | need something>
|
|
13
|
+
So that <I can achieve something>
|
|
14
|
+
|
|
15
|
+
Contributes to <here comes your parent artefact> <here comes your classifier of the parent artefact>
|
|
16
|
+
|
|
17
|
+
Description: <further optional description to understand
|
|
18
|
+
the rule, no format defined, the example artefact is only a placeholder>
|
|
19
|
+
|
|
20
|
+
Scenario: <descriptive scenario title>
|
|
21
|
+
Given <precondition>
|
|
22
|
+
When <action>
|
|
23
|
+
Then <expected result>
|
|
24
|
+
|
|
25
|
+
Scenario Outline: <descriptive scenario title>
|
|
26
|
+
Given <precondition>
|
|
27
|
+
When <action>
|
|
28
|
+
Then <expected result>
|
|
29
|
+
|
|
30
|
+
Examples:
|
|
31
|
+
| descriptive scenario title | precondition | action | expected result |
|
|
32
|
+
| <example title 1> | <example precond. 1> | <example action 1> | <example result 1> |
|
|
33
|
+
| <example title 2> | <example precond. 2> | <example action 2> | <example result 2> |
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
# Instructions
|
|
37
|
+
* Now formulate a set (one, two or many, each feature file should not consist of more than max 3 scenarios
|
|
38
|
+
* Each feature file should follow the single responsibility principle as well as the feature file formulations should follow the separation of concerns) of feature files that fully cover the human user observable behavior described in the specification notes.
|
|
39
|
+
* Consider in your formulation of the Gherkin feature files when specifying the behavior of graphical user interfaces: Describe the behavior of the graphical user interfaces so that I can clearly imagine both how they work and their visual look and feel.
|
|
40
|
+
* Follow strictly the given template format in order to structure your feature files. You are allowed to use scenario outlines where useful. But in case they are not helpful in order to increase the readability you can just use standard scenario formulations.
|
|
41
|
+
|
|
42
|
+
* Wrap and return the formulated feature files as full copy pastable file content in the following format as markdown code block:
|
|
43
|
+
|
|
44
|
+
```artefact
|
|
45
|
+
# [ ] extract
|
|
46
|
+
# filename: ara/features/{filename}.feature
|
|
47
|
+
{formulation, with the valid feature file structure as given by the feature gherkin template}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
* The extract and filename statements are only allowed once per markdown code block
|
|
51
|
+
* The first character of the first line inside your code block must be '#' and the first character of the second line inside your code block must be '#'
|
|
52
|
+
* replace the '# [ ] extract' statement of the template with '# [x] extract' in your response
|
|
53
|
+
* in case of files get deprecated give me a list of files that can be safely deleted
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Tech Stack Prompt Template Transformer
|
|
2
|
+
|
|
3
|
+
## PROMPT:
|
|
4
|
+
You are a prompt template transformation specialist. Your task is to transform Python-specific prompt templates into equivalent templates for a different technology stack while maintaining the same structure, intent, and quality standards.
|
|
5
|
+
|
|
6
|
+
### INPUT REQUIREMENTS:
|
|
7
|
+
1. **Target Technology Stack** (MANDATORY): The technology stack to transform to (e.g., 'C#', 'Java', 'React', 'TypeScript', 'Go', 'Rust', etc.)
|
|
8
|
+
2. **Source Prompt Templates** (MANDATORY): One or more Python prompt templates to transform
|
|
9
|
+
|
|
10
|
+
### TRANSFORMATION RULES:
|
|
11
|
+
1. **Preserve Structure and Intent**:
|
|
12
|
+
- Maintain the same logical flow and purpose of each prompt template
|
|
13
|
+
- Keep all sections and their hierarchical organization
|
|
14
|
+
- Preserve the extract/filename format for code generation
|
|
15
|
+
|
|
16
|
+
2. **Technology-Specific Adaptations**:
|
|
17
|
+
- Replace Python-specific references with target technology equivalents
|
|
18
|
+
- Update file extensions (.py → appropriate extension for target stack)
|
|
19
|
+
- Adapt coding standards (PEP8 → target language conventions)
|
|
20
|
+
- Replace Python packages with target language equivalents
|
|
21
|
+
- Update testing frameworks (pytest/behave → target language testing tools)
|
|
22
|
+
- Adapt documentation styles (numpy docstrings → target language documentation)
|
|
23
|
+
- Update logging approaches to target language standards
|
|
24
|
+
- Adjust line/method/class length limits based on target language best practices. Prefer lower length limits.
|
|
25
|
+
|
|
26
|
+
3. **Naming Convention**:
|
|
27
|
+
- Prefix each transformed template filename with the target technology
|
|
28
|
+
- Example: `python_bug_fixing_code.commands.md` → `csharp_bug_fixing_code.commands.md`
|
|
29
|
+
|
|
30
|
+
4. **Output Format**:
|
|
31
|
+
- Return each transformed template as a complete, copy-pastable markdown file in 5-backticks
|
|
32
|
+
- The first character of the first line inside your code block must be '#' and the first character of the second line inside your code block must be '#'
|
|
33
|
+
- Use this format for each transformed template:
|
|
34
|
+
|
|
35
|
+
`````markdown
|
|
36
|
+
# [ ] extract
|
|
37
|
+
# filename: ara/.araconfig/custom-prompt-modules/commands/{technology}_{original_template_name}
|
|
38
|
+
{transformed template content}
|
|
39
|
+
`````
|
|
40
|
+
|
|
41
|
+
5. Markdown code block handling in prompt templates
|
|
42
|
+
The first and the second line of the Markdown code blocks used in the prompt templates serve as extraction control commands. the '#' tags in the first and second line of the code blocks must not be replaced by any other symbols, independent of the technology for which the markdown code block response is defined
|
|
43
|
+
|
|
44
|
+
6. **Technology Mapping Guidelines**:
|
|
45
|
+
**For C#/.NET:**
|
|
46
|
+
- PEP8 → C# Coding Conventions (Microsoft guidelines)
|
|
47
|
+
- pytest → NUnit/xUnit/MSTest
|
|
48
|
+
- behave → SpecFlow
|
|
49
|
+
- unittest.mock → Moq/NSubstitute
|
|
50
|
+
- numpy docstrings → XML documentation comments
|
|
51
|
+
- logging package → ILogger/Serilog/NLog
|
|
52
|
+
|
|
53
|
+
**For Java:**
|
|
54
|
+
- PEP8 → Java Code Conventions (Oracle/Google style)
|
|
55
|
+
- pytest → JUnit/TestNG
|
|
56
|
+
- behave → Cucumber-JVM
|
|
57
|
+
- unittest.mock → Mockito/EasyMock
|
|
58
|
+
- numpy docstrings → Javadoc
|
|
59
|
+
- logging package → SLF4J/Log4j
|
|
60
|
+
|
|
61
|
+
**For JavaScript/TypeScript:**
|
|
62
|
+
- PEP8 → ESLint/Prettier standards
|
|
63
|
+
- pytest → Jest/Mocha/Vitest
|
|
64
|
+
- behave → Cucumber.js, Selenium
|
|
65
|
+
- unittest.mock → Jest mocks/Sinon
|
|
66
|
+
- numpy docstrings → JSDoc/TSDoc
|
|
67
|
+
- logging package → Winston/Bunyan/Pino
|
|
68
|
+
|
|
69
|
+
**For React:**
|
|
70
|
+
- Include React-specific patterns (components, hooks, state management)
|
|
71
|
+
- pytest → Jest/React Testing Library
|
|
72
|
+
- behave → Selenium
|
|
73
|
+
- Add component testing guidelines
|
|
74
|
+
- Include JSX/TSX specific rules
|
|
75
|
+
|
|
76
|
+
7. **Preserve Key Constraints**:
|
|
77
|
+
- Maintain separation of concerns and single responsibility principles
|
|
78
|
+
- Keep modular/extensible design requirements
|
|
79
|
+
- Preserve testability requirements
|
|
80
|
+
- Maintain observability/logging requirements
|
|
81
|
+
|
|
82
|
+
### VALIDATION:
|
|
83
|
+
- Ensure all Python-specific references are properly transformed
|
|
84
|
+
- Verify file paths and extensions match target technology conventions
|
|
85
|
+
- Confirm testing and mocking frameworks are appropriate for target stack
|
|
86
|
+
- Check that documentation styles match target language standards
|
|
87
|
+
|
|
88
|
+
### OUTPUT SPECIFICATION:
|
|
89
|
+
- Replace '# [ ] extract' with '# [x] extract' in all output blocks
|
|
90
|
+
- Ensure each template is complete and ready for extraction
|
|
91
|
+
- Include a summary of key transformations made for each template
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
**Begin transformation after receiving target technology stack and source templates.**
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
### COMMANDS FOR FIXING BUGS
|
|
2
|
+
|
|
3
|
+
Your job is now to fix the described error:
|
|
4
|
+
|
|
5
|
+
* Silently analyze the given error description or error log files
|
|
6
|
+
* Silently review the provided source files and if given the provided feature file (specified behavior) to understand the current faulty implementation and draft silently a potential solution to fix the error
|
|
7
|
+
* Develop implementation strategies that minimize code changes, prefer reusing existing methods over new implementations. Also always prefer to use existing python packages over your own implementation.
|
|
8
|
+
|
|
9
|
+
When you touch code or need to generate code for bug fixing:
|
|
10
|
+
* The max function or method length should not exceed 40 lines.
|
|
11
|
+
* The max class length should not exceed 150 lines.
|
|
12
|
+
* The max file length should not exceed 150 lines.
|
|
13
|
+
* Split implementation files or functions/methods/classes in case they exceed their defined length maximum.
|
|
14
|
+
* Apply as coding and design principle the separation of concerns and single responsibility principle in general and specifically when you need to split.
|
|
15
|
+
|
|
16
|
+
* Important: you are NOT allowed to do any further refactorings not related to the bug fixing implementation. Refactoring for enhancing the code quality is not allowed.
|
|
17
|
+
* The fixed code must fully implement the specified behavior in an easy testable and modular/extensible way.
|
|
18
|
+
* Follow PEP8 coding guidelines.
|
|
19
|
+
* Use descriptive numpy style docstrings for inline method and class documentation.
|
|
20
|
+
* Use the python logger logging package to implement logging for all application modules that enables a fine granular full observability of the program flow by the log file. Use ./logs/<module_name>.log as filepath for logging.
|
|
21
|
+
|
|
22
|
+
* Only return full copy pastable file content.
|
|
23
|
+
* Use for every single generated code block this markdown code block format:
|
|
24
|
+
|
|
25
|
+
```python
|
|
26
|
+
# [ ] extract
|
|
27
|
+
# filename: src/{filename}.py
|
|
28
|
+
{python code}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
* The extract and filename statements are only allowed once per code block
|
|
32
|
+
* The first character of the first line inside your code block must be '#' and the first character of the second line inside your code block must be '#'
|
|
33
|
+
* replace the '# [ ] extract' statement of the template with '# [x] extract' in your response
|
|
34
|
+
* in case of files get deprecated give me a list of files that can be safely deleted
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
### COMMANDS FOR IMPLEMENTING ONE OR A SET OF NEW OR CHANGED FEATURE FILES
|
|
2
|
+
|
|
3
|
+
Your job is now:
|
|
4
|
+
* Silently analyze the given feature files and the specified behavior.
|
|
5
|
+
* Develop implementation strategies that minimize code changes with respect to any given code and test files, prefer reusing existing methods over new implementations.
|
|
6
|
+
* The max function length should not exceed 25 lines. The max file length should not exceed 120 lines.
|
|
7
|
+
* Always prefer to use existing python packages over your own implementation.
|
|
8
|
+
* In case additional implementation instructions are given as:
|
|
9
|
+
* Specified in files with extensions "*.technology.md" follow strictly the specified mandatory python packages and tech stack
|
|
10
|
+
* Explicitly specified as example reference implementation: use this reference information as starting point for your own implementation
|
|
11
|
+
* Fully implement the specified behavior in an easy testable and modular/extensible way, fully implement unit tests for your production code (try to achieve at least 90% code coverage) and implement for all given feature files the corresponding step definitions. Follow PEP8 coding guidelines, use numpy style docstrings for inline function documentation, apply as coding and design principle the separation of concerns and single responsibility principle.
|
|
12
|
+
* Generated or reworked python methods must not exceed 25 lines of code. In case methods exceed this length they need to be split according to the single responsibility principle and separation of concerns.
|
|
13
|
+
* Generated or reworked python files must not exceed 120 lines of code. In case files exceed this length they need to be split according to the single responsibility principle and separation of concerns.
|
|
14
|
+
* Use the python logger logging package to implement logging for all application modules that enable a full observability of the program flow over the log file. Use ./logs/<module_name>.log as filepath for logging.
|
|
15
|
+
|
|
16
|
+
* Only return full copy pastable file content for production code, unit test files and step definition files. Use for every single generated code block this markdown code block format:
|
|
17
|
+
|
|
18
|
+
```python
|
|
19
|
+
# [ ] extract
|
|
20
|
+
# filename: src/{filename}.py
|
|
21
|
+
{python code}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
* The extract and filename statements are only allowed once per markdown code block
|
|
25
|
+
* The first character of the first line inside your code block must be '#' and the first character of the second line inside your code block must be '#'
|
|
26
|
+
* replace the '# [ ] extract' statement of the template with '# [x] extract' in your response
|
|
27
|
+
* in case of files get deprecated give me a list of files that can be safely deleted
|