ara-cli 0.1.9.92__py3-none-any.whl → 0.1.9.94__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.
- ara_cli/__init__.py +1 -1
- ara_cli/ara_command_action.py +23 -43
- ara_cli/ara_command_parser.py +16 -1
- ara_cli/artefact_lister.py +29 -55
- ara_cli/artefact_models/artefact_data_retrieval.py +23 -0
- ara_cli/artefact_renamer.py +6 -2
- ara_cli/chat.py +17 -24
- ara_cli/commands/extract_command.py +4 -3
- ara_cli/commands/read_command.py +104 -0
- ara_cli/prompt_extractor.py +21 -6
- ara_cli/prompt_handler.py +70 -48
- ara_cli/tag_extractor.py +21 -11
- ara_cli/version.py +1 -1
- {ara_cli-0.1.9.92.dist-info → ara_cli-0.1.9.94.dist-info}/METADATA +17 -17
- {ara_cli-0.1.9.92.dist-info → ara_cli-0.1.9.94.dist-info}/RECORD +21 -19
- tests/test_artefact_lister.py +52 -132
- tests/test_chat.py +11 -10
- tests/test_prompt_handler.py +432 -99
- {ara_cli-0.1.9.92.dist-info → ara_cli-0.1.9.94.dist-info}/WHEEL +0 -0
- {ara_cli-0.1.9.92.dist-info → ara_cli-0.1.9.94.dist-info}/entry_points.txt +0 -0
- {ara_cli-0.1.9.92.dist-info → ara_cli-0.1.9.94.dist-info}/top_level.txt +0 -0
ara_cli/prompt_handler.py
CHANGED
|
@@ -17,47 +17,84 @@ import logging
|
|
|
17
17
|
|
|
18
18
|
class LLMSingleton:
|
|
19
19
|
_instance = None
|
|
20
|
-
|
|
20
|
+
_default_model = None
|
|
21
|
+
_extraction_model = None
|
|
21
22
|
|
|
22
|
-
def __init__(self,
|
|
23
|
+
def __init__(self, default_model_id, extraction_model_id):
|
|
23
24
|
config = ConfigManager().get_config()
|
|
24
|
-
|
|
25
|
+
default_config_data = config.llm_config.get(str(default_model_id))
|
|
25
26
|
|
|
26
|
-
if not
|
|
27
|
-
raise ValueError(f"No configuration found for the model: {
|
|
28
|
-
|
|
29
|
-
LLMSingleton._model = model_id
|
|
27
|
+
if not default_config_data:
|
|
28
|
+
raise ValueError(f"No configuration found for the default model: {default_model_id}")
|
|
29
|
+
self.default_config_params = default_config_data.model_dump(exclude_none=True)
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
extraction_config_data = config.llm_config.get(str(extraction_model_id))
|
|
32
|
+
if not extraction_config_data:
|
|
33
|
+
raise ValueError(f"No configuration found for the extraction model: {extraction_model_id}")
|
|
34
|
+
self.extraction_config_params = extraction_config_data.model_dump(exclude_none=True)
|
|
33
35
|
|
|
36
|
+
LLMSingleton._default_model = default_model_id
|
|
37
|
+
LLMSingleton._extraction_model = extraction_model_id
|
|
34
38
|
LLMSingleton._instance = self
|
|
35
39
|
|
|
36
40
|
@classmethod
|
|
37
41
|
def get_instance(cls):
|
|
38
42
|
if cls._instance is None:
|
|
39
43
|
config = ConfigManager().get_config()
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
default_model = config.default_llm
|
|
45
|
+
if not default_model:
|
|
46
|
+
if not config.llm_config:
|
|
47
|
+
raise ValueError("No LLM configurations are defined in the configuration file.")
|
|
48
|
+
default_model = next(iter(config.llm_config))
|
|
49
|
+
|
|
50
|
+
extraction_model = getattr(config, 'extraction_llm', default_model)
|
|
51
|
+
if not extraction_model:
|
|
52
|
+
extraction_model = default_model
|
|
53
|
+
|
|
54
|
+
cls(default_model, extraction_model)
|
|
46
55
|
return cls._instance
|
|
47
56
|
|
|
48
57
|
@classmethod
|
|
49
|
-
def
|
|
50
|
-
|
|
58
|
+
def get_config_by_purpose(cls, purpose='default'):
|
|
59
|
+
"""
|
|
60
|
+
purpose= 'default' or 'extraction'
|
|
61
|
+
"""
|
|
62
|
+
instance = cls.get_instance()
|
|
63
|
+
if purpose == 'extraction':
|
|
64
|
+
return instance.extraction_config_params.copy()
|
|
65
|
+
return instance.default_config_params.copy()
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def set_default_model(cls, model_name):
|
|
69
|
+
"""Sets the default language model for the current session."""
|
|
70
|
+
cls.get_instance()
|
|
71
|
+
if model_name == cls._default_model:
|
|
51
72
|
return cls._instance
|
|
52
|
-
cls(model_name)
|
|
53
|
-
print(f"Language model switched to '{model_name}'")
|
|
73
|
+
cls(model_name, cls._extraction_model)
|
|
54
74
|
return cls._instance
|
|
55
75
|
|
|
56
76
|
@classmethod
|
|
57
|
-
def
|
|
77
|
+
def set_extraction_model(cls, model_name):
|
|
78
|
+
"""Sets the extraction language model for the current session."""
|
|
79
|
+
cls.get_instance()
|
|
80
|
+
if model_name == cls._extraction_model:
|
|
81
|
+
return cls._instance
|
|
82
|
+
cls(cls._default_model, model_name)
|
|
83
|
+
return cls._instance
|
|
84
|
+
|
|
85
|
+
@classmethod
|
|
86
|
+
def get_default_model(cls):
|
|
87
|
+
"""Gets the default model name stored in the singleton instance."""
|
|
88
|
+
if cls._instance is None:
|
|
89
|
+
cls.get_instance()
|
|
90
|
+
return cls._default_model
|
|
91
|
+
|
|
92
|
+
@classmethod
|
|
93
|
+
def get_extraction_model(cls):
|
|
94
|
+
"""Gets the extraction model name stored in the singleton instance."""
|
|
58
95
|
if cls._instance is None:
|
|
59
96
|
cls.get_instance()
|
|
60
|
-
return cls.
|
|
97
|
+
return cls._extraction_model
|
|
61
98
|
|
|
62
99
|
|
|
63
100
|
def write_string_to_file(filename, string, mode):
|
|
@@ -71,28 +108,6 @@ def read_string_from_file(path):
|
|
|
71
108
|
text = file.read()
|
|
72
109
|
return text
|
|
73
110
|
|
|
74
|
-
def _get_model_config(purpose: str) -> dict:
|
|
75
|
-
"""
|
|
76
|
-
Resolves model ID by purpose and returns its prepared configuration for LiteLLM.
|
|
77
|
-
"""
|
|
78
|
-
config = ConfigManager().get_config()
|
|
79
|
-
|
|
80
|
-
# Determine which model to use based on the purpose
|
|
81
|
-
model_id = config.default_llm
|
|
82
|
-
if purpose == 'extraction':
|
|
83
|
-
# Use extraction_llm if it exists, otherwise fall back to default_llm
|
|
84
|
-
model_id = getattr(config, 'extraction_llm', config.default_llm)
|
|
85
|
-
|
|
86
|
-
selected_config = config.llm_config.get(str(model_id))
|
|
87
|
-
|
|
88
|
-
if not selected_config:
|
|
89
|
-
raise ValueError(f"No configuration found for model '{model_id}' used for '{purpose}'")
|
|
90
|
-
|
|
91
|
-
config_parameters = selected_config.model_dump(exclude_none=True)
|
|
92
|
-
config_parameters.pop("provider", None)
|
|
93
|
-
|
|
94
|
-
return config_parameters
|
|
95
|
-
|
|
96
111
|
|
|
97
112
|
def _is_valid_message(message: dict) -> bool:
|
|
98
113
|
"""
|
|
@@ -116,7 +131,10 @@ def _is_valid_message(message: dict) -> bool:
|
|
|
116
131
|
|
|
117
132
|
def send_prompt(prompt, purpose='default'):
|
|
118
133
|
"""Prepares and sends a prompt to the LLM, streaming the response."""
|
|
119
|
-
|
|
134
|
+
chat_instance = LLMSingleton.get_instance()
|
|
135
|
+
config_parameters = chat_instance.get_config_by_purpose(purpose)
|
|
136
|
+
|
|
137
|
+
config_parameters.pop("provider", None)
|
|
120
138
|
|
|
121
139
|
filtered_prompt = [msg for msg in prompt if _is_valid_message(msg)]
|
|
122
140
|
|
|
@@ -172,9 +190,9 @@ def describe_image(image_path: str) -> str:
|
|
|
172
190
|
]
|
|
173
191
|
}
|
|
174
192
|
|
|
175
|
-
# Get response from LLM
|
|
193
|
+
# Get response from LLM using the extraction model purpose
|
|
176
194
|
response_text = ""
|
|
177
|
-
for chunk in send_prompt([message]):
|
|
195
|
+
for chunk in send_prompt([message], purpose='extraction'):
|
|
178
196
|
chunk_content = chunk.choices[0].delta.content
|
|
179
197
|
if chunk_content:
|
|
180
198
|
response_text += chunk_content
|
|
@@ -461,7 +479,11 @@ def append_images_to_message(message, image_data_list):
|
|
|
461
479
|
message_content = message["content"]
|
|
462
480
|
logger.debug(f"Original message content: {message_content}")
|
|
463
481
|
|
|
464
|
-
|
|
482
|
+
if isinstance(message_content, str):
|
|
483
|
+
message["content"] = [{"type": "text", "text": message_content}]
|
|
484
|
+
|
|
485
|
+
message["content"].extend(image_data_list)
|
|
486
|
+
|
|
465
487
|
logger.debug(f"Updated message content with {len(image_data_list)} images")
|
|
466
488
|
|
|
467
489
|
return message
|
|
@@ -517,7 +539,7 @@ def generate_config_prompt_template_file(prompt_data_path, config_prompt_templat
|
|
|
517
539
|
def generate_config_prompt_givens_file(prompt_data_path, config_prompt_givens_name, artefact_to_mark=None):
|
|
518
540
|
config_prompt_givens_path = os.path.join(prompt_data_path, config_prompt_givens_name)
|
|
519
541
|
config = ConfigManager.get_config()
|
|
520
|
-
dir_list = ["ara"] + [
|
|
542
|
+
dir_list = ["ara"] + [path for d in config.ext_code_dirs for path in d.values()] + [config.doc_dir] + [config.glossary_dir]
|
|
521
543
|
|
|
522
544
|
print(f"used {dir_list} for prompt givens file listing")
|
|
523
545
|
generate_markdown_listing(dir_list, config.ara_prompt_given_list_includes, config_prompt_givens_path)
|
ara_cli/tag_extractor.py
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from ara_cli.list_filter import ListFilter, filter_list
|
|
3
|
-
from ara_cli.
|
|
3
|
+
from ara_cli.artefact_models.artefact_data_retrieval import (
|
|
4
|
+
artefact_content_retrieval,
|
|
5
|
+
artefact_path_retrieval,
|
|
6
|
+
artefact_tags_retrieval,
|
|
7
|
+
)
|
|
4
8
|
|
|
5
9
|
|
|
6
10
|
class TagExtractor:
|
|
@@ -10,7 +14,9 @@ class TagExtractor:
|
|
|
10
14
|
def filter_column(self, tags_set, filtered_artefacts):
|
|
11
15
|
status_tags = {"to-do", "in-progress", "review", "done", "closed"}
|
|
12
16
|
|
|
13
|
-
artefacts_to_process = self._get_artefacts_without_status_tags(
|
|
17
|
+
artefacts_to_process = self._get_artefacts_without_status_tags(
|
|
18
|
+
filtered_artefacts, status_tags
|
|
19
|
+
)
|
|
14
20
|
self._add_non_status_tags_to_set(tags_set, artefacts_to_process, status_tags)
|
|
15
21
|
|
|
16
22
|
def _get_artefacts_without_status_tags(self, filtered_artefacts, status_tags):
|
|
@@ -28,7 +34,9 @@ class TagExtractor:
|
|
|
28
34
|
|
|
29
35
|
def _add_non_status_tags_to_set(self, tags_set, artefacts, status_tags):
|
|
30
36
|
for artefact in artefacts:
|
|
31
|
-
tags = [
|
|
37
|
+
tags = [
|
|
38
|
+
tag for tag in (artefact.tags + [artefact.status]) if tag is not None
|
|
39
|
+
]
|
|
32
40
|
for tag in tags:
|
|
33
41
|
if self._is_skipped_tag(tag, status_tags):
|
|
34
42
|
continue
|
|
@@ -36,23 +44,25 @@ class TagExtractor:
|
|
|
36
44
|
|
|
37
45
|
def _is_skipped_tag(self, tag, status_tags):
|
|
38
46
|
return (
|
|
39
|
-
tag in status_tags
|
|
40
|
-
or tag.startswith("priority_")
|
|
41
|
-
or tag.startswith("user_")
|
|
47
|
+
tag in status_tags or tag.startswith("priority_") or tag.startswith("user_")
|
|
42
48
|
)
|
|
43
49
|
|
|
44
50
|
def add_to_tags_set(self, tags_set, filtered_artefacts):
|
|
45
51
|
for artefact_list in filtered_artefacts.values():
|
|
46
52
|
for artefact in artefact_list:
|
|
47
53
|
user_tags = [f"user_{tag}" for tag in artefact.users]
|
|
48
|
-
tags = [
|
|
54
|
+
tags = [
|
|
55
|
+
tag
|
|
56
|
+
for tag in (artefact.tags + [artefact.status] + user_tags)
|
|
57
|
+
if tag is not None
|
|
58
|
+
]
|
|
49
59
|
tags_set.update(tags)
|
|
50
60
|
|
|
51
61
|
def extract_tags(
|
|
52
62
|
self,
|
|
53
63
|
navigate_to_target=False,
|
|
54
64
|
filtered_extra_column=False,
|
|
55
|
-
list_filter: ListFilter | None = None
|
|
65
|
+
list_filter: ListFilter | None = None,
|
|
56
66
|
):
|
|
57
67
|
from ara_cli.template_manager import DirectoryNavigator
|
|
58
68
|
from ara_cli.artefact_reader import ArtefactReader
|
|
@@ -66,9 +76,9 @@ class TagExtractor:
|
|
|
66
76
|
filtered_artefacts = filter_list(
|
|
67
77
|
list_to_filter=artefacts,
|
|
68
78
|
list_filter=list_filter,
|
|
69
|
-
content_retrieval_strategy=
|
|
70
|
-
file_path_retrieval=
|
|
71
|
-
tag_retrieval=
|
|
79
|
+
content_retrieval_strategy=artefact_content_retrieval,
|
|
80
|
+
file_path_retrieval=artefact_path_retrieval,
|
|
81
|
+
tag_retrieval=artefact_tags_retrieval,
|
|
72
82
|
)
|
|
73
83
|
|
|
74
84
|
unique_tags = set()
|
ara_cli/version.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# version.py
|
|
2
|
-
__version__ = "0.1.9.
|
|
2
|
+
__version__ = "0.1.9.94" # fith parameter like .0 for local install test purposes only. official numbers should be 4 digit numbers
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ara_cli
|
|
3
|
-
Version: 0.1.9.
|
|
3
|
+
Version: 0.1.9.94
|
|
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: litellm
|
|
@@ -108,22 +108,22 @@ ara autofix
|
|
|
108
108
|
|
|
109
109
|
## Command Overview
|
|
110
110
|
|
|
111
|
-
| Action
|
|
112
|
-
|
|
113
|
-
| create
|
|
114
|
-
| delete
|
|
115
|
-
| rename
|
|
116
|
-
| list, list-tags
|
|
117
|
-
| prompt, chat
|
|
118
|
-
| template
|
|
119
|
-
| fetch-templates
|
|
120
|
-
| read
|
|
121
|
-
| reconnect
|
|
122
|
-
| read-status, set-status | Query and assign status to artefacts
|
|
123
|
-
| read-user, set-user | Query and assign responsible users
|
|
124
|
-
| classifier-directory | Show directory of artefact classifiers
|
|
125
|
-
| scan
|
|
126
|
-
| autofix
|
|
111
|
+
| Action | Description |
|
|
112
|
+
| ----------------------- | ----------------------------------------------------------------------- |
|
|
113
|
+
| create | Create a classified artefact with data directory |
|
|
114
|
+
| delete | Delete an artefact and its data directory |
|
|
115
|
+
| rename | Rename an artefact and its data directory |
|
|
116
|
+
| list, list-tags | List artefacts, show tags, filter by content, extension, hierarchy etc. |
|
|
117
|
+
| prompt, chat | Use AI-powered chat and prompt templates for artefact management |
|
|
118
|
+
| template | Print artefact templates in the terminal |
|
|
119
|
+
| fetch-templates | Download and manage reusable prompt templates |
|
|
120
|
+
| read | Output artefact contents and their full contribution chain |
|
|
121
|
+
| reconnect | Connect artefacts to parent artefacts |
|
|
122
|
+
| read-status, set-status | Query and assign status to artefacts |
|
|
123
|
+
| read-user, set-user | Query and assign responsible users |
|
|
124
|
+
| classifier-directory | Show directory of artefact classifiers |
|
|
125
|
+
| scan | Scan the ARA tree for incompatible or inconsistent artefacts |
|
|
126
|
+
| autofix | Automatically correct artefact issues with LLM assistance |
|
|
127
127
|
|
|
128
128
|
See `ara -h` for the complete list of commands and usage examples.
|
|
129
129
|
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
ara_cli/__init__.py,sha256=
|
|
1
|
+
ara_cli/__init__.py,sha256=oieeo07y5FLq0tmPzWZdp65j6tN8NOucSjSzrJw8qrQ,203
|
|
2
2
|
ara_cli/__main__.py,sha256=J5DCDLRZ6UcpYwM1-NkjaLo4PTetcSj2dB4HrrftkUw,2064
|
|
3
|
-
ara_cli/ara_command_action.py,sha256=
|
|
4
|
-
ara_cli/ara_command_parser.py,sha256=
|
|
3
|
+
ara_cli/ara_command_action.py,sha256=uyMN05ZYffWqN9nwL53MmQ_yHpuxHVqZ_scAMEoD1jw,21516
|
|
4
|
+
ara_cli/ara_command_parser.py,sha256=A1lMc9Gc0EMJt-380PTcv3aKoxbXGfx5gGax-sZqV3I,21020
|
|
5
5
|
ara_cli/ara_config.py,sha256=5uBo_flNgZSk7B9lmyfvzWyxfIQzb13LbieCpJfdZJI,8765
|
|
6
6
|
ara_cli/artefact_autofix.py,sha256=WVTiIR-jo4YKmmz4eS3qTFvl45W1YKwAk1XSuz9QX10,20015
|
|
7
7
|
ara_cli/artefact_creator.py,sha256=0Ory6cB-Ahkw-BDNb8QHnTbp_OHGABdkb9bhwcEdcIc,6063
|
|
8
8
|
ara_cli/artefact_deleter.py,sha256=Co4wwCH3yW8H9NrOq7_2p5571EeHr0TsfE-H8KqoOfY,1900
|
|
9
9
|
ara_cli/artefact_fuzzy_search.py,sha256=iBlDqjZf-_D3VUjFf7ZwkiQbpQDcwRndIU7aG_sRTgE,2668
|
|
10
10
|
ara_cli/artefact_link_updater.py,sha256=nKdxTpDKqWTOAMD8viKmUaklSFGWzJZ8S8E8xW_ADuM,3775
|
|
11
|
-
ara_cli/artefact_lister.py,sha256=
|
|
11
|
+
ara_cli/artefact_lister.py,sha256=M-ggazAgZ-OLeW9NB48r_sd6zPx0p4hEpeS63qHwI1A,4176
|
|
12
12
|
ara_cli/artefact_reader.py,sha256=Pho0_Eqm7kD9CNbVMhKb6mkNM0I3iJiCJXbXmVp1DJU,7827
|
|
13
|
-
ara_cli/artefact_renamer.py,sha256=
|
|
13
|
+
ara_cli/artefact_renamer.py,sha256=8S4QWD19_FGKsKlWojnu_RUOxx0u9rmLugydM4s4VDc,4219
|
|
14
14
|
ara_cli/artefact_scan.py,sha256=msPCm-vPWOAZ_e_z5GylXxq1MtNlmJ4zvKrsdOFCWF4,4813
|
|
15
|
-
ara_cli/chat.py,sha256=
|
|
15
|
+
ara_cli/chat.py,sha256=t17TCmx9xvKj5wrnUOJBqjWoSjEVOFrVd8RivChVX50,37980
|
|
16
16
|
ara_cli/classifier.py,sha256=zWskj7rBYdqYBGjksBm46iTgVU5IIf2PZsJr4qeiwVU,1878
|
|
17
17
|
ara_cli/codefusionretriever.py,sha256=fCHgXdIBRzkVAnapX-KI2NQ44XbrrF4tEQmn5J6clUI,1980
|
|
18
18
|
ara_cli/codehierachieretriever.py,sha256=Xd3EgEWWhkSf1TmTWtf8X5_YvyE_4B66nRrqarwSiTU,1182
|
|
@@ -24,15 +24,16 @@ ara_cli/filename_validator.py,sha256=Aw9PL8d5-Ymhp3EY6lDrUBk3cudaNqo1Uw5RzPpI1jA
|
|
|
24
24
|
ara_cli/list_filter.py,sha256=qKGwwQsrWe7L5FbdxEbBYD1bbbi8c-RMypjXqXvLbgs,5291
|
|
25
25
|
ara_cli/output_suppressor.py,sha256=nwiHaQLwabOjMoJOeUESBnZszGMxrQZfJ3N2OvahX7Y,389
|
|
26
26
|
ara_cli/prompt_chat.py,sha256=kd_OINDQFit6jN04bb7mzgY259JBbRaTaNp9F-webkc,1346
|
|
27
|
-
ara_cli/prompt_extractor.py,sha256
|
|
28
|
-
ara_cli/prompt_handler.py,sha256=
|
|
27
|
+
ara_cli/prompt_extractor.py,sha256=-_17aVYXYH6kPX5FOSb9T8lbEkKPXE6nlHWq1pvO_Og,8423
|
|
28
|
+
ara_cli/prompt_handler.py,sha256=6yfiMFNHGHANREAsjT8dv9jKxBKeazPkF7xQQI4l6vQ,22312
|
|
29
29
|
ara_cli/prompt_rag.py,sha256=ydlhe4CUqz0jdzlY7jBbpKaf_5fjMrAZKnriKea3ZAg,7485
|
|
30
30
|
ara_cli/run_file_lister.py,sha256=XbrrDTJXp1LFGx9Lv91SNsEHZPP-PyEMBF_P4btjbDA,2360
|
|
31
|
-
ara_cli/tag_extractor.py,sha256=
|
|
31
|
+
ara_cli/tag_extractor.py,sha256=k2yRl7dAMZ4YTARzUke4wgY0oEIOmWkOHGet7nXB6uw,3317
|
|
32
32
|
ara_cli/template_manager.py,sha256=YwrN6AYPpl6ZrW8BVQpVXx8yTRf-oNpJUIKeg4NAggs,6606
|
|
33
33
|
ara_cli/update_config_prompt.py,sha256=Oy9vNTw6UhDohyTEfSKkqE5ifEMPlmWNYkKHgUrK_pY,4607
|
|
34
|
-
ara_cli/version.py,sha256=
|
|
34
|
+
ara_cli/version.py,sha256=MWb524qaDHLrSJsHhOq7o0m78CPLFil9qeyel6kPW-A,146
|
|
35
35
|
ara_cli/artefact_models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
+
ara_cli/artefact_models/artefact_data_retrieval.py,sha256=CooXOJBYWSyiViN2xkC8baS8OUaslry3YGVVUeDxRAU,527
|
|
36
37
|
ara_cli/artefact_models/artefact_load.py,sha256=IXzWxP-Q_j_oDGMno0m-OuXCQ7Vd5c_NctshGr4ROBw,621
|
|
37
38
|
ara_cli/artefact_models/artefact_mapping.py,sha256=8aD0spBjkJ8toMAmFawc6UTUxB6-tEEViZXv2I-r88Q,1874
|
|
38
39
|
ara_cli/artefact_models/artefact_model.py,sha256=qSbcrmFWAYgBqcNl9QARI1_uLQJm-TPVgP5q2AEFnjE,15983
|
|
@@ -50,9 +51,10 @@ ara_cli/artefact_models/userstory_artefact_model.py,sha256=2awH31ROtm7j4T44Bv4cy
|
|
|
50
51
|
ara_cli/artefact_models/vision_artefact_model.py,sha256=frjaUJj-mmIlVHEhzAQztCGs-CtvNu_odSborgztfzo,5251
|
|
51
52
|
ara_cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
52
53
|
ara_cli/commands/command.py,sha256=Y_2dNeuxRjbyI3ScXNv55lptSe8Hs_ya78L0nPYNZHA,154
|
|
53
|
-
ara_cli/commands/extract_command.py,sha256=
|
|
54
|
+
ara_cli/commands/extract_command.py,sha256=qpi2_ac3DyxS7FiOz4GsTtRR4xtpegckUmfXzDOwymM,858
|
|
54
55
|
ara_cli/commands/load_command.py,sha256=H3CfeHIL-criDU5oi4BONTSpyzJ4m8DzJ0ZCIiAZFeI,2204
|
|
55
56
|
ara_cli/commands/load_image_command.py,sha256=g9-PXAYdqx5Ed1PdVo-FIb4CyJGEpRFbgQf9Dxg6DmM,886
|
|
57
|
+
ara_cli/commands/read_command.py,sha256=bo1BvRWuNKdFqBNN1EWORNrX_yuFAOyBruDUolHq1Vc,3791
|
|
56
58
|
ara_cli/file_loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
57
59
|
ara_cli/file_loaders/binary_file_loader.py,sha256=1HHH1Nk4lEM83CTnf4z9wYz6rMLgpxydFoRcSgkBHmQ,940
|
|
58
60
|
ara_cli/file_loaders/document_file_loader.py,sha256=VxGFChYyM9K-e6eOCK3yk5jQuEXgz01Mh_NoA6CA_RM,1017
|
|
@@ -138,23 +140,23 @@ tests/test_ara_config.py,sha256=H5GwDbab0GMSa6IbHdruzmbsHy5Ia0xX0uteJdfZ9Rg,1427
|
|
|
138
140
|
tests/test_artefact_autofix.py,sha256=pApZ-N0dW8Ujt-cNLbgvd4bhiIIK8oXb-saLf6QlA-8,25022
|
|
139
141
|
tests/test_artefact_fuzzy_search.py,sha256=5Sh3_l9QK8-WHn6JpGPU1b6h4QEnl2JoMq1Tdp2cj1U,1261
|
|
140
142
|
tests/test_artefact_link_updater.py,sha256=biqbEp2jCOz8giv72hu2P2hDfeJfJ9OrVGdAv5d9cK4,2191
|
|
141
|
-
tests/test_artefact_lister.py,sha256=
|
|
143
|
+
tests/test_artefact_lister.py,sha256=35R13UU-YsX1HOsEN8M2-vIiCUA9RSBm6SwestDaFhE,20388
|
|
142
144
|
tests/test_artefact_reader.py,sha256=660K-d8ed-j8hulsUB_7baPD2-hhbg9TffUR5yVc4Uo,927
|
|
143
145
|
tests/test_artefact_renamer.py,sha256=lSnKCCfoFGgKhTdDZrEaeBq1xJAak1QoqH5aSeOe9Ro,3494
|
|
144
146
|
tests/test_artefact_scan.py,sha256=uNWgrt7ieZ4ogKACsPqzAsh59JF2BhTKSag31hpVrTQ,16887
|
|
145
|
-
tests/test_chat.py,sha256
|
|
147
|
+
tests/test_chat.py,sha256=cCNIuYiSGoNtjgjyFiTvkMHJgCmMNXQhpawNc23-fmM,57037
|
|
146
148
|
tests/test_classifier.py,sha256=grYGPksydNdPsaEBQxYHZTuTdcJWz7VQtikCKA6BNaQ,1920
|
|
147
149
|
tests/test_directory_navigator.py,sha256=7G0MVrBbtBvbrFUpL0zb_9EkEWi1dulWuHsrQxMJxDY,140
|
|
148
150
|
tests/test_file_classifier.py,sha256=kLWPiePu3F5mkVuI_lK_2QlLh2kXD_Mt2K8KZZ1fAnA,10940
|
|
149
151
|
tests/test_file_creator.py,sha256=D3G7MbgE0m8JmZihxnTryxLco6iZdbV--2CGc0L20FM,2109
|
|
150
152
|
tests/test_file_lister.py,sha256=Q9HwhKKx540EPzTmfzOCnvtAgON0aMmpJE2eOe1J3EA,4324
|
|
151
153
|
tests/test_list_filter.py,sha256=fJA3d_SdaOAUkE7jn68MOVS0THXGghy1fye_64Zvo1U,7964
|
|
152
|
-
tests/test_prompt_handler.py,sha256=
|
|
154
|
+
tests/test_prompt_handler.py,sha256=3-lYBvyHLQgD29MODkXB3YylUWXmRCYdAwrQrtlW8WU,30871
|
|
153
155
|
tests/test_tag_extractor.py,sha256=nSiAYlTKZ7TLAOtcJpwK5zTWHhFYU0tI5xKnivLc1dU,2712
|
|
154
156
|
tests/test_template_manager.py,sha256=q-LMHRG4rHkD6ON6YW4cpZxUx9hul6Or8wVVRC2kb-8,4099
|
|
155
157
|
tests/test_update_config_prompt.py,sha256=xsqj1WTn4BsG5Q2t-sNPfu7EoMURFcS-hfb5VSXUnJc,6765
|
|
156
|
-
ara_cli-0.1.9.
|
|
157
|
-
ara_cli-0.1.9.
|
|
158
|
-
ara_cli-0.1.9.
|
|
159
|
-
ara_cli-0.1.9.
|
|
160
|
-
ara_cli-0.1.9.
|
|
158
|
+
ara_cli-0.1.9.94.dist-info/METADATA,sha256=CPz0aDXI8_4hJtbN9tm56-aNUNEum3G01dD9DMIwGdg,6755
|
|
159
|
+
ara_cli-0.1.9.94.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
160
|
+
ara_cli-0.1.9.94.dist-info/entry_points.txt,sha256=v4h7MzysTgSIDYfEo3oj4Kz_8lzsRa3hq-KJHEcLVX8,45
|
|
161
|
+
ara_cli-0.1.9.94.dist-info/top_level.txt,sha256=WM4cLHT5DYUaWzLtRj-gu3yVNFpGQ6lLRI3FMmC-38I,14
|
|
162
|
+
ara_cli-0.1.9.94.dist-info/RECORD,,
|