ara-cli 0.1.13.3__py3-none-any.whl → 0.1.14.0__py3-none-any.whl

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 (61) hide show
  1. ara_cli/__init__.py +1 -1
  2. ara_cli/ara_command_action.py +162 -112
  3. ara_cli/ara_config.py +1 -1
  4. ara_cli/ara_subcommands/convert.py +66 -2
  5. ara_cli/ara_subcommands/prompt.py +266 -106
  6. ara_cli/artefact_autofix.py +2 -2
  7. ara_cli/artefact_converter.py +152 -53
  8. ara_cli/artefact_creator.py +41 -17
  9. ara_cli/artefact_lister.py +3 -3
  10. ara_cli/artefact_models/artefact_model.py +1 -1
  11. ara_cli/artefact_models/artefact_templates.py +0 -9
  12. ara_cli/artefact_models/feature_artefact_model.py +8 -8
  13. ara_cli/artefact_reader.py +62 -43
  14. ara_cli/artefact_scan.py +39 -17
  15. ara_cli/chat.py +23 -15
  16. ara_cli/children_contribution_updater.py +737 -0
  17. ara_cli/classifier.py +34 -0
  18. ara_cli/commands/load_command.py +4 -3
  19. ara_cli/commands/load_image_command.py +1 -1
  20. ara_cli/commands/read_command.py +23 -27
  21. ara_cli/completers.py +24 -0
  22. ara_cli/error_handler.py +26 -11
  23. ara_cli/file_loaders/document_reader.py +0 -178
  24. ara_cli/file_loaders/factories/__init__.py +0 -0
  25. ara_cli/file_loaders/factories/document_reader_factory.py +32 -0
  26. ara_cli/file_loaders/factories/file_loader_factory.py +27 -0
  27. ara_cli/file_loaders/file_loader.py +1 -30
  28. ara_cli/file_loaders/loaders/__init__.py +0 -0
  29. ara_cli/file_loaders/{document_file_loader.py → loaders/document_file_loader.py} +1 -1
  30. ara_cli/file_loaders/loaders/text_file_loader.py +47 -0
  31. ara_cli/file_loaders/readers/__init__.py +0 -0
  32. ara_cli/file_loaders/readers/docx_reader.py +49 -0
  33. ara_cli/file_loaders/readers/excel_reader.py +27 -0
  34. ara_cli/file_loaders/{markdown_reader.py → readers/markdown_reader.py} +1 -1
  35. ara_cli/file_loaders/readers/odt_reader.py +59 -0
  36. ara_cli/file_loaders/readers/pdf_reader.py +54 -0
  37. ara_cli/file_loaders/readers/pptx_reader.py +104 -0
  38. ara_cli/file_loaders/tools/__init__.py +0 -0
  39. ara_cli/output_suppressor.py +53 -0
  40. ara_cli/prompt_handler.py +123 -17
  41. ara_cli/tag_extractor.py +8 -7
  42. ara_cli/version.py +1 -1
  43. {ara_cli-0.1.13.3.dist-info → ara_cli-0.1.14.0.dist-info}/METADATA +18 -12
  44. {ara_cli-0.1.13.3.dist-info → ara_cli-0.1.14.0.dist-info}/RECORD +58 -45
  45. {ara_cli-0.1.13.3.dist-info → ara_cli-0.1.14.0.dist-info}/WHEEL +1 -1
  46. tests/test_artefact_converter.py +1 -46
  47. tests/test_artefact_lister.py +11 -8
  48. tests/test_chat.py +4 -4
  49. tests/test_chat_givens_images.py +1 -1
  50. tests/test_children_contribution_updater.py +98 -0
  51. tests/test_document_loader_office.py +267 -0
  52. tests/test_prompt_handler.py +416 -214
  53. tests/test_setup_default_chat_prompt_mode.py +198 -0
  54. tests/test_tag_extractor.py +95 -49
  55. ara_cli/file_loaders/document_readers.py +0 -233
  56. ara_cli/file_loaders/file_loaders.py +0 -123
  57. ara_cli/file_loaders/text_file_loader.py +0 -187
  58. /ara_cli/file_loaders/{binary_file_loader.py → loaders/binary_file_loader.py} +0 -0
  59. /ara_cli/file_loaders/{image_processor.py → tools/image_processor.py} +0 -0
  60. {ara_cli-0.1.13.3.dist-info → ara_cli-0.1.14.0.dist-info}/entry_points.txt +0 -0
  61. {ara_cli-0.1.13.3.dist-info → ara_cli-0.1.14.0.dist-info}/top_level.txt +0 -0
@@ -1,50 +1,51 @@
1
- ara_cli/__init__.py,sha256=jqaaZEIYz0LRAOaF0Z4ZdkVCN9Ak17ie-UM1fZKv5co,1576
1
+ ara_cli/__init__.py,sha256=LYYN2pTRHxxj-oLD0k31Bt_H3czlYYfBLTSEZLtF0ZQ,1602
2
2
  ara_cli/__main__.py,sha256=U_A7kk-3cngFfmDqPoC3IoDwPiY1TlfjbYdJ6Y9lsew,12733
3
- ara_cli/ara_command_action.py,sha256=Pi6w0LEAGUWxS0AuI4VYPTsVRnByhsHBTYQZqP7Q6JU,25634
4
- ara_cli/ara_config.py,sha256=NcKGV4EsowV7anqWIvCNXolpux3rZ6vBOkDEiIFyiOM,11580
5
- ara_cli/artefact_autofix.py,sha256=fD4LEsFfr2BAHoa7H7q-S_zTSIHdAQSc1OWPZFE9hGo,26552
6
- ara_cli/artefact_converter.py,sha256=DMXOfALnMx6Zwf2a-vle_lgjdAMI3KrMr4u06hFvtNY,10249
7
- ara_cli/artefact_creator.py,sha256=fRrDaGZvOqJqDb_DLXqMTed2XfIvQMIHjLgOuHOi3Qg,5973
3
+ ara_cli/ara_command_action.py,sha256=YY6acWkHqKHXKIIDXDqvWZjTtlYG1GsAa3jYK33UihA,25818
4
+ ara_cli/ara_config.py,sha256=jAQrZPL0vcjd5j5o5NIKwQSPgEfi5OIB5scy2Lk8ns4,11583
5
+ ara_cli/artefact_autofix.py,sha256=MihKihJMJ_q4WrB8sR84cVFdwFDWA4ePNADUsZq8D9Q,26556
6
+ ara_cli/artefact_converter.py,sha256=ufHwsggWvHIacfmGIgKeRXrynqgXtjYzUtYw94bJPZ0,13758
7
+ ara_cli/artefact_creator.py,sha256=Whs_dwxIBcdlEkM9MguIgbwJSm7L0qLswJMUbFgc7r4,6289
8
8
  ara_cli/artefact_deleter.py,sha256=T1vS2s3k_BW86Sd8FExx8nC3BIL05xE9KZLkeZsZrKM,1891
9
9
  ara_cli/artefact_fuzzy_search.py,sha256=XMzbMBOJ2YrgFi566jYNB3XeRAmJh7-zqV2QJYbhtlc,3006
10
10
  ara_cli/artefact_link_updater.py,sha256=nKdxTpDKqWTOAMD8viKmUaklSFGWzJZ8S8E8xW_ADuM,3775
11
- ara_cli/artefact_lister.py,sha256=M-ggazAgZ-OLeW9NB48r_sd6zPx0p4hEpeS63qHwI1A,4176
12
- ara_cli/artefact_reader.py,sha256=-6E1VhIlh2oJE1Rn8ARcHRc_E9N4uk8cEViKMoywm6E,7753
11
+ ara_cli/artefact_lister.py,sha256=rCpPuYzYCNmovslN8Dbrys1jIyvoNgdnjBuv9KBx3u0,4230
12
+ ara_cli/artefact_reader.py,sha256=kDXqBtnmmdxNgWjrAFOmKMfbr8Jqp3FAuBH8XrZOmyg,7899
13
13
  ara_cli/artefact_renamer.py,sha256=8S4QWD19_FGKsKlWojnu_RUOxx0u9rmLugydM4s4VDc,4219
14
- ara_cli/artefact_scan.py,sha256=qY2Gp4zVcqMXhtuP7rICW0UBG4pcj3W2ABofnL9SIG8,4806
15
- ara_cli/chat.py,sha256=rEZknOgjZEP3R3YNnfMT1KoOZ-5HececbPJr4PUOcGk,48672
16
- ara_cli/classifier.py,sha256=zWskj7rBYdqYBGjksBm46iTgVU5IIf2PZsJr4qeiwVU,1878
14
+ ara_cli/artefact_scan.py,sha256=PsOnpSO4Xw1zwrmtYuYh3uBeLgWf4rja-jtLVQ0wfWU,4974
15
+ ara_cli/chat.py,sha256=8VXxdHaxZYhr89RYEU63kYVgSY3Awib8zlEGe7XxJxQ,48912
16
+ ara_cli/children_contribution_updater.py,sha256=4guLtOhC3r66DIpxhn9nLvvhqqzqExu7vg_K9_zIEgU,27248
17
+ ara_cli/classifier.py,sha256=aPRGMrtsHQz05cJyjQdaI4PWsSZ3DlA1ySNTlY_pL_Y,3474
17
18
  ara_cli/codefusionretriever.py,sha256=fCHgXdIBRzkVAnapX-KI2NQ44XbrrF4tEQmn5J6clUI,1980
18
19
  ara_cli/codehierachieretriever.py,sha256=Xd3EgEWWhkSf1TmTWtf8X5_YvyE_4B66nRrqarwSiTU,1182
19
20
  ara_cli/commandline_completer.py,sha256=b00Dqb5n7SecpxYIDLxAfYhp8X6e3c8a5qYz6ko0i3E,1192
20
- ara_cli/completers.py,sha256=ZVj-x942IN4xOHfUv8Iyob9ZcXQ403l5oMAOiJG1Xlk,6394
21
+ ara_cli/completers.py,sha256=vcPb0ZRJH8azqncOd87xIbfesgDM7FHDfoPQV8M5W5s,7003
21
22
  ara_cli/constants.py,sha256=ubQYegN70gjnkix5JIyODlC1O9yHMbp_jg4ybVnsJ2U,74
22
23
  ara_cli/directory_navigator.py,sha256=mr34qhuz8MT2Qj_sTddffCB2nzYpWCg9AWLPdaFjeOM,4518
23
- ara_cli/error_handler.py,sha256=nNaJSq82f3xiz_QFRKPg5kX_-oI-UoFdRJ2OTj1AR18,4019
24
+ ara_cli/error_handler.py,sha256=JNglPlEtpyFUoFSpYhnFlVPvAv660FYXy7rD4aiM4Co,4337
24
25
  ara_cli/file_classifier.py,sha256=nUcNrhflUydCyCRbXHjEEXYwwwfUm65lYnNEvc86fpM,4026
25
26
  ara_cli/file_lister.py,sha256=0C-j8IzajXo5qlvnuy5WFfe43ALwJ-0JFh2K6Xx2ccw,2332
26
27
  ara_cli/filename_validator.py,sha256=Aw9PL8d5-Ymhp3EY6lDrUBk3cudaNqo1Uw5RzPpI1jA,118
27
28
  ara_cli/global_file_lister.py,sha256=y2UCDoNXODnTAjmlzlV5cf7QxiZ55KEBbbOGQ_JpiHw,2303
28
29
  ara_cli/list_filter.py,sha256=qKGwwQsrWe7L5FbdxEbBYD1bbbi8c-RMypjXqXvLbgs,5291
29
30
  ara_cli/llm_utils.py,sha256=kTQnBv5V8kagHH-0it3juBtjha6coO2VTG1SAZTtT28,1979
30
- ara_cli/output_suppressor.py,sha256=nwiHaQLwabOjMoJOeUESBnZszGMxrQZfJ3N2OvahX7Y,389
31
+ ara_cli/output_suppressor.py,sha256=MWdr9_bel91EyZ2JP2cQQAnoPekwwzoYSRmg_GLQofc,1851
31
32
  ara_cli/prompt_chat.py,sha256=FeULZtiOJUGKv-jawA29EclsNzmWF8UMnRfT0iRD6KI,1444
32
33
  ara_cli/prompt_extractor.py,sha256=zpEvOcWjEVOlgvfkt7HTaXAPLwyEPuRcr0YDHdCA3vA,12594
33
- ara_cli/prompt_handler.py,sha256=3iSdEJe6RL496Gc1KncOREK_Nb9HYr7Ti9KTTwA_sTU,30393
34
+ ara_cli/prompt_handler.py,sha256=_TGDt2-WrQ-WR1gloEkqbE0sKCAKvaFbIubgjuc30E4,33757
34
35
  ara_cli/prompt_rag.py,sha256=ydlhe4CUqz0jdzlY7jBbpKaf_5fjMrAZKnriKea3ZAg,7485
35
36
  ara_cli/run_file_lister.py,sha256=XbrrDTJXp1LFGx9Lv91SNsEHZPP-PyEMBF_P4btjbDA,2360
36
- ara_cli/tag_extractor.py,sha256=vjuPGGlT3mQpez6eY9LLgIBFQqPsTEgfAWODbXlgODc,4057
37
+ ara_cli/tag_extractor.py,sha256=GGklmzYwjyaK_ktSxoVX_u5-ICIC3GPoI1LrLlWnSYE,4037
37
38
  ara_cli/template_loader.py,sha256=WzaB5XaKLJiegxEYZ960rljuhTJ-0zW4JHldiCdJ2Xc,10777
38
39
  ara_cli/template_manager.py,sha256=C04HJI5cVX49Lysw6D2qXqhfRoK6CQ4jx6PJx414S8s,7477
39
40
  ara_cli/update_config_prompt.py,sha256=moqj2Kha7S7fEGzTReU0v2y8UjXC8QfnoiieOQr35C4,5157
40
- ara_cli/version.py,sha256=qyYltxt3ucu8ZkMq5YDoTaO9sueRSv2g_aC-X_QC-O4,146
41
+ ara_cli/version.py,sha256=n-E9G9HSaPRTvuNA-SwdM3J6eba1V6YjmaiKblDE7Y8,146
41
42
  ara_cli/ara_subcommands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
43
  ara_cli/ara_subcommands/autofix.py,sha256=h7-6hV97Q6PisUJ_U1Qs4sHYwkHsDpeYH63y_LQsfSc,1095
43
44
  ara_cli/ara_subcommands/chat.py,sha256=9zorWKbM0ulu9xFhW2tzV5vl8hCLOCjcp2E9hYgZJ90,1239
44
45
  ara_cli/ara_subcommands/classifier_directory.py,sha256=7GH3w4DtvFCM1Sr6Qqk_kjp0EC8jNJDieJJMshYJ_6k,620
45
46
  ara_cli/ara_subcommands/common.py,sha256=CnXZJKdaJguxWHSoY-8v6T03qybm1AFWlLwoeKhl1S0,2845
46
47
  ara_cli/ara_subcommands/config.py,sha256=LIzD-rvct-KjTplgVYUtMq4jc2c9DM-i3diqSW_PDTI,7422
47
- ara_cli/ara_subcommands/convert.py,sha256=YzrKJZ3Z_edoCg1mMXaEYboHlnsHBLutQ4ZVB4mZQ7E,1477
48
+ ara_cli/ara_subcommands/convert.py,sha256=K3bxmNxHI8SiBRqLibbnA_D2pVrBXn_vZUye8xL24_k,3841
48
49
  ara_cli/ara_subcommands/create.py,sha256=2tIpzKgzytTIdVV26p6cvrcBo8WLm_3qK7GJyn47Jaw,2527
49
50
  ara_cli/ara_subcommands/delete.py,sha256=DxWRQ5Z8h5ZpMhyjLHNuLxONgxIQ97hVkQ8VkX15FDk,827
50
51
  ara_cli/ara_subcommands/extract.py,sha256=11atXek579W2RP6PYHlGuyVjWBTuyh1viondCjuce_k,765
@@ -55,7 +56,7 @@ ara_cli/ara_subcommands/fetch_templates.py,sha256=V3A3qsoy_DKSkYhTbmswJfCcTOaKzt
55
56
  ara_cli/ara_subcommands/list.py,sha256=46qLOqLuLU3gFlSBiGKmMDKIqCVP_tGea8FkYIhOLgg,4878
56
57
  ara_cli/ara_subcommands/list_tags.py,sha256=drEzJgJa4OqqYfIuvT7XkjG4o7VB-ikHE0ArIdljoTI,1113
57
58
  ara_cli/ara_subcommands/load.py,sha256=czaflU5Xv-TBlpgalvm6yn5oBBAnNfxSeoIFuLPfi-U,1825
58
- ara_cli/ara_subcommands/prompt.py,sha256=A8L0lJNBm5zkwJJrzz1kpdycwpm1y8hzd2iVleylpck,4630
59
+ ara_cli/ara_subcommands/prompt.py,sha256=q5DYlZTdgBl6N1PBF-EtyFwwFFxNWOWMNs-Xvv_Vu8w,9235
59
60
  ara_cli/ara_subcommands/read.py,sha256=zTPNMvEPf1WvhtUiauXu5HFiXHRIBJVCkHu44L_scSk,2396
60
61
  ara_cli/ara_subcommands/read_status.py,sha256=ZqdxuYXC-idJ2JtMIcZzT4XYI55PnqA6sYv2FcMuchw,695
61
62
  ara_cli/ara_subcommands/read_user.py,sha256=NuhaC7dBbi8PUHnGGpqbBVSbQ__nT_L52c7tdKkxjlA,681
@@ -69,13 +70,13 @@ ara_cli/artefact_models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
69
70
  ara_cli/artefact_models/artefact_data_retrieval.py,sha256=CooXOJBYWSyiViN2xkC8baS8OUaslry3YGVVUeDxRAU,527
70
71
  ara_cli/artefact_models/artefact_load.py,sha256=IXzWxP-Q_j_oDGMno0m-OuXCQ7Vd5c_NctshGr4ROBw,621
71
72
  ara_cli/artefact_models/artefact_mapping.py,sha256=8aD0spBjkJ8toMAmFawc6UTUxB6-tEEViZXv2I-r88Q,1874
72
- ara_cli/artefact_models/artefact_model.py,sha256=Ek7CPzYyj5GajoSdb0G8_I9HbBXFAzRq7DB5CEyNZH0,18817
73
- ara_cli/artefact_models/artefact_templates.py,sha256=u2VxVXIzrC2PKWiHlhwP4pbCQGjacVqcZ8mZTdV2bE0,10042
73
+ ara_cli/artefact_models/artefact_model.py,sha256=yOqktMaqOvPPiSG8i5dBa2v6SI359vGki5LEjpDwkPY,18804
74
+ ara_cli/artefact_models/artefact_templates.py,sha256=XDhRvxJDL7dpEBfCGm_RPtM6LzaeOU7Q0P5LLOSuup4,9736
74
75
  ara_cli/artefact_models/businessgoal_artefact_model.py,sha256=GYT5S2xEnQHwv-k-lEeX5NMSqA-UEfV3PhNjgPDUJpw,4698
75
76
  ara_cli/artefact_models/capability_artefact_model.py,sha256=SZqHx4O2mj4urn77Stnj4_Jxtlq3-LgBBU9SMkByppI,3079
76
77
  ara_cli/artefact_models/epic_artefact_model.py,sha256=_HlFmOJqkDKj3SRpLI4H5rU-va-nFamxhMH4BCODR5c,6053
77
78
  ara_cli/artefact_models/example_artefact_model.py,sha256=UXrKbaPotg1jwcrVSdCeo-XH4tTD_-U1e3giaBn5_xg,1384
78
- ara_cli/artefact_models/feature_artefact_model.py,sha256=PvvZDgwsHV1AMS2FXBxwWxkHFlJ0tyFPRX2NGnbnt1Q,21353
79
+ ara_cli/artefact_models/feature_artefact_model.py,sha256=UG3qkBFiEkZplg6XpwQ0mzrJdjMzwsGkEC5r3P2kFjk,21304
79
80
  ara_cli/artefact_models/issue_artefact_model.py,sha256=v6CpKnkqiUh6Wch2kkEmyyW49c8ysdy1qz8l1Ft9uJA,2552
80
81
  ara_cli/artefact_models/keyfeature_artefact_model.py,sha256=J9oXLsCAo22AW31D5Z104y02ss0S0O4tPCcd09zYCD0,4066
81
82
  ara_cli/artefact_models/serialize_helper.py,sha256=Wks30wy-UrwJURetydKykLgJkdGRgXFHkDT24vHe5tU,595
@@ -100,19 +101,28 @@ ara_cli/commands/fetch_scripts_command.py,sha256=B3JPVg0mIfeiZ7UPJYc27cfYS-WKZuJ
100
101
  ara_cli/commands/fetch_templates_command.py,sha256=Q64Ax_Sm99i569evbZ-_Trdx-R5F6Cj66ukaUrl3xkM,1605
101
102
  ara_cli/commands/fetch_templates_commands.py,sha256=Q64Ax_Sm99i569evbZ-_Trdx-R5F6Cj66ukaUrl3xkM,1605
102
103
  ara_cli/commands/list_agents_command.py,sha256=YYQdANNS7Plek8xcBRKu85Z4DG6CjpujRko43uWhXuM,1352
103
- ara_cli/commands/load_command.py,sha256=H3CfeHIL-criDU5oi4BONTSpyzJ4m8DzJ0ZCIiAZFeI,2204
104
- ara_cli/commands/load_image_command.py,sha256=g9-PXAYdqx5Ed1PdVo-FIb4CyJGEpRFbgQf9Dxg6DmM,886
105
- ara_cli/commands/read_command.py,sha256=xne8jlertuJNcsyzjR0bJeUUHi4NkEfd0h0DRbU9rC4,4347
104
+ ara_cli/commands/load_command.py,sha256=k1Nh-xZW00HyFtlLB05BE7QjMh3-TVd3qenjBtTf2iA,2252
105
+ ara_cli/commands/load_image_command.py,sha256=qe1k9_pDjHakKJZ05thTnD9QnHw5e4gIng-xLZ4db4M,894
106
+ ara_cli/commands/read_command.py,sha256=SVNYS6fh4thFObJGCs4QitRX1oc4X26gGgl15osX2UI,4293
106
107
  ara_cli/file_loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
- ara_cli/file_loaders/binary_file_loader.py,sha256=1HHH1Nk4lEM83CTnf4z9wYz6rMLgpxydFoRcSgkBHmQ,940
108
- ara_cli/file_loaders/document_file_loader.py,sha256=VxGFChYyM9K-e6eOCK3yk5jQuEXgz01Mh_NoA6CA_RM,1017
109
- ara_cli/file_loaders/document_reader.py,sha256=SD9_5-XJ6homKUes6o8GWcG--X63UslfAosPbrJZQvo,7721
110
- ara_cli/file_loaders/document_readers.py,sha256=aG7xrUJwLxWpuFTYlvxzDqoS00Idpvwzt865L0OuQcA,8124
111
- ara_cli/file_loaders/file_loader.py,sha256=bc1BrMG4pEtwsZLm3Ct53YsMPgnbSaEvZEd8isRDYRY,1711
112
- ara_cli/file_loaders/file_loaders.py,sha256=9QqArTRDmcUUar58JEr-qnpiAtH9ySP-MV9bvooQNpI,4290
113
- ara_cli/file_loaders/image_processor.py,sha256=laPThh-i0-obYyS_linQTMcTUwuxMxrSjedGRYb8cIA,3462
114
- ara_cli/file_loaders/markdown_reader.py,sha256=R-hvvc9Sj9pWwENqJ0j6wrW0eN1tUqEKWcK2YUFsvsU,2542
115
- ara_cli/file_loaders/text_file_loader.py,sha256=nD0MmjMlr-suMrK7GNwaMd0qv2lJyt4XBijx8SsFvEI,6848
108
+ ara_cli/file_loaders/document_reader.py,sha256=QF1eC57kk09wmzofs8lbZHDhNKP7EMpn5iw8xYAkE3g,1906
109
+ ara_cli/file_loaders/file_loader.py,sha256=zxBUJazAKkQuIS4xweusw2Y11d_L14csp4mIC9M7BZ8,506
110
+ ara_cli/file_loaders/factories/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
111
+ ara_cli/file_loaders/factories/document_reader_factory.py,sha256=K2yaCJkNR-XtVf8Z_mGej1l9NNjGAzsk0ae7qXhvo00,1118
112
+ ara_cli/file_loaders/factories/file_loader_factory.py,sha256=2V8nX_i2tpIO3TISutncafySGPOmM11h2kQTAi9zjRY,1182
113
+ ara_cli/file_loaders/loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
+ ara_cli/file_loaders/loaders/binary_file_loader.py,sha256=1HHH1Nk4lEM83CTnf4z9wYz6rMLgpxydFoRcSgkBHmQ,940
115
+ ara_cli/file_loaders/loaders/document_file_loader.py,sha256=1pmmjeULAIfDrNT0xoI9-mx3w2q7_Wz0KS1FjxNgVDI,1035
116
+ ara_cli/file_loaders/loaders/text_file_loader.py,sha256=jZuKeuylV1zWnvpicKy-nlRKXziLzP9OXWYDZ04W88Q,1486
117
+ ara_cli/file_loaders/readers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
+ ara_cli/file_loaders/readers/docx_reader.py,sha256=SYIdVJ3VY9HIT2vOa-7-Vtx1y0wFPKGOIeNH2OdKR0s,1633
119
+ ara_cli/file_loaders/readers/excel_reader.py,sha256=hihT57aQyh1uKKBFXA5nJv-S6Q5G9eF_zHcecRLRdNg,1040
120
+ ara_cli/file_loaders/readers/markdown_reader.py,sha256=WYWnqpS8dLvFML-ElcUHCNz7mbzlO7OJAJ7_cbaDGsU,2548
121
+ ara_cli/file_loaders/readers/odt_reader.py,sha256=oEY6Kxyudozv1J5HqaBljHWSGQ8yhmiA9f9xvAeoaYw,2152
122
+ ara_cli/file_loaders/readers/pdf_reader.py,sha256=ros0n0OGzOsL7d4jkXut6-UWiSz0NfPMzaXEuWtJOhw,1820
123
+ ara_cli/file_loaders/readers/pptx_reader.py,sha256=dlgtbIw72LAjmQ32MP3O68m1uxvnqbpR3o2_gMaLoqc,3717
124
+ ara_cli/file_loaders/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
+ ara_cli/file_loaders/tools/image_processor.py,sha256=laPThh-i0-obYyS_linQTMcTUwuxMxrSjedGRYb8cIA,3462
116
126
  ara_cli/templates/agile.artefacts,sha256=nTA8dp98HWKAD-0qhmNpVYIfkVGoJshZqMJGnphiOsE,7932
117
127
  ara_cli/templates/template.businessgoal.prompt_log.md,sha256=xF6bkgj_GqAAqHxJWJiQNt11mEuSGemIqoZ2wOo6dI0,214
118
128
  ara_cli/templates/template.capability.prompt_log.md,sha256=eO8EzrHgb2vYJ-DP1jGzAfDlMo8nY75hZDfhh0s40uQ,208
@@ -206,19 +216,21 @@ tests/test_ara_command_action.py,sha256=Hm2_rXyBj2O-ifZfBhMOjCdnoQUNkuj17qwM-pX6
206
216
  tests/test_ara_config.py,sha256=uY0J9D5T1SfZB8LpMoa5CP5YoET3OAjadlS4Zh0aSJI,17300
207
217
  tests/test_artefact_autofix.py,sha256=4Y-FqmzY4905bgBhaUSZfPIxgvGxZg1JdEUPNcroS3A,38485
208
218
  tests/test_artefact_autofix_integration.py,sha256=0MUmeKYou6SnqK0tqNFspQkcvO9RQwo6WOrcpRP5JfY,18591
209
- tests/test_artefact_converter.py,sha256=oQTSGx0vYEhJ94yGkoq69M7FEhp2D0U-7CxloRwH4Kc,12951
219
+ tests/test_artefact_converter.py,sha256=3CCTMJpkbOXzcHpE27vmOkdFgotWtKoRaQPfRpgDmVg,11237
210
220
  tests/test_artefact_extraction.py,sha256=amgAVxZbNiHNZQFV3xGCBMZOcvp8Yfb7RrppL9VTM0k,21727
211
221
  tests/test_artefact_fuzzy_search.py,sha256=5Sh3_l9QK8-WHn6JpGPU1b6h4QEnl2JoMq1Tdp2cj1U,1261
212
222
  tests/test_artefact_link_updater.py,sha256=biqbEp2jCOz8giv72hu2P2hDfeJfJ9OrVGdAv5d9cK4,2191
213
- tests/test_artefact_lister.py,sha256=35R13UU-YsX1HOsEN8M2-vIiCUA9RSBm6SwestDaFhE,20388
223
+ tests/test_artefact_lister.py,sha256=Ozk2GuRNsYwSYhJUs4LhhnUhnaaOcFdvGJgD8FrWMts,20604
214
224
  tests/test_artefact_reader.py,sha256=660K-d8ed-j8hulsUB_7baPD2-hhbg9TffUR5yVc4Uo,927
215
225
  tests/test_artefact_renamer.py,sha256=lSnKCCfoFGgKhTdDZrEaeBq1xJAak1QoqH5aSeOe9Ro,3494
216
226
  tests/test_artefact_scan.py,sha256=SzMtJeh8_oOBec9yzy3vJRHxs9i1E5gEU2RfF6CJZqE,16888
217
- tests/test_chat.py,sha256=n5SslNJCrQY9x8JpKosYBByJX00zE4G-2JyaUUBi0v4,88733
218
- tests/test_chat_givens_images.py,sha256=Op0xmdTg67SzRNHq9UZgvy2BDFgI8P7oBuJz2c7zJlY,21256
227
+ tests/test_chat.py,sha256=5JTl65MbEU4fKxNgcfgM6WC9MmVbXcqJrWutI6GnP2w,88726
228
+ tests/test_chat_givens_images.py,sha256=aFQr0irv9neF7baxuYMRpQJaZiZMx1gwqYBEwND2Og8,21264
219
229
  tests/test_chat_script_runner.py,sha256=fHwkGbUi8OpZeMqr1iO7LRWAIFyilMNL3YDaNahZzUo,17621
230
+ tests/test_children_contribution_updater.py,sha256=bc_V2Pn8ZmGPM_NIV2TIftKXoLeOafHk8GrBcxmVwtQ,3651
220
231
  tests/test_classifier.py,sha256=grYGPksydNdPsaEBQxYHZTuTdcJWz7VQtikCKA6BNaQ,1920
221
232
  tests/test_directory_navigator.py,sha256=7G0MVrBbtBvbrFUpL0zb_9EkEWi1dulWuHsrQxMJxDY,140
233
+ tests/test_document_loader_office.py,sha256=7KqqqparT4q_YqYbaPfOkatPziuB6FAF_GksLKVd2Io,9893
222
234
  tests/test_file_classifier.py,sha256=4O1C_iDpGGm35b7aI-HIJd5kkWxFUOrI2n4lEpiDNTM,11855
223
235
  tests/test_file_creator.py,sha256=tgBCq6KPv-qMSDhj9AZvQIJABiAqgpFRnEg1fqbVrTI,2013
224
236
  tests/test_file_lister.py,sha256=Q9HwhKKx540EPzTmfzOCnvtAgON0aMmpJE2eOe1J3EA,4324
@@ -227,14 +239,15 @@ tests/test_list_filter.py,sha256=fJA3d_SdaOAUkE7jn68MOVS0THXGghy1fye_64Zvo1U,796
227
239
  tests/test_llm_utils.py,sha256=TnQibpUVW5_Q5B_XZpdRR5nHvm3mobDbewbTOFO05EI,6053
228
240
  tests/test_prompt_chat.py,sha256=DeYvu6aHQ62q_Vpfg_r363STMfijV-fmHcUuVVpTzF8,12110
229
241
  tests/test_prompt_extractor.py,sha256=ZEgJOSDytIPYf3wd40gvS5By1rcAfgne4SvnQ_DP1dM,23679
230
- tests/test_prompt_handler.py,sha256=4__q8Ap2hVGXVF1DvvWqq-K630buC7yjccoWkk_FG18,34255
231
- tests/test_tag_extractor.py,sha256=7eVD10Y1uLkoSrEgqkXzRvPFs8lJ1RiaJzDu7ml_FZE,3118
242
+ tests/test_prompt_handler.py,sha256=fTyEHzcQC6qKdM4alnFE_man2fnG_eFNUgFVXkSKs7M,36453
243
+ tests/test_setup_default_chat_prompt_mode.py,sha256=A5O6FoGIcJcXF9zE9bzIxVWDAnKrZyKcjJE0z82aOcM,7366
244
+ tests/test_tag_extractor.py,sha256=FPdaH8TvbemPfBVgqylpJ8iF7B2VBEqLBbrSnzXxq10,3861
232
245
  tests/test_template_loader.py,sha256=R7s8HJZbKqja-1TRBMBkVKPTgajofUjjRKUJq7a3_Oc,7427
233
246
  tests/test_template_manager.py,sha256=qliEeYgAEakn8JIqIHa8u0Ht6DY4L3T6DcHBXkjzR4I,4167
234
247
  tests/test_update_config_prompt.py,sha256=xsqj1WTn4BsG5Q2t-sNPfu7EoMURFcS-hfb5VSXUnJc,6765
235
248
  tests/test_web_search.py,sha256=BqbIJ8zbiXaYwntceovOVD_1pT3PboraX7lpPatcXJ4,16484
236
- ara_cli-0.1.13.3.dist-info/METADATA,sha256=Xc5zpacBGf2Z5kptyQE2ojAEzXjKiv2vk96HZahmAXI,8185
237
- ara_cli-0.1.13.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
238
- ara_cli-0.1.13.3.dist-info/entry_points.txt,sha256=v4h7MzysTgSIDYfEo3oj4Kz_8lzsRa3hq-KJHEcLVX8,45
239
- ara_cli-0.1.13.3.dist-info/top_level.txt,sha256=WM4cLHT5DYUaWzLtRj-gu3yVNFpGQ6lLRI3FMmC-38I,14
240
- ara_cli-0.1.13.3.dist-info/RECORD,,
249
+ ara_cli-0.1.14.0.dist-info/METADATA,sha256=DPXgbL2vhCUteS6ATO1x_3fYSmd_RgHVkiOOnSTJ9ro,8330
250
+ ara_cli-0.1.14.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
251
+ ara_cli-0.1.14.0.dist-info/entry_points.txt,sha256=v4h7MzysTgSIDYfEo3oj4Kz_8lzsRa3hq-KJHEcLVX8,45
252
+ ara_cli-0.1.14.0.dist-info/top_level.txt,sha256=WM4cLHT5DYUaWzLtRj-gu3yVNFpGQ6lLRI3FMmC-38I,14
253
+ ara_cli-0.1.14.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -12,11 +12,6 @@ from ara_cli.artefact_converter import AraArtefactConverter
12
12
  from ara_cli.error_handler import AraError
13
13
 
14
14
 
15
- # =============================================================================
16
- # Test fixtures
17
- # =============================================================================
18
-
19
-
20
15
  @pytest.fixture
21
16
  def mock_file_system():
22
17
  """Mock file system for testing."""
@@ -38,11 +33,6 @@ def converter(mock_file_system):
38
33
  return converter
39
34
 
40
35
 
41
- # =============================================================================
42
- # Tests for __init__
43
- # =============================================================================
44
-
45
-
46
36
  class TestAraArtefactConverterInit:
47
37
  """Tests for AraArtefactConverter initialization."""
48
38
 
@@ -63,11 +53,6 @@ class TestAraArtefactConverterInit:
63
53
  assert converter.file_system == os
64
54
 
65
55
 
66
- # =============================================================================
67
- # Tests for _validate_classifiers
68
- # =============================================================================
69
-
70
-
71
56
  class TestValidateClassifiers:
72
57
  """Tests for classifier validation."""
73
58
 
@@ -100,11 +85,6 @@ class TestValidateClassifiers:
100
85
  assert mock_is_valid.call_count == 2
101
86
 
102
87
 
103
- # =============================================================================
104
- # Tests for _resolve_target_content
105
- # =============================================================================
106
-
107
-
108
88
  class TestResolveTargetContent:
109
89
  """Tests for target content resolution."""
110
90
 
@@ -117,7 +97,7 @@ class TestResolveTargetContent:
117
97
  "test", "feature", merge=False, override=False
118
98
  )
119
99
 
120
- assert "already exiting" in str(exc_info.value)
100
+ assert "already existing" in str(exc_info.value)
121
101
 
122
102
  def test_returns_content_when_merge_flag_set(self, converter):
123
103
  """Returns existing content when merge flag is set."""
@@ -155,11 +135,6 @@ class TestResolveTargetContent:
155
135
  assert result is None
156
136
 
157
137
 
158
- # =============================================================================
159
- # Tests for _get_target_class
160
- # =============================================================================
161
-
162
-
163
138
  class TestGetTargetClass:
164
139
  """Tests for getting target artefact class."""
165
140
 
@@ -175,11 +150,6 @@ class TestGetTargetClass:
175
150
  converter._get_target_class("definitely_not_a_type")
176
151
 
177
152
 
178
- # =============================================================================
179
- # Tests for _get_prompt
180
- # =============================================================================
181
-
182
-
183
153
  class TestGetPrompt:
184
154
  """Tests for prompt generation."""
185
155
 
@@ -239,11 +209,6 @@ class TestGetPrompt:
239
209
  assert result == "langfuse prompt"
240
210
 
241
211
 
242
- # =============================================================================
243
- # Tests for _run_conversion_agent
244
- # =============================================================================
245
-
246
-
247
212
  class TestRunConversionAgent:
248
213
  """Tests for running the conversion agent."""
249
214
 
@@ -273,11 +238,6 @@ class TestRunConversionAgent:
273
238
  assert "LLM conversion failed" in str(exc_info.value)
274
239
 
275
240
 
276
- # =============================================================================
277
- # Tests for _write_artefact
278
- # =============================================================================
279
-
280
-
281
241
  class TestWriteArtefact:
282
242
  """Tests for writing converted artefacts."""
283
243
 
@@ -328,11 +288,6 @@ class TestWriteArtefact:
328
288
  assert "already exists" in str(exc_info.value)
329
289
 
330
290
 
331
- # =============================================================================
332
- # Tests for convert (integration)
333
- # =============================================================================
334
-
335
-
336
291
  class TestConvert:
337
292
  """Integration tests for the convert method."""
338
293
 
@@ -134,8 +134,9 @@ def test_list_files(
134
134
  expected_filtered,
135
135
  ):
136
136
  # Mock ArtefactReader.read_artefacts
137
- with patch("ara_cli.artefact_lister.ArtefactReader") as mock_reader:
138
- mock_reader.read_artefacts.return_value = mock_artefacts
137
+ with patch("ara_cli.artefact_lister.ArtefactReader") as mock_reader_class:
138
+ mock_reader_instance = mock_reader_class.return_value
139
+ mock_reader_instance.read_artefacts.return_value = mock_artefacts
139
140
 
140
141
  # Mock filter_artefacts method
141
142
  artefact_lister.filter_artefacts = MagicMock(return_value=filtered_artefacts)
@@ -153,7 +154,7 @@ def test_list_files(
153
154
  )
154
155
 
155
156
  # Verify the correct calls were made
156
- mock_reader.read_artefacts.assert_called_once_with(tags=tags)
157
+ mock_reader_instance.read_artefacts.assert_called_once_with(tags=tags)
157
158
  artefact_lister.filter_artefacts.assert_called_once_with(
158
159
  mock_artefacts, list_filter
159
160
  )
@@ -233,7 +234,8 @@ def test_list_children(
233
234
  mock_classifier_instance.classify_files.return_value = classified_artefacts
234
235
 
235
236
  # Configure ArtefactReader mock
236
- mock_artefact_reader.find_children.return_value = child_artefacts
237
+ mock_reader_instance = mock_artefact_reader.return_value
238
+ mock_reader_instance.find_children.return_value = child_artefacts
237
239
 
238
240
  # Mock filter_artefacts method
239
241
  artefact_lister.filter_artefacts = MagicMock(return_value=filtered_artefacts)
@@ -253,7 +255,7 @@ def test_list_children(
253
255
  mock_suggest.assert_not_called()
254
256
 
255
257
  # Verify ArtefactReader.find_children was called
256
- mock_artefact_reader.find_children.assert_called_once_with(
258
+ mock_reader_instance.find_children.assert_called_once_with(
257
259
  artefact_name=artefact_name, classifier=classifier
258
260
  )
259
261
 
@@ -348,7 +350,8 @@ def test_list_branch(
348
350
  for k, v in value_chain_artefacts.items():
349
351
  artefacts_by_classifier[k] = v
350
352
 
351
- mock_artefact_reader.step_through_value_chain.side_effect = mock_step_through
353
+ mock_reader_instance = mock_artefact_reader.return_value
354
+ mock_reader_instance.step_through_value_chain.side_effect = mock_step_through
352
355
 
353
356
  # Mock filter_artefacts method
354
357
  artefact_lister.filter_artefacts = MagicMock(return_value=filtered_artefacts)
@@ -369,8 +372,8 @@ def test_list_branch(
369
372
  mock_suggest.assert_not_called()
370
373
 
371
374
  # Verify ArtefactReader.step_through_value_chain was called with correct parameters
372
- mock_artefact_reader.step_through_value_chain.assert_called_once()
373
- call_args = mock_artefact_reader.step_through_value_chain.call_args[1]
375
+ mock_reader_instance.step_through_value_chain.assert_called_once()
376
+ call_args = mock_reader_instance.step_through_value_chain.call_args[1]
374
377
  assert call_args["artefact_name"] == artefact_name
375
378
  assert call_args["classifier"] == classifier
376
379
  assert classifier in call_args["artefacts_by_classifier"]
tests/test_chat.py CHANGED
@@ -14,7 +14,7 @@ from ara_cli.chat import Chat
14
14
  from ara_cli.error_handler import AraError
15
15
  from ara_cli.template_manager import TemplatePathManager
16
16
  from ara_cli.ara_config import ConfigManager
17
- from ara_cli.file_loaders.text_file_loader import TextFileLoader
17
+ from ara_cli.file_loaders.loaders.text_file_loader import TextFileLoader
18
18
 
19
19
 
20
20
  def get_default_config():
@@ -492,7 +492,7 @@ def test_send_message(
492
492
 
493
493
  mock_chunks = [mock_chunk1, mock_chunk2]
494
494
 
495
- with patch("ara_cli.chat.send_prompt", return_value=mock_chunks), patch.object(
495
+ with patch("ara_cli.prompt_handler.send_prompt", return_value=mock_chunks), patch.object(
496
496
  chat, "get_last_line", return_value=last_line_in_file
497
497
  ), patch.object(chat, "assemble_prompt", return_value="mocked prompt"):
498
498
 
@@ -743,7 +743,7 @@ def test_load_binary_file(temp_chat_file, path_exists):
743
743
 
744
744
  # We patch open within the loader's module
745
745
  with patch(
746
- "ara_cli.file_loaders.binary_file_loader.open",
746
+ "ara_cli.file_loaders.loaders.binary_file_loader.open",
747
747
  mock_open(read_data=file_content),
748
748
  ) as mock_loader_open:
749
749
 
@@ -819,7 +819,7 @@ def test_load_document_file(
819
819
  mock_setup(mock_modules[module_to_mock])
820
820
 
821
821
  with patch(
822
- "ara_cli.file_loaders.document_file_loader.open", mock_open()
822
+ "builtins.open", mock_open()
823
823
  ) as mock_chat_open:
824
824
  # FIX: Call with a positional argument `file_name` as the decorator expects, not a keyword `file_path`.
825
825
  result = chat.load_document_file(
@@ -535,7 +535,7 @@ class TestBinaryContentAppending:
535
535
 
536
536
  # Mock the open calls to capture what gets written
537
537
  with patch(
538
- "ara_cli.file_loaders.binary_file_loader.open",
538
+ "ara_cli.file_loaders.loaders.binary_file_loader.open",
539
539
  mock_open(read_data=binary_content),
540
540
  ) as mock_file:
541
541
  chat.load_binary_file(binary_file, mime_type="image/png")
@@ -0,0 +1,98 @@
1
+ import pytest
2
+ from unittest.mock import MagicMock, patch
3
+ from ara_cli.children_contribution_updater import ChildrenContributionUpdater
4
+
5
+
6
+ class TestChildrenContributionUpdater:
7
+
8
+ @pytest.fixture
9
+ def updater(self):
10
+ return ChildrenContributionUpdater()
11
+
12
+ @patch(
13
+ "ara_cli.children_contribution_updater.ChildrenContributionUpdater._find_children"
14
+ )
15
+ @patch(
16
+ "ara_cli.children_contribution_updater.ChildrenContributionUpdater._count_children"
17
+ )
18
+ @patch("ara_cli.children_contribution_updater.Classifier.can_have_children")
19
+ @patch(
20
+ "ara_cli.children_contribution_updater.ChildrenContributionUpdater._check_target_exists"
21
+ )
22
+ @patch(
23
+ "ara_cli.children_contribution_updater.ChildrenContributionUpdater._get_common_valid_parents"
24
+ )
25
+ def test_get_children_info_basic(
26
+ self,
27
+ mock_common_parents,
28
+ mock_check_exists,
29
+ mock_can_have_children,
30
+ mock_count,
31
+ mock_find,
32
+ updater,
33
+ ):
34
+ mock_find.return_value = {"task": [MagicMock(title="T1")]}
35
+ mock_count.return_value = 1
36
+ mock_can_have_children.return_value = True
37
+ mock_check_exists.return_value = False
38
+ mock_common_parents.return_value = ["epic"]
39
+
40
+ info = updater.get_children_info("P1", "feature", "story")
41
+
42
+ assert info["has_children"] is True
43
+ assert info["children_count"] == 1
44
+ assert info["target_can_have_children"] is True
45
+ assert info["requires_action"] is False
46
+ assert info["target_exists"] is False
47
+ assert (
48
+ info["message"]
49
+ == "Found 1 children. They will be updated to reference the new classifier."
50
+ )
51
+ assert "task" in info["children"]
52
+ assert info["children"]["task"][0]["title"] == "T1"
53
+
54
+ @patch(
55
+ "ara_cli.children_contribution_updater.ChildrenContributionUpdater._find_children"
56
+ )
57
+ @patch(
58
+ "ara_cli.children_contribution_updater.ChildrenContributionUpdater._count_children"
59
+ )
60
+ @patch("ara_cli.children_contribution_updater.Classifier.can_have_children")
61
+ @patch(
62
+ "ara_cli.children_contribution_updater.ChildrenContributionUpdater._check_target_exists"
63
+ )
64
+ def test_get_children_info_requires_action(
65
+ self, mock_check_exists, mock_can_have_children, mock_count, mock_find, updater
66
+ ):
67
+ mock_find.return_value = {"task": []}
68
+ mock_count.return_value = 1
69
+ mock_can_have_children.return_value = False # Target cannot have children
70
+ mock_check_exists.return_value = False
71
+
72
+ info = updater.get_children_info("P1", "feature", "task")
73
+
74
+ assert info["requires_action"] is True
75
+ assert "requires handling 1 children" in info["message"]
76
+
77
+ @patch(
78
+ "ara_cli.children_contribution_updater.ChildrenContributionUpdater._find_children"
79
+ )
80
+ @patch(
81
+ "ara_cli.children_contribution_updater.ChildrenContributionUpdater._count_children"
82
+ )
83
+ @patch("ara_cli.children_contribution_updater.Classifier.can_have_children")
84
+ @patch(
85
+ "ara_cli.children_contribution_updater.ChildrenContributionUpdater._check_target_exists"
86
+ )
87
+ def test_get_children_info_target_exists(
88
+ self, mock_check_exists, mock_can_have_children, mock_count, mock_find, updater
89
+ ):
90
+ mock_find.return_value = {}
91
+ mock_count.return_value = 0
92
+ mock_can_have_children.return_value = True
93
+ mock_check_exists.return_value = True
94
+
95
+ info = updater.get_children_info("P1", "feature", "story")
96
+
97
+ assert info["target_exists"] is True
98
+ assert "already exists" in info["message"]