ara-cli 0.1.10.0__tar.gz → 0.1.10.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.
Files changed (202) hide show
  1. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/PKG-INFO +2 -1
  2. ara_cli-0.1.10.1/ara_cli/__main__.py +165 -0
  3. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/ara_command_action.py +11 -6
  4. ara_cli-0.1.10.1/ara_cli/ara_subcommands/autofix.py +26 -0
  5. ara_cli-0.1.10.1/ara_cli/ara_subcommands/chat.py +27 -0
  6. ara_cli-0.1.10.1/ara_cli/ara_subcommands/classifier_directory.py +16 -0
  7. ara_cli-0.1.10.1/ara_cli/ara_subcommands/common.py +100 -0
  8. ara_cli-0.1.10.1/ara_cli/ara_subcommands/create.py +75 -0
  9. ara_cli-0.1.10.1/ara_cli/ara_subcommands/delete.py +22 -0
  10. ara_cli-0.1.10.1/ara_cli/ara_subcommands/extract.py +22 -0
  11. ara_cli-0.1.10.1/ara_cli/ara_subcommands/fetch_templates.py +14 -0
  12. ara_cli-0.1.10.1/ara_cli/ara_subcommands/list.py +65 -0
  13. ara_cli-0.1.10.1/ara_cli/ara_subcommands/list_tags.py +25 -0
  14. ara_cli-0.1.10.1/ara_cli/ara_subcommands/load.py +48 -0
  15. ara_cli-0.1.10.1/ara_cli/ara_subcommands/prompt.py +136 -0
  16. ara_cli-0.1.10.1/ara_cli/ara_subcommands/read.py +47 -0
  17. ara_cli-0.1.10.1/ara_cli/ara_subcommands/read_status.py +20 -0
  18. ara_cli-0.1.10.1/ara_cli/ara_subcommands/read_user.py +20 -0
  19. ara_cli-0.1.10.1/ara_cli/ara_subcommands/reconnect.py +27 -0
  20. ara_cli-0.1.10.1/ara_cli/ara_subcommands/rename.py +22 -0
  21. ara_cli-0.1.10.1/ara_cli/ara_subcommands/scan.py +14 -0
  22. ara_cli-0.1.10.1/ara_cli/ara_subcommands/set_status.py +22 -0
  23. ara_cli-0.1.10.1/ara_cli/ara_subcommands/set_user.py +22 -0
  24. ara_cli-0.1.10.1/ara_cli/ara_subcommands/template.py +16 -0
  25. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/artefact_model.py +88 -19
  26. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/artefact_templates.py +18 -9
  27. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/userstory_artefact_model.py +2 -2
  28. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_scan.py +2 -2
  29. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/chat.py +1 -0
  30. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/commands/read_command.py +17 -4
  31. ara_cli-0.1.10.1/ara_cli/completers.py +144 -0
  32. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/tag_extractor.py +33 -16
  33. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/version.py +1 -1
  34. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli.egg-info/PKG-INFO +2 -1
  35. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli.egg-info/SOURCES.txt +23 -1
  36. ara_cli-0.1.10.0/docker/base/requirements.txt → ara_cli-0.1.10.1/ara_cli.egg-info/requires.txt +2 -1
  37. ara_cli-0.1.10.0/ara_cli.egg-info/requires.txt → ara_cli-0.1.10.1/docker/base/requirements.txt +1 -0
  38. ara_cli-0.1.10.1/tests/__init__.py +0 -0
  39. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_artefact_scan.py +1 -1
  40. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_tag_extractor.py +19 -13
  41. ara_cli-0.1.10.0/ara_cli/__main__.py +0 -129
  42. ara_cli-0.1.10.0/ara_cli/ara_command_parser.py +0 -605
  43. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/MANIFEST.in +0 -0
  44. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/README.md +0 -0
  45. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/__init__.py +0 -0
  46. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/ara_config.py +0 -0
  47. {ara_cli-0.1.10.0/ara_cli/artefact_models → ara_cli-0.1.10.1/ara_cli/ara_subcommands}/__init__.py +0 -0
  48. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_autofix.py +0 -0
  49. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_creator.py +0 -0
  50. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_deleter.py +0 -0
  51. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_fuzzy_search.py +0 -0
  52. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_link_updater.py +0 -0
  53. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_lister.py +0 -0
  54. {ara_cli-0.1.10.0/ara_cli/commands → ara_cli-0.1.10.1/ara_cli/artefact_models}/__init__.py +0 -0
  55. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/artefact_data_retrieval.py +0 -0
  56. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/artefact_load.py +0 -0
  57. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/artefact_mapping.py +0 -0
  58. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/businessgoal_artefact_model.py +0 -0
  59. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/capability_artefact_model.py +0 -0
  60. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/epic_artefact_model.py +0 -0
  61. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/example_artefact_model.py +0 -0
  62. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/feature_artefact_model.py +0 -0
  63. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/issue_artefact_model.py +0 -0
  64. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/keyfeature_artefact_model.py +0 -0
  65. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/serialize_helper.py +0 -0
  66. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/task_artefact_model.py +0 -0
  67. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_models/vision_artefact_model.py +0 -0
  68. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_reader.py +0 -0
  69. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/artefact_renamer.py +0 -0
  70. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/classifier.py +0 -0
  71. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/codefusionretriever.py +0 -0
  72. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/codehierachieretriever.py +0 -0
  73. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/commandline_completer.py +0 -0
  74. {ara_cli-0.1.10.0/ara_cli/file_loaders → ara_cli-0.1.10.1/ara_cli/commands}/__init__.py +0 -0
  75. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/commands/command.py +0 -0
  76. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/commands/extract_command.py +0 -0
  77. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/commands/load_command.py +0 -0
  78. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/commands/load_image_command.py +0 -0
  79. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/directory_navigator.py +0 -0
  80. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/error_handler.py +0 -0
  81. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/file_classifier.py +0 -0
  82. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/file_lister.py +0 -0
  83. {ara_cli-0.1.10.0/tests → ara_cli-0.1.10.1/ara_cli/file_loaders}/__init__.py +0 -0
  84. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/file_loaders/binary_file_loader.py +0 -0
  85. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/file_loaders/document_file_loader.py +0 -0
  86. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/file_loaders/document_reader.py +0 -0
  87. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/file_loaders/document_readers.py +0 -0
  88. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/file_loaders/file_loader.py +0 -0
  89. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/file_loaders/file_loaders.py +0 -0
  90. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/file_loaders/image_processor.py +0 -0
  91. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/file_loaders/markdown_reader.py +0 -0
  92. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/file_loaders/text_file_loader.py +0 -0
  93. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/filename_validator.py +0 -0
  94. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/global_file_lister.py +0 -0
  95. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/list_filter.py +0 -0
  96. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/output_suppressor.py +0 -0
  97. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/prompt_chat.py +0 -0
  98. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/prompt_extractor.py +0 -0
  99. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/prompt_handler.py +0 -0
  100. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/prompt_rag.py +0 -0
  101. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/run_file_lister.py +0 -0
  102. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/template_loader.py +0 -0
  103. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/template_manager.py +0 -0
  104. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/agile.artefacts +0 -0
  105. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/blueprints/complete_pytest_unittest.blueprint.md +0 -0
  106. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/blueprints/empty.blueprint.md +0 -0
  107. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/blueprints/task_todo_list_C4_architecture_analysis.blueprint.md +0 -0
  108. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/blueprints/task_todo_list_implement_feature_BDD_way.blueprint.md +0 -0
  109. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/architecture_C4_analysis.commands.md +0 -0
  110. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/architecture_radon_cc_score.commands.md +0 -0
  111. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/architecture_radon_halstead_v.commands.md +0 -0
  112. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/architecture_radon_maintainability_score.commands.md +0 -0
  113. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/artefact_classification.commands.md +0 -0
  114. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/artefact_extension.commands.md +0 -0
  115. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/artefact_formulation.commands.md +0 -0
  116. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/behave_step_generation.commands.md +0 -0
  117. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/code_generation_complex.commands.md +0 -0
  118. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/code_generation_simple.commands.md +0 -0
  119. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/empty.commands.md +0 -0
  120. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/error_fixing.commands.md +0 -0
  121. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/feature_file_update.commands.md +0 -0
  122. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/feature_formulation.commands.md +0 -0
  123. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/js_code_generation_simple.commands.md +0 -0
  124. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/refactoring.commands.md +0 -0
  125. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/refactoring_analysis.commands.md +0 -0
  126. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/reverse_engineer_feature_file.commands.md +0 -0
  127. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/commands/reverse_engineer_program_flow.commands.md +0 -0
  128. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/classify_task.intention.md +0 -0
  129. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/empty.intention.md +0 -0
  130. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/error_fixing.intention.md +0 -0
  131. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/feature_fix_steps_for_scenario.intention.md +0 -0
  132. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/feature_formulation.intention.md +0 -0
  133. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/feature_reverse_formulation_from_code.intention.md +0 -0
  134. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/feature_scenario_implementation.intention.md +0 -0
  135. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/feature_scenario_implementation_update.intention.md +0 -0
  136. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/feature_scenario_outline_extension.intention.md +0 -0
  137. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/feature_update_formulation.intention.md +0 -0
  138. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/fibonacci_example_implementation.intention.md +0 -0
  139. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/js_implementation_from_task_description.intention.md +0 -0
  140. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/js_steps_implementation.intention.md +0 -0
  141. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/python_cli_implementation_with_test.intention.md +0 -0
  142. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/python_code_understanding.intention.md +0 -0
  143. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/task_implementation.intention.md +0 -0
  144. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/task_prompt_control_by_status.intention.md +0 -0
  145. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/task_stepwise_implementation_by_number.intention.md +0 -0
  146. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/intentions/task_stepwise_implementation_by_status.intention.md +0 -0
  147. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/rules/architecture_analyst.rules.md +0 -0
  148. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/rules/code_analyst.rules.md +0 -0
  149. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/rules/empty.rules.md +0 -0
  150. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/rules/error_analyst.rules.md +0 -0
  151. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/rules/gherkin_expert.rules.md +0 -0
  152. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/rules/js_expert_developer.rules.md +0 -0
  153. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/rules/product_owner.rules.md +0 -0
  154. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/rules/python_behave.rules.md +0 -0
  155. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/prompt-modules/rules/python_developer.rules.md +0 -0
  156. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/specification_breakdown_files/template.concept.exploration.md +0 -0
  157. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/specification_breakdown_files/template.concept.md +0 -0
  158. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/specification_breakdown_files/template.customer.exploration.md +0 -0
  159. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/specification_breakdown_files/template.customer.md +0 -0
  160. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/specification_breakdown_files/template.persona.exploration.md +0 -0
  161. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/specification_breakdown_files/template.persona.md +0 -0
  162. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/specification_breakdown_files/template.step.exploration.md +0 -0
  163. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/specification_breakdown_files/template.step.md +0 -0
  164. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/specification_breakdown_files/template.technology.exploration.md +0 -0
  165. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/specification_breakdown_files/template.technology.md +0 -0
  166. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/template.businessgoal.prompt_log.md +0 -0
  167. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/template.capability.prompt_log.md +0 -0
  168. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/template.epic.prompt_log.md +0 -0
  169. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/template.example.prompt_log.md +0 -0
  170. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/template.feature.prompt_log.md +0 -0
  171. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/template.issue.prompt_log.md +0 -0
  172. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/template.keyfeature.prompt_log.md +0 -0
  173. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/template.steps.prompt_log.md +0 -0
  174. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/template.task.prompt_log.md +0 -0
  175. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/template.userstory.prompt_log.md +0 -0
  176. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/templates/template.vision.prompt_log.md +0 -0
  177. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli/update_config_prompt.py +0 -0
  178. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli.egg-info/dependency_links.txt +0 -0
  179. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli.egg-info/entry_points.txt +0 -0
  180. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/ara_cli.egg-info/top_level.txt +0 -0
  181. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/setup.cfg +0 -0
  182. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/setup.py +0 -0
  183. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_ara_command_action.py +0 -0
  184. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_ara_config.py +0 -0
  185. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_artefact_autofix.py +0 -0
  186. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_artefact_fuzzy_search.py +0 -0
  187. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_artefact_link_updater.py +0 -0
  188. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_artefact_lister.py +0 -0
  189. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_artefact_reader.py +0 -0
  190. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_artefact_renamer.py +0 -0
  191. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_chat.py +0 -0
  192. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_classifier.py +0 -0
  193. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_directory_navigator.py +0 -0
  194. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_file_classifier.py +0 -0
  195. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_file_creator.py +0 -0
  196. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_file_lister.py +0 -0
  197. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_global_file_lister.py +0 -0
  198. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_list_filter.py +0 -0
  199. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_prompt_handler.py +0 -0
  200. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_template_loader.py +0 -0
  201. {ara_cli-0.1.10.0 → ara_cli-0.1.10.1}/tests/test_template_manager.py +0 -0
  202. {ara_cli-0.1.10.0 → ara_cli-0.1.10.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.10.0
3
+ Version: 0.1.10.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
@@ -19,6 +19,7 @@ Requires-Dist: pydantic
19
19
  Requires-Dist: pydantic_ai
20
20
  Requires-Dist: python-docx
21
21
  Requires-Dist: pymupdf4llm
22
+ Requires-Dist: typer
22
23
  Dynamic: description
23
24
  Dynamic: description-content-type
24
25
  Dynamic: requires-dist
@@ -0,0 +1,165 @@
1
+ import typer
2
+ import sys
3
+ from typing import Optional
4
+ from os import getenv
5
+ from ara_cli.error_handler import AraError
6
+ from ara_cli.version import __version__
7
+ from ara_cli import error_handler
8
+ from ara_cli.ara_subcommands.create import register as register_create_cli
9
+ from ara_cli.ara_subcommands.delete import register as register_delete_cli
10
+ from ara_cli.ara_subcommands.rename import register as register_rename_cli
11
+ from ara_cli.ara_subcommands.list import register as register_list_cli
12
+ from ara_cli.ara_subcommands.list_tags import register as register_list_tags_cli
13
+ from ara_cli.ara_subcommands.prompt import register as register_prompt_cli
14
+ from ara_cli.ara_subcommands.chat import register as register_chat_cli
15
+ from ara_cli.ara_subcommands.template import register as register_template_cli
16
+ from ara_cli.ara_subcommands.fetch_templates import register as register_fetch_templates_cli
17
+ from ara_cli.ara_subcommands.read import register as register_read_cli
18
+ from ara_cli.ara_subcommands.reconnect import register as register_reconnect_cli
19
+ from ara_cli.ara_subcommands.read_status import register as register_read_status_cli
20
+ from ara_cli.ara_subcommands.read_user import register as register_read_user_cli
21
+ from ara_cli.ara_subcommands.set_status import register as register_set_status_cli
22
+ from ara_cli.ara_subcommands.set_user import register as register_set_user_cli
23
+ from ara_cli.ara_subcommands.classifier_directory import register as register_classifier_directory_cli
24
+ from ara_cli.ara_subcommands.scan import register as register_scan_cli
25
+ from ara_cli.ara_subcommands.autofix import register as register_autofix_cli
26
+ from ara_cli.ara_subcommands.extract import register as register_extract_cli
27
+ from ara_cli.ara_subcommands.load import register as register_load_cli
28
+
29
+
30
+ def version_callback(value: bool):
31
+ if value:
32
+ typer.echo(f"ara {__version__}")
33
+ raise typer.Exit()
34
+
35
+
36
+ def is_debug_mode_enabled():
37
+ """Check if debug mode is enabled via environment variable."""
38
+ return getenv('ARA_DEBUG', '').lower() in ('1', 'true', 'yes')
39
+
40
+
41
+ def configure_debug_mode(debug: bool, env_debug_mode: bool):
42
+ """Configure debug mode based on arguments and environment."""
43
+ if debug or env_debug_mode:
44
+ error_handler.debug_mode = True
45
+
46
+
47
+ def create_app():
48
+ app = typer.Typer(
49
+ help="""The ara cli terminal tool is a management tool for classified ara artefacts.
50
+
51
+ Valid classified artefacts are: businessgoal, vision, capability, keyfeature, feature, epic, userstory, example, feature, task.
52
+
53
+ The default ara directory structure of classified artefact of the ara cli tool is:
54
+ .
55
+ └── ara
56
+ ├── businessgoals
57
+ ├── capabilities
58
+ ├── epics
59
+ ├── examples
60
+ ├── features
61
+ ├── keyfeatures
62
+ ├── tasks
63
+ ├── userstories
64
+ └── vision
65
+
66
+ ara artefact handling examples:
67
+ > create a new artefact for e.g. a feature: ara create feature {feature_name}
68
+ > create a new artefact for e.g. a feature that contributes to an userstory: ara create feature {feature_name} contributes-to userstory {story_name}
69
+ > read an artefact and return the content as terminal output, for eg. of a task: ara read task {task_name}
70
+ > read an artefact and its full chain of contributions to its parents and return
71
+ the content as terminal output, for eg. of a task: ara read task {task_name} --branch
72
+ > delete an artefact for e.g. feature: ara delete feature {feature_name}
73
+ > rename artefact and artefact data directory for e.g. a feature: ara rename feature {initial_feature_name} {new_feature_name}
74
+ > create additional templates for a specific aspect (valid aspects are: customer,
75
+ persona, concept, technology) related to an existing artefact like a feature: ara create feature {feature_name} aspect {aspect_name}
76
+ > list artefact data with .md file extension ara list --data {classifier} {artefact_name} --include-extension .md
77
+ > list artefact data with .md and .json file extensions ara list --data {classifier} {artefact_name} --include-extension .md .json
78
+ > list everything but userstories ara list --exclude-extension .userstory
79
+ > list all existing features: ara list --include-extension .feature
80
+ > list all child artefacts contributing value to a parent artefact: ara list --include-content "Contributes to {name_of_parent_artefact} {ara classifier_of_parent_artefact}"
81
+ > list tasks which contain 'example content' ara list --include-extension .task --include-content "example content"
82
+ > list children artefacts of a userstory ara list --children userstory {name_of_userstory}
83
+ > list parent artefacts of a userstory ara list --branch userstory {name_of_userstory}
84
+ > list parent businessgoal artefact of a userstory ara list --branch userstory {name_of_userstory} --include-extension .businessgoal
85
+ > print any artefact template for e.g. a feature file template in the terminal: ara template feature
86
+
87
+ ara prompt templates examples:
88
+ > get and copy all prompt templates (blueprints, rules, intentions, commands
89
+ in the ara/.araconfig/global-prompt-modules directory: ara fetch-templates
90
+
91
+ ara chat examples:
92
+ > chat with ara and save the default chat.md file in the working directory: ara chat
93
+ > chat with ara and save the default task_chat.md file in the task.data directory: ara prompt chat task {task_name}
94
+
95
+ > initialize a macro prompt for a task: ara prompt init task {task_name}
96
+ > load selected templates in config_prompt_templates.md for the task {task_name}: ara prompt load task {task_name}
97
+ > create and send configured prompt of the task {task_name} to the configured LLM: ara prompt send task {task_name}
98
+ > extract the selected LLM response in task.exploration.md and save to disk: ara prompt extract task {task_name}
99
+ """,
100
+ no_args_is_help=True,
101
+ add_completion=True,
102
+ rich_markup_mode="rich"
103
+ )
104
+
105
+ @app.callback(invoke_without_command=True)
106
+ def main(
107
+ ctx: typer.Context,
108
+ version: Optional[bool] = typer.Option(
109
+ None, "--version", "-v",
110
+ callback=version_callback,
111
+ is_eager=True,
112
+ help="Show version and exit"
113
+ ),
114
+ debug: bool = typer.Option(
115
+ False, "--debug",
116
+ help="Enable debug mode for detailed error output"
117
+ )
118
+ ):
119
+ """The ara cli terminal tool is a management tool for classified ara artefacts."""
120
+ debug_mode = is_debug_mode_enabled()
121
+ configure_debug_mode(debug, debug_mode)
122
+
123
+ # Only show help if no subcommand is invoked
124
+ if ctx.invoked_subcommand is None:
125
+ ctx.get_help()
126
+ ctx.exit()
127
+
128
+ # Register all commands
129
+ register_create_cli(app)
130
+ register_delete_cli(app)
131
+ register_rename_cli(app)
132
+ register_list_cli(app)
133
+ register_list_tags_cli(app)
134
+ register_prompt_cli(app)
135
+ register_chat_cli(app)
136
+ register_template_cli(app)
137
+ register_fetch_templates_cli(app)
138
+ register_read_cli(app)
139
+ register_reconnect_cli(app)
140
+ register_read_status_cli(app)
141
+ register_read_user_cli(app)
142
+ register_set_status_cli(app)
143
+ register_set_user_cli(app)
144
+ register_classifier_directory_cli(app)
145
+ register_scan_cli(app)
146
+ register_autofix_cli(app)
147
+ register_extract_cli(app)
148
+ register_load_cli(app)
149
+
150
+ return app
151
+
152
+
153
+ def cli():
154
+ app = create_app()
155
+ try:
156
+ app()
157
+ except KeyboardInterrupt:
158
+ typer.echo("\n[INFO] Operation cancelled by user", err=True)
159
+ raise typer.Exit(130) # Standard exit code for Ctrl+C
160
+ except Exception as e:
161
+ error_handler.handle_error(e, context="cli")
162
+
163
+
164
+ if __name__ == "__main__":
165
+ cli()
@@ -130,9 +130,6 @@ def list_action(args):
130
130
  )
131
131
  return
132
132
 
133
- if (args.tags):
134
- artefact_lister.list_files(tags=args.tags, list_filter=list_filter)
135
- return
136
133
  artefact_lister.list_files(list_filter=list_filter)
137
134
 
138
135
 
@@ -147,17 +144,25 @@ def list_tags_action(args):
147
144
  )
148
145
 
149
146
  tag_extractor = TagExtractor()
150
- tags = tag_extractor.extract_tags(
147
+ tag_groups = tag_extractor.extract_tags(
151
148
  filtered_extra_column=getattr(args, "filtered_extra_column", False),
152
149
  list_filter=list_filter
153
150
  )
154
151
 
155
152
  if args.json:
156
- output = json.dumps({"tags": tags})
153
+ all_tags = []
154
+ for group in tag_groups.values():
155
+ all_tags.extend(group)
156
+ output = json.dumps({"tags": sorted(all_tags)})
157
157
  print(output)
158
158
  return
159
159
 
160
- output = "\n".join(f"- {tag}" for tag in tags)
160
+ output_lines = []
161
+ for key in sorted(tag_groups.keys()):
162
+ line = " ".join(sorted(list(tag_groups[key])))
163
+ output_lines.append(line)
164
+
165
+ output = "\n".join(f"- {tag}" for tag in output_lines)
161
166
  print(output)
162
167
 
163
168
 
@@ -0,0 +1,26 @@
1
+ import typer
2
+ from .common import MockArgs
3
+ from ara_cli.ara_command_action import autofix_action
4
+
5
+
6
+ def autofix_main(
7
+ single_pass: bool = typer.Option(False, "--single-pass", help="Run the autofix once for every scanned file"),
8
+ deterministic: bool = typer.Option(False, "-d", "--deterministic", help="Run only deterministic fixes e.g Title-FileName Mismatch fix"),
9
+ non_deterministic: bool = typer.Option(False, "-nd", "--non-deterministic", help="Run only non-deterministic fixes")
10
+ ):
11
+ """Fix ARA tree with llm models for scanned artefacts with ara scan command."""
12
+ if deterministic and non_deterministic:
13
+ typer.echo("Error: --deterministic and --non-deterministic are mutually exclusive", err=True)
14
+ raise typer.Exit(1)
15
+
16
+ args = MockArgs(
17
+ single_pass=single_pass,
18
+ deterministic=deterministic,
19
+ non_deterministic=non_deterministic
20
+ )
21
+ autofix_action(args)
22
+
23
+
24
+ def register(parent: typer.Typer):
25
+ help_text = "Fix ARA tree with llm models for scanned artefacts"
26
+ parent.command(name="autofix", help=help_text)(autofix_main)
@@ -0,0 +1,27 @@
1
+ import typer
2
+ from typing import Optional, List
3
+ from .common import MockArgs, ChatNameArgument
4
+ from ara_cli.ara_command_action import chat_action
5
+
6
+
7
+ def chat_main(
8
+ chat_name: Optional[str] = ChatNameArgument("Optional name for a specific chat. Pass the .md file to continue an existing chat", None),
9
+ reset: Optional[bool] = typer.Option(None, "-r", "--reset/--no-reset", help="Reset the chat file if it exists"),
10
+ output_mode: bool = typer.Option(False, "--out", help="Output the contents of the chat file instead of entering interactive chat mode"),
11
+ append: Optional[List[str]] = typer.Option(None, "--append", help="Append strings to the chat file"),
12
+ restricted: Optional[bool] = typer.Option(None, "--restricted/--no-restricted", help="Start with a limited set of commands")
13
+ ):
14
+ """Command line chatbot. Chat control with SEND/s | RERUN/r | QUIT/q"""
15
+ args = MockArgs(
16
+ chat_name=chat_name,
17
+ reset=reset,
18
+ output_mode=output_mode,
19
+ append=append,
20
+ restricted=restricted
21
+ )
22
+ chat_action(args)
23
+
24
+
25
+ def register(parent: typer.Typer):
26
+ help_text = "Command line chatbot. Chat control with SEND/s | RERUN/r | QUIT/q"
27
+ parent.command(name="chat", help=help_text)(chat_main)
@@ -0,0 +1,16 @@
1
+ import typer
2
+ from .common import ClassifierEnum, MockArgs, ClassifierArgument
3
+ from ara_cli.ara_command_action import classifier_directory_action
4
+
5
+
6
+ def classifier_directory_main(
7
+ classifier: ClassifierEnum = ClassifierArgument("Classifier of the artefact type")
8
+ ):
9
+ """Print the ara subdirectory for an artefact classifier."""
10
+ args = MockArgs(classifier=classifier.value)
11
+ classifier_directory_action(args)
12
+
13
+
14
+ def register(parent: typer.Typer):
15
+ help_text = "Print the ara subdirectory for an artefact classifier"
16
+ parent.command(name="classifier-directory", help=help_text)(classifier_directory_main)
@@ -0,0 +1,100 @@
1
+ from typing import Optional
2
+ from enum import Enum
3
+ import typer
4
+ from ara_cli.classifier import Classifier
5
+ from ara_cli.template_manager import SpecificationBreakdownAspects
6
+ from ara_cli.completers import DynamicCompleters
7
+
8
+
9
+ # Get classifiers and aspects
10
+ classifiers = Classifier.ordered_classifiers()
11
+ aspects = SpecificationBreakdownAspects.VALID_ASPECTS
12
+
13
+
14
+ # Create enums for better type safety
15
+ ClassifierEnum = Enum('ClassifierEnum', {c: c for c in classifiers})
16
+ AspectEnum = Enum('AspectEnum', {a: a for a in aspects})
17
+ TemplateTypeEnum = Enum('TemplateTypeEnum', {
18
+ 'rules': 'rules',
19
+ 'intention': 'intention',
20
+ 'commands': 'commands',
21
+ 'blueprint': 'blueprint'
22
+ })
23
+
24
+
25
+ # Create typed arguments and options with autocompletion
26
+ def ClassifierArgument(help_text: str, default=...):
27
+ """Create a classifier argument with autocompletion."""
28
+ return typer.Argument(
29
+ default,
30
+ help=help_text,
31
+ autocompletion=DynamicCompleters.create_classifier_completer()
32
+ )
33
+
34
+
35
+ def ClassifierOption(help_text: str, *names):
36
+ """Create a classifier option with autocompletion."""
37
+ return typer.Option(
38
+ None,
39
+ *names,
40
+ help=help_text,
41
+ autocompletion=DynamicCompleters.create_classifier_completer()
42
+ )
43
+
44
+
45
+ def ArtefactNameArgument(help_text: str, default=...):
46
+ """Create an artefact name argument with autocompletion."""
47
+ return typer.Argument(
48
+ default,
49
+ help=help_text,
50
+ autocompletion=DynamicCompleters.create_artefact_name_completer()
51
+ )
52
+
53
+
54
+
55
+ def ParentNameArgument(help_text: str):
56
+ """Create a parent name argument with autocompletion."""
57
+ return typer.Argument(
58
+ help=help_text,
59
+ autocompletion=DynamicCompleters.create_parent_name_completer()
60
+ )
61
+
62
+
63
+ def AspectArgument(help_text: str):
64
+ """Create an aspect argument with autocompletion."""
65
+ return typer.Argument(
66
+ help=help_text,
67
+ autocompletion=DynamicCompleters.create_aspect_completer()
68
+ )
69
+
70
+
71
+ def StatusArgument(help_text: str):
72
+ """Create a status argument with autocompletion."""
73
+ return typer.Argument(
74
+ help=help_text,
75
+ autocompletion=DynamicCompleters.create_status_completer()
76
+ )
77
+
78
+
79
+ def TemplateTypeArgument(help_text: str):
80
+ """Create a template type argument with autocompletion."""
81
+ return typer.Argument(
82
+ help=help_text,
83
+ autocompletion=DynamicCompleters.create_template_type_completer()
84
+ )
85
+
86
+
87
+ def ChatNameArgument(help_text: str, default=None):
88
+ """Create a chat name argument with autocompletion."""
89
+ return typer.Argument(
90
+ default,
91
+ help=help_text,
92
+ autocompletion=DynamicCompleters.create_chat_file_completer()
93
+ )
94
+
95
+
96
+ # Mock args class to maintain compatibility with existing action functions
97
+ class MockArgs:
98
+ def __init__(self, **kwargs):
99
+ for key, value in kwargs.items():
100
+ setattr(self, key, value)
@@ -0,0 +1,75 @@
1
+ import typer
2
+ from typing import Optional
3
+ from .common import (
4
+ ClassifierEnum, AspectEnum, MockArgs,
5
+ ClassifierArgument, ArtefactNameArgument, ParentNameArgument, AspectArgument
6
+ )
7
+ from ara_cli.ara_command_action import create_action
8
+
9
+
10
+ def create_contributes_to(
11
+ ctx: typer.Context,
12
+ parent_classifier: ClassifierEnum = ClassifierArgument("Classifier of the parent"),
13
+ parent_name: str = ParentNameArgument("Name of a parent artefact"),
14
+ rule: Optional[str] = typer.Option(None, "-r", "--rule", help="Rule for contribution")
15
+ ):
16
+ """Create an artefact that contributes to a parent artefact."""
17
+ # Get classifier and parameter from parent context
18
+ parent_params = ctx.parent.params
19
+ classifier = parent_params['classifier']
20
+ parameter = parent_params['parameter']
21
+
22
+ args = MockArgs(
23
+ classifier=classifier,
24
+ parameter=parameter,
25
+ option="contributes-to",
26
+ parent_classifier=parent_classifier.value,
27
+ parent_name=parent_name,
28
+ rule=rule
29
+ )
30
+ create_action(args)
31
+
32
+
33
+ def create_aspect(
34
+ ctx: typer.Context,
35
+ aspect: AspectEnum = AspectArgument("Adds additional specification breakdown aspects")
36
+ ):
37
+ """Create an artefact with additional specification breakdown aspects."""
38
+ # Get classifier and parameter from parent context
39
+ parent_params = ctx.parent.params
40
+ classifier = parent_params['classifier']
41
+ parameter = parent_params['parameter']
42
+
43
+ args = MockArgs(
44
+ classifier=classifier,
45
+ parameter=parameter,
46
+ option="aspect",
47
+ aspect=aspect.value
48
+ )
49
+ create_action(args)
50
+
51
+
52
+ def create_main(
53
+ ctx: typer.Context,
54
+ classifier: ClassifierEnum = ClassifierArgument("Classifier that also serves as file extension"),
55
+ parameter: str = ArtefactNameArgument("Artefact name that serves as filename")
56
+ ):
57
+ """Create a classified artefact with data directory."""
58
+ if ctx.invoked_subcommand is None:
59
+ args = MockArgs(
60
+ classifier=classifier.value,
61
+ parameter=parameter,
62
+ option=None
63
+ )
64
+ create_action(args)
65
+
66
+
67
+ def register(parent: typer.Typer):
68
+ create_app = typer.Typer(
69
+ help="Create a classified artefact with data directory",
70
+ add_completion=False # Disable completion on subcommand
71
+ )
72
+ create_app.command("contributes-to")(create_contributes_to)
73
+ create_app.command("aspect")(create_aspect)
74
+ create_app.callback(invoke_without_command=True)(create_main)
75
+ parent.add_typer(create_app, name="create")
@@ -0,0 +1,22 @@
1
+ import typer
2
+ from .common import ClassifierEnum, MockArgs, ClassifierArgument, ArtefactNameArgument
3
+ from ara_cli.ara_command_action import delete_action
4
+
5
+
6
+ def delete_main(
7
+ classifier: ClassifierEnum = ClassifierArgument("Classifier of the artefact to be deleted"),
8
+ parameter: str = ArtefactNameArgument("Filename of artefact"),
9
+ force: bool = typer.Option(False, "-f", "--force", help="ignore nonexistent files and arguments, never prompt")
10
+ ):
11
+ """Delete an artefact file including its data directory."""
12
+ args = MockArgs(
13
+ classifier=classifier.value,
14
+ parameter=parameter,
15
+ force=force
16
+ )
17
+ delete_action(args)
18
+
19
+
20
+ def register(parent: typer.Typer):
21
+ help_text = "Delete an artefact file including its data directory"
22
+ parent.command(name="delete", help=help_text)(delete_main)
@@ -0,0 +1,22 @@
1
+ import typer
2
+ from .common import MockArgs
3
+ from ara_cli.ara_command_action import extract_action
4
+
5
+
6
+ def extract_main(
7
+ filename: str = typer.Argument(help="Input file to extract from"),
8
+ force: bool = typer.Option(False, "-f", "--force", help="Answer queries with yes when extracting"),
9
+ write: bool = typer.Option(False, "-w", "--write", help="Overwrite existing files without using LLM for merging")
10
+ ):
11
+ """Extract blocks of marked content from a given file."""
12
+ args = MockArgs(
13
+ filename=filename,
14
+ force=force,
15
+ write=write
16
+ )
17
+ extract_action(args)
18
+
19
+
20
+ def register(parent: typer.Typer):
21
+ help_text = "Extract blocks of marked content from a given file"
22
+ parent.command(name="extract", help=help_text)(extract_main)
@@ -0,0 +1,14 @@
1
+ import typer
2
+ from .common import MockArgs
3
+ from ara_cli.ara_command_action import fetch_templates_action
4
+
5
+
6
+ def fetch_templates_main():
7
+ """Fetches templates and stores them in .araconfig."""
8
+ args = MockArgs()
9
+ fetch_templates_action(args)
10
+
11
+
12
+ def register(parent: typer.Typer):
13
+ help_text = "Fetches templates and stores them in .araconfig"
14
+ parent.command(name="fetch-templates", help=help_text)(fetch_templates_main)
@@ -0,0 +1,65 @@
1
+ import typer
2
+ from ara_cli.error_handler import AraError
3
+ from typing import Optional, List, Tuple
4
+ from .common import MockArgs
5
+ from ara_cli.ara_command_action import list_action
6
+
7
+
8
+ def _validate_extension_options(include_extension: Optional[List[str]], exclude_extension: Optional[List[str]]) -> None:
9
+ """Validate that include and exclude extension options are mutually exclusive."""
10
+ if include_extension and exclude_extension:
11
+ raise AraError("--include-extension/-i and --exclude-extension/-e are mutually exclusive")
12
+
13
+
14
+ def _validate_exclusive_options(branch: Optional[Tuple[str, str]],
15
+ children: Optional[Tuple[str, str]],
16
+ data: Optional[Tuple[str, str]]) -> None:
17
+ """Validate that branch, children, and data options are mutually exclusive."""
18
+ exclusive_options = [branch, children, data]
19
+ non_none_options = [opt for opt in exclusive_options if opt is not None]
20
+ if len(non_none_options) > 1:
21
+ raise AraError("--branch, --children, and --data are mutually exclusive")
22
+
23
+
24
+ def list_main(
25
+ ctx: typer.Context,
26
+ include_content: Optional[List[str]] = typer.Option(None, "-I", "--include-content", help="filter for files which include given content"),
27
+ exclude_content: Optional[List[str]] = typer.Option(None, "-E", "--exclude-content", help="filter for files which do not include given content"),
28
+ include_tags: Optional[List[str]] = typer.Option(None, "--include-tags", help="filter for files which include given tags"),
29
+ exclude_tags: Optional[List[str]] = typer.Option(None, "--exclude-tags", help="filter for files which do not include given tags"),
30
+ include_extension: Optional[List[str]] = typer.Option(None, "-i", "--include-extension", "--include-classifier", help="list of extensions to include in listing"),
31
+ exclude_extension: Optional[List[str]] = typer.Option(None, "-e", "--exclude-extension", "--exclude-classifier", help="list of extensions to exclude from listing"),
32
+ branch: Optional[Tuple[str, str]] = typer.Option(None, "-b", "--branch", help="List artefacts in the parent chain (classifier artefact_name)"),
33
+ children: Optional[Tuple[str, str]] = typer.Option(None, "-c", "--children", help="List child artefacts (classifier artefact_name)"),
34
+ data: Optional[Tuple[str, str]] = typer.Option(None, "-d", "--data", help="List file in the data directory (classifier artefact_name)")
35
+ ):
36
+ """List files with optional tags.
37
+
38
+ Examples:
39
+ ara list --data feature my_feature --include-extension .md
40
+ ara list --include-extension .feature
41
+ ara list --children userstory my_story
42
+ ara list --branch userstory my_story --include-extension .businessgoal
43
+ ara list --include-content "example content" --include-extension .task
44
+ """
45
+ _validate_extension_options(include_extension, exclude_extension)
46
+ _validate_exclusive_options(branch, children, data)
47
+
48
+ args = MockArgs(
49
+ include_content=include_content,
50
+ exclude_content=exclude_content,
51
+ include_tags=include_tags,
52
+ exclude_tags=exclude_tags,
53
+ include_extension=include_extension,
54
+ exclude_extension=exclude_extension,
55
+ branch_args=tuple(branch) if branch else (None, None),
56
+ children_args=tuple(children) if children else (None, None),
57
+ data_args=tuple(data) if data else (None, None)
58
+ )
59
+
60
+ list_action(args)
61
+
62
+
63
+ def register(parent: typer.Typer):
64
+ help_text = "List files with optional tags"
65
+ parent.command(name="list", help=help_text)(list_main)
@@ -0,0 +1,25 @@
1
+ import typer
2
+ from typing import Optional
3
+ from .common import ClassifierEnum, MockArgs, ClassifierOption
4
+ from ara_cli.ara_command_action import list_tags_action
5
+
6
+
7
+ def list_tags_main(
8
+ json_output: bool = typer.Option(False, "-j", "--json/--no-json", help="Output tags as JSON"),
9
+ include_classifier: Optional[ClassifierEnum] = ClassifierOption("Show tags for an artefact type", "--include-classifier"),
10
+ exclude_classifier: Optional[ClassifierEnum] = ClassifierOption("Show tags for an artefact type", "--exclude-classifier"),
11
+ filtered_extra_column: bool = typer.Option(False, "--filtered-extra-column", help="Filter tags for extra column")
12
+ ):
13
+ """Show tags."""
14
+ args = MockArgs(
15
+ json=json_output,
16
+ include_classifier=include_classifier.value if include_classifier else None,
17
+ exclude_classifier=exclude_classifier.value if exclude_classifier else None,
18
+ filtered_extra_column=filtered_extra_column
19
+ )
20
+ list_tags_action(args)
21
+
22
+
23
+ def register(parent: typer.Typer):
24
+ help_text = "Show tags"
25
+ parent.command(name="list-tags", help=help_text)(list_tags_main)
@@ -0,0 +1,48 @@
1
+ import typer
2
+ from .common import TemplateTypeEnum, MockArgs, TemplateTypeArgument, ChatNameArgument
3
+ from ara_cli.ara_command_action import load_action
4
+
5
+
6
+ def create_template_name_completer():
7
+ """Create a template name completer that can access the template_type context."""
8
+ def completer(incomplete: str) -> list[str]:
9
+ # This is a simplified version - in practice, you'd need to access
10
+ # the template_type from the current command context
11
+ from ara_cli.template_loader import TemplateLoader
12
+ import os
13
+
14
+ # For all template types since we can't easily get context in typer
15
+ all_templates = []
16
+ for template_type in ['rules', 'intention', 'commands', 'blueprint']:
17
+ try:
18
+ loader = TemplateLoader()
19
+ templates = loader.get_available_templates(template_type, os.getcwd())
20
+ all_templates.extend(templates)
21
+ except Exception:
22
+ continue
23
+
24
+ return [t for t in all_templates if t.startswith(incomplete)]
25
+ return completer
26
+
27
+
28
+ def load_main(
29
+ chat_name: str = ChatNameArgument("Name of the chat file to load template into (without extension)"),
30
+ template_type: TemplateTypeEnum = TemplateTypeArgument("Type of template to load"),
31
+ template_name: str = typer.Argument(
32
+ "",
33
+ help="Name of the template to load. Supports wildcards and 'global/' prefix",
34
+ autocompletion=create_template_name_completer()
35
+ )
36
+ ):
37
+ """Load a template into a chat file."""
38
+ args = MockArgs(
39
+ chat_name=chat_name,
40
+ template_type=template_type.value,
41
+ template_name=template_name
42
+ )
43
+ load_action(args)
44
+
45
+
46
+ def register(parent: typer.Typer):
47
+ help_text = "Load a template into a chat file"
48
+ parent.command(name="load", help=help_text)(load_main)