zrb 1.5.11__py3-none-any.whl → 1.5.12__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.
- zrb/builtin/llm/llm_chat.py +1 -1
- zrb/builtin/llm/tool/__init__.py +0 -0
- zrb/builtin/llm/tool/sub_agent.py +125 -0
- zrb/builtin/llm/tool/web.py +0 -2
- zrb/config.py +0 -3
- zrb/llm_config.py +16 -2
- zrb/task/base_task.py +20 -0
- zrb/task/llm/agent.py +5 -8
- zrb/task/llm/context.py +17 -8
- zrb/task/llm/context_enrichment.py +52 -13
- zrb/task/llm/history_summarization.py +3 -5
- zrb/task/llm/prompt.py +7 -4
- zrb/task/llm/tool_wrapper.py +115 -53
- zrb/task/llm_task.py +16 -1
- zrb/util/attr.py +84 -1
- zrb/util/cli/style.py +147 -0
- zrb/util/cli/subcommand.py +22 -1
- zrb/util/cmd/command.py +18 -0
- zrb/util/cmd/remote.py +15 -0
- zrb/util/codemod/modification_mode.py +4 -0
- zrb/util/codemod/modify_class.py +72 -0
- zrb/util/codemod/modify_class_parent.py +68 -0
- zrb/util/codemod/modify_class_property.py +67 -0
- zrb/util/codemod/modify_dict.py +62 -0
- zrb/util/codemod/modify_function.py +75 -3
- zrb/util/codemod/modify_function_call.py +72 -0
- zrb/util/codemod/modify_method.py +77 -0
- zrb/util/codemod/modify_module.py +10 -0
- zrb/util/cron.py +37 -3
- zrb/util/file.py +32 -0
- zrb/util/git.py +113 -0
- zrb/util/git_subtree.py +58 -0
- zrb/util/group.py +64 -2
- zrb/util/load.py +29 -0
- zrb/util/run.py +9 -0
- zrb/util/string/conversion.py +86 -0
- zrb/util/string/format.py +20 -0
- zrb/util/string/name.py +12 -0
- zrb/util/todo.py +165 -4
- {zrb-1.5.11.dist-info → zrb-1.5.12.dist-info}/METADATA +3 -3
- {zrb-1.5.11.dist-info → zrb-1.5.12.dist-info}/RECORD +43 -41
- {zrb-1.5.11.dist-info → zrb-1.5.12.dist-info}/WHEEL +0 -0
- {zrb-1.5.11.dist-info → zrb-1.5.12.dist-info}/entry_points.txt +0 -0
zrb/util/string/conversion.py
CHANGED
@@ -6,6 +6,15 @@ FALSE_STRS = ["false", "0", "no", "n", "inactive", "off"]
|
|
6
6
|
|
7
7
|
|
8
8
|
def double_quote(input_string: str) -> str:
|
9
|
+
"""
|
10
|
+
Double quote a string, escaping any existing double quotes or backslashes.
|
11
|
+
|
12
|
+
Args:
|
13
|
+
input_string (str): The string to double quote.
|
14
|
+
|
15
|
+
Returns:
|
16
|
+
str: The double-quoted string with necessary characters escaped.
|
17
|
+
"""
|
9
18
|
# Escape necessary characters: backslashes and double quotes
|
10
19
|
escaped_string = re.sub(r'([\\"])', r"\\\1", input_string)
|
11
20
|
# Wrap in double quotes
|
@@ -13,6 +22,20 @@ def double_quote(input_string: str) -> str:
|
|
13
22
|
|
14
23
|
|
15
24
|
def to_boolean(text: str) -> bool:
|
25
|
+
"""
|
26
|
+
Convert a string representation to a boolean value.
|
27
|
+
|
28
|
+
Recognizes common true/false strings (case-insensitive).
|
29
|
+
|
30
|
+
Args:
|
31
|
+
text (str): The string to convert.
|
32
|
+
|
33
|
+
Returns:
|
34
|
+
bool: The boolean representation of the string.
|
35
|
+
|
36
|
+
Raises:
|
37
|
+
Exception: If the string cannot be inferred as a boolean value.
|
38
|
+
"""
|
16
39
|
if text.lower() in TRUE_STRS:
|
17
40
|
return True
|
18
41
|
if text.lower() in FALSE_STRS:
|
@@ -21,6 +44,15 @@ def to_boolean(text: str) -> bool:
|
|
21
44
|
|
22
45
|
|
23
46
|
def to_camel_case(text: str | None) -> str:
|
47
|
+
"""
|
48
|
+
Convert a string to camelCase.
|
49
|
+
|
50
|
+
Args:
|
51
|
+
text (str | None): The input string.
|
52
|
+
|
53
|
+
Returns:
|
54
|
+
str: The string in camelCase.
|
55
|
+
"""
|
24
56
|
text = str(text) if text is not None else ""
|
25
57
|
pascal = to_pascal_case(text)
|
26
58
|
if len(pascal) == 0:
|
@@ -29,6 +61,15 @@ def to_camel_case(text: str | None) -> str:
|
|
29
61
|
|
30
62
|
|
31
63
|
def to_pascal_case(text: str | None) -> str:
|
64
|
+
"""
|
65
|
+
Convert a string to PascalCase.
|
66
|
+
|
67
|
+
Args:
|
68
|
+
text (str | None): The input string.
|
69
|
+
|
70
|
+
Returns:
|
71
|
+
str: The string in PascalCase.
|
72
|
+
"""
|
32
73
|
text = str(text) if text is not None else ""
|
33
74
|
text = _to_alphanum(text)
|
34
75
|
return "".join(
|
@@ -37,23 +78,59 @@ def to_pascal_case(text: str | None) -> str:
|
|
37
78
|
|
38
79
|
|
39
80
|
def to_kebab_case(text: str | None) -> str:
|
81
|
+
"""
|
82
|
+
Convert a string to kebab-case.
|
83
|
+
|
84
|
+
Args:
|
85
|
+
text (str | None): The input string.
|
86
|
+
|
87
|
+
Returns:
|
88
|
+
str: The string in kebab-case.
|
89
|
+
"""
|
40
90
|
text = str(text) if text is not None else ""
|
41
91
|
text = _to_alphanum(text)
|
42
92
|
return "-".join([x.lower() for x in _to_space_separated(text).split(" ")])
|
43
93
|
|
44
94
|
|
45
95
|
def to_snake_case(text: str | None) -> str:
|
96
|
+
"""
|
97
|
+
Convert a string to snake_case.
|
98
|
+
|
99
|
+
Args:
|
100
|
+
text (str | None): The input string.
|
101
|
+
|
102
|
+
Returns:
|
103
|
+
str: The string in snake_case.
|
104
|
+
"""
|
46
105
|
text = str(text) if text is not None else ""
|
47
106
|
text = _to_alphanum(text)
|
48
107
|
return "_".join([x.lower() for x in _to_space_separated(text).split(" ")])
|
49
108
|
|
50
109
|
|
51
110
|
def _to_alphanum(text: str | None) -> str:
|
111
|
+
"""
|
112
|
+
Convert a string to alphanumeric characters and spaces.
|
113
|
+
|
114
|
+
Args:
|
115
|
+
text (str | None): The input string.
|
116
|
+
|
117
|
+
Returns:
|
118
|
+
str: The string with non-alphanumeric characters replaced by spaces.
|
119
|
+
"""
|
52
120
|
text = str(text) if text is not None else ""
|
53
121
|
return NON_ALPHA_NUM.sub(" ", text)
|
54
122
|
|
55
123
|
|
56
124
|
def to_human_case(text: str | None) -> str:
|
125
|
+
"""
|
126
|
+
Convert a string to human-readable case (space-separated words with capitalization).
|
127
|
+
|
128
|
+
Args:
|
129
|
+
text (str | None): The input string.
|
130
|
+
|
131
|
+
Returns:
|
132
|
+
str: The string in human-readable case.
|
133
|
+
"""
|
57
134
|
text = str(text) if text is not None else ""
|
58
135
|
return " ".join(
|
59
136
|
[
|
@@ -116,6 +193,15 @@ def pluralize(noun: str) -> str:
|
|
116
193
|
|
117
194
|
|
118
195
|
def _to_space_separated(text: str | None) -> str:
|
196
|
+
"""
|
197
|
+
Convert a string with various separators (-, _) and camel/pascal case to space-separated words.
|
198
|
+
|
199
|
+
Args:
|
200
|
+
text (str | None): The input string.
|
201
|
+
|
202
|
+
Returns:
|
203
|
+
str: The space-separated string.
|
204
|
+
"""
|
119
205
|
text = str(text) if text is not None else ""
|
120
206
|
text = text.replace("-", " ").replace("_", " ")
|
121
207
|
parts = text.split(" ")
|
zrb/util/string/format.py
CHANGED
@@ -3,7 +3,27 @@ from typing import Any
|
|
3
3
|
|
4
4
|
|
5
5
|
def fstring_format(template: str, data: dict[str, Any]) -> str:
|
6
|
+
"""
|
7
|
+
Format a string template using f-string-like syntax with data from a dictionary.
|
8
|
+
|
9
|
+
Expressions within curly braces `{}` are evaluated using the provided data.
|
10
|
+
|
11
|
+
Args:
|
12
|
+
template (str): The string template to format.
|
13
|
+
data (dict[str, Any]): The dictionary containing data for expression evaluation.
|
14
|
+
|
15
|
+
Returns:
|
16
|
+
str: The formatted string.
|
17
|
+
|
18
|
+
Raises:
|
19
|
+
ValueError: If an expression in the template fails to evaluate or the
|
20
|
+
template is invalid.
|
21
|
+
"""
|
22
|
+
|
6
23
|
def replace_expr(match):
|
24
|
+
"""
|
25
|
+
Helper function to evaluate a single expression found in the template.
|
26
|
+
"""
|
7
27
|
expr = match.group(1)
|
8
28
|
try:
|
9
29
|
result = eval(expr, {}, data)
|
zrb/util/string/name.py
CHANGED
@@ -70,6 +70,18 @@ SUFFIXES = [
|
|
70
70
|
def get_random_name(
|
71
71
|
separator: str = "-", add_random_digit: bool = True, digit_count: int = 4
|
72
72
|
) -> str:
|
73
|
+
"""
|
74
|
+
Generate a random name consisting of a prefix, a suffix, and an optional
|
75
|
+
random digit string.
|
76
|
+
|
77
|
+
Args:
|
78
|
+
separator (str): The separator to join the parts of the name.
|
79
|
+
add_random_digit (bool): Whether to append a random digit string.
|
80
|
+
digit_count (int): The number of random digits to append if add_random_digit is True.
|
81
|
+
|
82
|
+
Returns:
|
83
|
+
str: The generated random name.
|
84
|
+
"""
|
73
85
|
prefix = random.choice(PREFIXES)
|
74
86
|
suffix = random.choice(SUFFIXES)
|
75
87
|
parts = [prefix, suffix]
|
zrb/util/todo.py
CHANGED
@@ -44,6 +44,12 @@ class TodoTaskModel(BaseModel):
|
|
44
44
|
return values
|
45
45
|
|
46
46
|
def get_additional_info_length(self):
|
47
|
+
"""
|
48
|
+
Calculate the length of the additional information string (projects, contexts, keyval).
|
49
|
+
|
50
|
+
Returns:
|
51
|
+
int: The length of the combined additional information string.
|
52
|
+
"""
|
47
53
|
results = []
|
48
54
|
for project in self.projects:
|
49
55
|
results.append(f"@{project}")
|
@@ -64,6 +70,15 @@ TODO_TXT_PATTERN = re.compile(
|
|
64
70
|
|
65
71
|
|
66
72
|
def cascade_todo_task(todo_task: TodoTaskModel):
|
73
|
+
"""
|
74
|
+
Populate default values for a TodoTaskModel if they are missing.
|
75
|
+
|
76
|
+
Args:
|
77
|
+
todo_task (TodoTaskModel): The todo task model to cascade.
|
78
|
+
|
79
|
+
Returns:
|
80
|
+
TodoTaskModel: The todo task model with default values populated.
|
81
|
+
"""
|
67
82
|
if todo_task.creation_date is None:
|
68
83
|
todo_task.creation_date = datetime.date.today()
|
69
84
|
if "id" not in todo_task.keyval:
|
@@ -74,6 +89,16 @@ def cascade_todo_task(todo_task: TodoTaskModel):
|
|
74
89
|
def select_todo_task(
|
75
90
|
todo_list: list[TodoTaskModel], keyword: str
|
76
91
|
) -> TodoTaskModel | None:
|
92
|
+
"""
|
93
|
+
Select a todo task from a list based on a keyword matching ID or description.
|
94
|
+
|
95
|
+
Args:
|
96
|
+
todo_list (list[TodoTaskModel]): The list of todo tasks.
|
97
|
+
keyword (str): The keyword to search for.
|
98
|
+
|
99
|
+
Returns:
|
100
|
+
TodoTaskModel | None: The matched todo task, or None if no match is found.
|
101
|
+
"""
|
77
102
|
for todo_task in todo_list:
|
78
103
|
id = todo_task.keyval.get("id", "")
|
79
104
|
if keyword.lower().strip() == id.lower().strip():
|
@@ -94,6 +119,15 @@ def select_todo_task(
|
|
94
119
|
|
95
120
|
|
96
121
|
def load_todo_list(todo_file_path: str) -> list[TodoTaskModel]:
|
122
|
+
"""
|
123
|
+
Load a list of todo tasks from a todo.txt file.
|
124
|
+
|
125
|
+
Args:
|
126
|
+
todo_file_path (str): The path to the todo.txt file.
|
127
|
+
|
128
|
+
Returns:
|
129
|
+
list[TodoTaskModel]: A sorted list of todo tasks.
|
130
|
+
"""
|
97
131
|
todo_lines = read_file(todo_file_path).strip().split("\n")
|
98
132
|
todo_list: list[TodoTaskModel] = []
|
99
133
|
for todo_line in todo_lines:
|
@@ -114,6 +148,13 @@ def load_todo_list(todo_file_path: str) -> list[TodoTaskModel]:
|
|
114
148
|
|
115
149
|
|
116
150
|
def save_todo_list(todo_file_path: str, todo_list: list[TodoTaskModel]):
|
151
|
+
"""
|
152
|
+
Save a list of todo tasks to a todo.txt file.
|
153
|
+
|
154
|
+
Args:
|
155
|
+
todo_file_path (str): The path to the todo.txt file.
|
156
|
+
todo_list (list[TodoTaskModel]): The list of todo tasks to save.
|
157
|
+
"""
|
117
158
|
write_file(
|
118
159
|
todo_file_path, [todo_task_to_line(todo_task) for todo_task in todo_list]
|
119
160
|
)
|
@@ -159,14 +200,30 @@ def line_to_todo_task(line: str) -> TodoTaskModel:
|
|
159
200
|
|
160
201
|
|
161
202
|
def _parse_date(date_str: str | None) -> datetime.date | None:
|
162
|
-
"""
|
203
|
+
"""
|
204
|
+
Parses a date string in the format YYYY-MM-DD.
|
205
|
+
|
206
|
+
Args:
|
207
|
+
date_str (str | None): The date string to parse.
|
208
|
+
|
209
|
+
Returns:
|
210
|
+
datetime.date | None: The parsed date object, or None if the input is None.
|
211
|
+
"""
|
163
212
|
if date_str:
|
164
213
|
return datetime.date.fromisoformat(date_str)
|
165
214
|
return None
|
166
215
|
|
167
216
|
|
168
217
|
def todo_task_to_line(task: TodoTaskModel) -> str:
|
169
|
-
"""
|
218
|
+
"""
|
219
|
+
Converts a TodoTask instance back into a todo.txt formatted line.
|
220
|
+
|
221
|
+
Args:
|
222
|
+
task (TodoTaskModel): The todo task instance.
|
223
|
+
|
224
|
+
Returns:
|
225
|
+
str: The todo.txt formatted line.
|
226
|
+
"""
|
170
227
|
parts = []
|
171
228
|
# Add completion mark if task is completed
|
172
229
|
if task.completed:
|
@@ -195,6 +252,16 @@ def todo_task_to_line(task: TodoTaskModel) -> str:
|
|
195
252
|
|
196
253
|
|
197
254
|
def get_visual_todo_list(todo_list: list[TodoTaskModel], filter: str) -> str:
|
255
|
+
"""
|
256
|
+
Generate a visual representation of a filtered todo list.
|
257
|
+
|
258
|
+
Args:
|
259
|
+
todo_list (list[TodoTaskModel]): The list of todo tasks.
|
260
|
+
filter (str): The filter string in todo.txt format.
|
261
|
+
|
262
|
+
Returns:
|
263
|
+
str: A formatted string representing the filtered todo list.
|
264
|
+
"""
|
198
265
|
todo_filter = line_to_todo_task(filter)
|
199
266
|
filtered_todo_list = []
|
200
267
|
for todo_task in todo_list:
|
@@ -249,6 +316,17 @@ def get_visual_todo_list(todo_list: list[TodoTaskModel], filter: str) -> str:
|
|
249
316
|
def get_visual_todo_header(
|
250
317
|
terminal_width: int, max_desc_length: int, max_additional_info_length: int
|
251
318
|
) -> str:
|
319
|
+
"""
|
320
|
+
Generate the header string for the visual todo list.
|
321
|
+
|
322
|
+
Args:
|
323
|
+
terminal_width (int): The width of the terminal.
|
324
|
+
max_desc_length (int): The maximum length of the description column.
|
325
|
+
max_additional_info_length (int): The maximum length of the additional info column.
|
326
|
+
|
327
|
+
Returns:
|
328
|
+
str: The formatted header string.
|
329
|
+
"""
|
252
330
|
priority_caption = "".ljust(_PRIORITY_WIDTH)
|
253
331
|
completed_caption = "".ljust(_COMPLETED_WIDTH)
|
254
332
|
completed_at_caption = "COMPLETED AT".rjust(_COMPLETED_AT_WIDTH)
|
@@ -276,6 +354,18 @@ def get_visual_todo_line(
|
|
276
354
|
max_additional_info_length: int,
|
277
355
|
todo_task: TodoTaskModel,
|
278
356
|
) -> str:
|
357
|
+
"""
|
358
|
+
Generate a single line string for a todo task in the visual todo list.
|
359
|
+
|
360
|
+
Args:
|
361
|
+
terminal_width (int): The width of the terminal.
|
362
|
+
max_desc_length (int): The maximum length of the description column.
|
363
|
+
max_additional_info_length (int): The maximum length of the additional info column.
|
364
|
+
todo_task (TodoTaskModel): The todo task to format.
|
365
|
+
|
366
|
+
Returns:
|
367
|
+
str: The formatted line string for the todo task.
|
368
|
+
"""
|
279
369
|
completed = "[x]" if todo_task.completed else "[ ]"
|
280
370
|
priority = " " if todo_task.priority is None else f"({todo_task.priority})"
|
281
371
|
completed_at = stylize_yellow(_date_to_str(todo_task.completion_date))
|
@@ -325,6 +415,23 @@ def _get_line_str(
|
|
325
415
|
description: str,
|
326
416
|
additional_info: str,
|
327
417
|
):
|
418
|
+
"""
|
419
|
+
Helper function to format a line string based on terminal width.
|
420
|
+
|
421
|
+
Args:
|
422
|
+
terminal_width (int): The width of the terminal.
|
423
|
+
description_width (int): The width of the description column.
|
424
|
+
additional_info_width (int): The width of the additional info column.
|
425
|
+
priority (str): The formatted priority string.
|
426
|
+
completed (str): The formatted completed status string.
|
427
|
+
completed_at (str): The formatted completed at date string.
|
428
|
+
created_at (str): The formatted created at date string.
|
429
|
+
description (str): The formatted description string.
|
430
|
+
additional_info (str): The formatted additional info string.
|
431
|
+
|
432
|
+
Returns:
|
433
|
+
str: The formatted line string.
|
434
|
+
"""
|
328
435
|
gap = "".ljust(_GAP_WIDTH)
|
329
436
|
if terminal_width >= _get_minimum_width(
|
330
437
|
[
|
@@ -368,6 +475,15 @@ def _get_line_str(
|
|
368
475
|
|
369
476
|
|
370
477
|
def _get_minimum_width(field_widths: list[int]) -> int:
|
478
|
+
"""
|
479
|
+
Helper function to calculate the minimum width required for a list of fields.
|
480
|
+
|
481
|
+
Args:
|
482
|
+
field_widths (list[int]): A list of widths for each field.
|
483
|
+
|
484
|
+
Returns:
|
485
|
+
int: The minimum total width required.
|
486
|
+
"""
|
371
487
|
gap_width = _GAP_WIDTH * (len(field_widths) - 1)
|
372
488
|
return sum(field_width for field_width in field_widths) + gap_width
|
373
489
|
|
@@ -375,6 +491,16 @@ def _get_minimum_width(field_widths: list[int]) -> int:
|
|
375
491
|
def get_visual_todo_card(
|
376
492
|
todo_task: TodoTaskModel, log_work_list: list[dict[str, str]]
|
377
493
|
) -> str:
|
494
|
+
"""
|
495
|
+
Generate a visual card representation of a todo task with log work.
|
496
|
+
|
497
|
+
Args:
|
498
|
+
todo_task (TodoTaskModel): The todo task to display.
|
499
|
+
log_work_list (list[dict[str, str]]): A list of log work entries for the task.
|
500
|
+
|
501
|
+
Returns:
|
502
|
+
str: A formatted string representing the todo task card.
|
503
|
+
"""
|
378
504
|
description = todo_task.description
|
379
505
|
status = "TODO"
|
380
506
|
if todo_task.completed:
|
@@ -420,19 +546,46 @@ def get_visual_todo_card(
|
|
420
546
|
|
421
547
|
|
422
548
|
def _date_to_str(date: datetime.date | None) -> str:
|
549
|
+
"""
|
550
|
+
Helper function to format a date object as a string.
|
551
|
+
|
552
|
+
Args:
|
553
|
+
date (datetime.date | None): The date object to format.
|
554
|
+
|
555
|
+
Returns:
|
556
|
+
str: The formatted date string, or an empty string if the input is None.
|
557
|
+
"""
|
423
558
|
if date is None:
|
424
559
|
return "".ljust(14)
|
425
560
|
return date.strftime("%a %Y-%m-%d")
|
426
561
|
|
427
562
|
|
428
563
|
def add_duration(duration1: str, duration2: str) -> str:
|
564
|
+
"""
|
565
|
+
Add two duration strings.
|
566
|
+
|
567
|
+
Args:
|
568
|
+
duration1 (str): The first duration string.
|
569
|
+
duration2 (str): The second duration string.
|
570
|
+
|
571
|
+
Returns:
|
572
|
+
str: The sum of the two durations as a formatted string.
|
573
|
+
"""
|
429
574
|
total_seconds = parse_duration(duration1) + parse_duration(duration2)
|
430
575
|
# Format and return the result
|
431
576
|
return _format_duration(total_seconds)
|
432
577
|
|
433
578
|
|
434
579
|
def parse_duration(duration: str) -> int:
|
435
|
-
"""
|
580
|
+
"""
|
581
|
+
Parse a duration string into total seconds.
|
582
|
+
|
583
|
+
Args:
|
584
|
+
duration (str): The duration string to parse.
|
585
|
+
|
586
|
+
Returns:
|
587
|
+
int: The total duration in seconds.
|
588
|
+
"""
|
436
589
|
units = {"M": 2592000, "w": 604800, "d": 86400, "h": 3600, "m": 60, "s": 1}
|
437
590
|
total_seconds = 0
|
438
591
|
match = re.findall(r"(\d+)([Mwdhms])", duration)
|
@@ -442,7 +595,15 @@ def parse_duration(duration: str) -> int:
|
|
442
595
|
|
443
596
|
|
444
597
|
def _format_duration(total_seconds: int) -> str:
|
445
|
-
"""
|
598
|
+
"""
|
599
|
+
Format total seconds into a duration string.
|
600
|
+
|
601
|
+
Args:
|
602
|
+
total_seconds (int): The total duration in seconds.
|
603
|
+
|
604
|
+
Returns:
|
605
|
+
str: The formatted duration string.
|
606
|
+
"""
|
446
607
|
units = [
|
447
608
|
("w", 604800), # 7 days in a week
|
448
609
|
("d", 86400), # 24 hours in a day
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: zrb
|
3
|
-
Version: 1.5.
|
3
|
+
Version: 1.5.12
|
4
4
|
Summary: Your Automation Powerhouse
|
5
5
|
Home-page: https://github.com/state-alchemists/zrb
|
6
6
|
License: AGPL-3.0-or-later
|
@@ -22,11 +22,11 @@ Requires-Dist: chromadb (>=0.6.3,<0.7.0) ; extra == "rag" or extra == "all"
|
|
22
22
|
Requires-Dist: fastapi[standard] (>=0.115.12,<0.116.0)
|
23
23
|
Requires-Dist: isort (>=6.0.1,<6.1.0)
|
24
24
|
Requires-Dist: libcst (>=1.7.0,<2.0.0)
|
25
|
-
Requires-Dist: openai (>=1.
|
25
|
+
Requires-Dist: openai (>=1.76.0,<2.0.0) ; extra == "rag" or extra == "all"
|
26
26
|
Requires-Dist: pdfplumber (>=0.11.6,<0.12.0) ; extra == "rag" or extra == "all"
|
27
27
|
Requires-Dist: playwright (>=1.51.0,<2.0.0) ; extra == "playwright" or extra == "all"
|
28
28
|
Requires-Dist: psutil (>=7.0.0,<8.0.0)
|
29
|
-
Requires-Dist: pydantic-ai (>=0.1.
|
29
|
+
Requires-Dist: pydantic-ai (>=0.1.6,<0.2.0)
|
30
30
|
Requires-Dist: python-dotenv (>=1.1.0,<2.0.0)
|
31
31
|
Requires-Dist: python-jose[cryptography] (>=3.4.0,<4.0.0)
|
32
32
|
Requires-Dist: requests (>=2.32.3,<3.0.0)
|
@@ -9,13 +9,15 @@ zrb/builtin/git_subtree.py,sha256=7BKwOkVTWDrR0DXXQ4iJyHqeR6sV5VYRt8y_rEB0EHg,35
|
|
9
9
|
zrb/builtin/group.py,sha256=-phJfVpTX3_gUwS1u8-RbZUHe-X41kxDBSmrVh4rq8E,1682
|
10
10
|
zrb/builtin/llm/history.py,sha256=J_x1JMG-aUKlRUkrw2YTg-x7dJrbVABwCOl3A9IqAUc,3071
|
11
11
|
zrb/builtin/llm/input.py,sha256=Nw-26uTWp2QhUgKJcP_IMHmtk-b542CCSQ_vCOjhvhM,877
|
12
|
-
zrb/builtin/llm/llm_chat.py,sha256=
|
12
|
+
zrb/builtin/llm/llm_chat.py,sha256=NcsFNrM9ygmFTB7lW0xaaikSmCOQZcaW3G8iQzQS5eo,4224
|
13
13
|
zrb/builtin/llm/previous-session.js,sha256=xMKZvJoAbrwiyHS0OoPrWuaKxWYLoyR5sguePIoCjTY,816
|
14
|
+
zrb/builtin/llm/tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
14
15
|
zrb/builtin/llm/tool/api.py,sha256=yR9I0ZsI96OeQl9pgwORMASVuXsAL0a89D_iPS4C8Dc,1699
|
15
16
|
zrb/builtin/llm/tool/cli.py,sha256=_CNEmEc6K2Z0i9ppYeM7jGpqaEdT3uxaWQatmxP3jKE,858
|
16
17
|
zrb/builtin/llm/tool/file.py,sha256=ig4tZGYnGjE96U9KgOpbANmyAgFmTcQzym1wVAsZYRM,16620
|
17
18
|
zrb/builtin/llm/tool/rag.py,sha256=45t0o88l7F62oq2P61NnC1hsZJ4h72dZsVQfcsOIUc8,7521
|
18
|
-
zrb/builtin/llm/tool/
|
19
|
+
zrb/builtin/llm/tool/sub_agent.py,sha256=7KaxWfFcT-3_fyqQyd4qA2ipzmVFG71iPzRl7wISM5M,4885
|
20
|
+
zrb/builtin/llm/tool/web.py,sha256=pXRLhcB_Y6z-2w4C4WezH8n-pg3PSMgt_bwn3aaqi6g,5479
|
19
21
|
zrb/builtin/md5.py,sha256=0pNlrfZA0wlZlHvFHLgyqN0JZJWGKQIF5oXxO44_OJk,949
|
20
22
|
zrb/builtin/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
23
|
zrb/builtin/project/add/fastapp/fastapp_input.py,sha256=MKlWR_LxWhM_DcULCtLfL_IjTxpDnDBkn9KIqNmajFs,310
|
@@ -210,7 +212,7 @@ zrb/callback/callback.py,sha256=hKefB_Jd1XGjPSLQdMKDsGLHPzEGO2dqrIArLl_EmD0,848
|
|
210
212
|
zrb/cmd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
211
213
|
zrb/cmd/cmd_result.py,sha256=L8bQJzWCpcYexIxHBNsXj2pT3BtLmWex0iJSMkvimOA,597
|
212
214
|
zrb/cmd/cmd_val.py,sha256=7Doowyg6BK3ISSGBLt-PmlhzaEkBjWWm51cED6fAUOQ,1014
|
213
|
-
zrb/config.py,sha256=
|
215
|
+
zrb/config.py,sha256=zUgyrB5mTYchRFh6qwCeuoLjvz83PrNu-P6TGGZEwDI,3946
|
214
216
|
zrb/content_transformer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
215
217
|
zrb/content_transformer/any_content_transformer.py,sha256=v8ZUbcix1GGeDQwB6OKX_1TjpY__ksxWVeqibwa_iZA,850
|
216
218
|
zrb/content_transformer/content_transformer.py,sha256=STl77wW-I69QaGzCXjvkppngYFLufow8ybPLSyAvlHs,2404
|
@@ -239,7 +241,7 @@ zrb/input/option_input.py,sha256=TQB82ko5odgzkULEizBZi0e9TIHEbIgvdP0AR3RhA74,213
|
|
239
241
|
zrb/input/password_input.py,sha256=szBojWxSP9QJecgsgA87OIYwQrY2AQ3USIKdDZY6snU,1465
|
240
242
|
zrb/input/str_input.py,sha256=NevZHX9rf1g8eMatPyy-kUX3DglrVAQpzvVpKAzf7bA,81
|
241
243
|
zrb/input/text_input.py,sha256=shvVbc2U8Is36h23M5lcW8IEwKc9FR-4uEPZZroj3rU,3377
|
242
|
-
zrb/llm_config.py,sha256=
|
244
|
+
zrb/llm_config.py,sha256=2mcPAdulTUyRS0H-RG71jULQxWY2jfX4VML3LsrOY_o,9579
|
243
245
|
zrb/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
244
246
|
zrb/runner/cli.py,sha256=0mT0oO_yEhc8N4nYCJNujhgLjVykZ0B-kAOFXyAvAqM,6672
|
245
247
|
zrb/runner/common_util.py,sha256=0zhZn1Jdmr194_nsL5_L-Kn9-_NDpMTI2z6_LXUQJ-U,1369
|
@@ -304,23 +306,23 @@ zrb/task/base/execution.py,sha256=lB6cfivk-EM6sZSaPjYs_ufb7jb-A2jLJNhBupwBFgI,11
|
|
304
306
|
zrb/task/base/lifecycle.py,sha256=YIugyqRmEKMnc9MTCDEZr9jVhie3Kwt7LTMtAVAN9Ks,7278
|
305
307
|
zrb/task/base/monitoring.py,sha256=UAOEcPiYNtZR4FFxzWCosuOEFE_P3c4GT5vAhQmohqI,5663
|
306
308
|
zrb/task/base/operators.py,sha256=uAMFqpZJsPnCrojgOl1FUDXTS15mtOa_IqiAXltyYRU,1576
|
307
|
-
zrb/task/base_task.py,sha256=
|
309
|
+
zrb/task/base_task.py,sha256=LRt2CrGf8QJWfFbBG_Bjmpm9hL-mzssemu0s8rEc0tE,10121
|
308
310
|
zrb/task/base_trigger.py,sha256=jC722rDvodaBLeNaFghkTyv1u0QXrK6BLZUUqcmBJ7Q,4581
|
309
311
|
zrb/task/cmd_task.py,sha256=xFAdOvLDK9Qaye40T_lG3K6AIKgbPAMHk_3GIAYeJAM,10750
|
310
312
|
zrb/task/http_check.py,sha256=Gf5rOB2Se2EdizuN9rp65HpGmfZkGc-clIAlHmPVehs,2565
|
311
313
|
zrb/task/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
312
|
-
zrb/task/llm/agent.py,sha256=
|
314
|
+
zrb/task/llm/agent.py,sha256=CvnM8y4dxterdM3dpa1G7iu099NJ-CT4NPiAOZp_ymI,4917
|
313
315
|
zrb/task/llm/config.py,sha256=fXasnGb_DVTJIeY--HZ8bf1jd7iCUNttfUDJB5PvHRk,3071
|
314
|
-
zrb/task/llm/context.py,sha256=
|
315
|
-
zrb/task/llm/context_enrichment.py,sha256=
|
316
|
+
zrb/task/llm/context.py,sha256=s313jXooOp8ht7j2sc3-d8xyW7oWs9bFv4KEyjicwys,3893
|
317
|
+
zrb/task/llm/context_enrichment.py,sha256=NdeXMxGAFUR8UL064mjdiOCGQvK2o2zt5aSV-3rUhqc,5937
|
316
318
|
zrb/task/llm/error.py,sha256=YOwnEdFMtqOlaiA83tDHpC6uh2_9r5NeS-inrlb5a8E,3622
|
317
319
|
zrb/task/llm/history.py,sha256=LnrJdXLyo2qz-bNCwLorhoqGmgSiPTUU0bzY63w67-E,9257
|
318
|
-
zrb/task/llm/history_summarization.py,sha256=
|
320
|
+
zrb/task/llm/history_summarization.py,sha256=etfBCA9S_7gXeYwlT-HC-o5THgVAT4KR0M8ucJjdhaU,6200
|
319
321
|
zrb/task/llm/print_node.py,sha256=Dkb0xFyEXpNRKFRCM4Md0lfg6K3nI0t8yH3Abh20PjE,4430
|
320
|
-
zrb/task/llm/prompt.py,sha256=
|
321
|
-
zrb/task/llm/tool_wrapper.py,sha256=
|
322
|
+
zrb/task/llm/prompt.py,sha256=0uN96mPiq5o28Bz_f7wWmOD6-DJYD-nc_N5RovYz3Js,4719
|
323
|
+
zrb/task/llm/tool_wrapper.py,sha256=UUO5MnbFPlHuiVRPdke2ylKbaftjPDF06VNVuWcJ5zo,6326
|
322
324
|
zrb/task/llm/typing.py,sha256=c8VAuPBw_4A3DxfYdydkgedaP-LU61W9_wj3m3CAX1E,58
|
323
|
-
zrb/task/llm_task.py,sha256=
|
325
|
+
zrb/task/llm_task.py,sha256=hMo4wjKFvq8xv4eaxd2I_vXSBJLzL05HvaZ7mdo0pAg,14997
|
324
326
|
zrb/task/make_task.py,sha256=PD3b_aYazthS8LHeJsLAhwKDEgdurQZpymJDKeN60u0,2265
|
325
327
|
zrb/task/rsync_task.py,sha256=GSL9144bmp6F0EckT6m-2a1xG25AzrrWYzH4k3SVUKM,6370
|
326
328
|
zrb/task/scaffolder.py,sha256=rME18w1HJUHXgi9eTYXx_T2G4JdqDYzBoNOkdOOo5-o,6806
|
@@ -330,38 +332,38 @@ zrb/task/tcp_check.py,sha256=P_QgGqwd5dXDaud3oQRxe_WuxyxG4s7CTY2wDk9Qcu0,2511
|
|
330
332
|
zrb/task_status/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
331
333
|
zrb/task_status/task_status.py,sha256=blZ8dxg9g_8MuViq-t7yJRLoE7yGUf5srgHf-PCsXNc,3069
|
332
334
|
zrb/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
333
|
-
zrb/util/attr.py,sha256=
|
335
|
+
zrb/util/attr.py,sha256=5GlYSmVAzbcSFjNDXiqqHqNMR6NWjJ6bUHZXdE35mj8,5359
|
334
336
|
zrb/util/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
335
|
-
zrb/util/cli/style.py,sha256=
|
336
|
-
zrb/util/cli/subcommand.py,sha256=
|
337
|
+
zrb/util/cli/style.py,sha256=D_548KG1gXEirQGdkAVTc81vBdCeInXtnG1gV1yabBA,6655
|
338
|
+
zrb/util/cli/subcommand.py,sha256=umTZIlrL-9g-qc_eRRgdaQgK-whvXK1roFfvnbuY7NQ,1753
|
337
339
|
zrb/util/cmd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
338
|
-
zrb/util/cmd/command.py,sha256=
|
339
|
-
zrb/util/cmd/remote.py,sha256=
|
340
|
+
zrb/util/cmd/command.py,sha256=9kF3oUfJVsCMZ6KAEwBz6wdE5E4qC3e_AD-u7ZNTj3A,4552
|
341
|
+
zrb/util/cmd/remote.py,sha256=NGQq2_IrUMDoZz3qmcgtnNYVGjMHaBKQpZxImf0yfXA,1296
|
340
342
|
zrb/util/codemod/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
341
|
-
zrb/util/codemod/modification_mode.py,sha256=
|
342
|
-
zrb/util/codemod/modify_class.py,sha256=
|
343
|
-
zrb/util/codemod/modify_class_parent.py,sha256=
|
344
|
-
zrb/util/codemod/modify_class_property.py,sha256=
|
345
|
-
zrb/util/codemod/modify_dict.py,sha256=
|
346
|
-
zrb/util/codemod/modify_function.py,sha256=
|
347
|
-
zrb/util/codemod/modify_function_call.py,sha256=
|
348
|
-
zrb/util/codemod/modify_method.py,sha256=
|
349
|
-
zrb/util/codemod/modify_module.py,sha256=
|
350
|
-
zrb/util/cron.py,sha256=
|
351
|
-
zrb/util/file.py,sha256=
|
352
|
-
zrb/util/git.py,sha256=
|
353
|
-
zrb/util/git_subtree.py,sha256=
|
354
|
-
zrb/util/group.py,sha256=
|
355
|
-
zrb/util/load.py,sha256=
|
356
|
-
zrb/util/run.py,sha256=
|
343
|
+
zrb/util/codemod/modification_mode.py,sha256=z_4U2gjskEHkFm6UtBe_Wbm-erufYaXgPbdCQ6CZMlw,128
|
344
|
+
zrb/util/codemod/modify_class.py,sha256=eTmxvKp-LSsMeMIsKPvdcmwqK128x1EjPT0KTetDpGk,4580
|
345
|
+
zrb/util/codemod/modify_class_parent.py,sha256=UX2ixG93JD9YXAXBy36aFoUprOc3mR4embHHuuoCe1I,4778
|
346
|
+
zrb/util/codemod/modify_class_property.py,sha256=2IPp0ir5DSWxiVp6qtm0_9gZvKxUaBhIH0IzV5sEgsU,7222
|
347
|
+
zrb/util/codemod/modify_dict.py,sha256=GqOHN4VIPauazYitplFD-z4--Bme_E4nBk0Tj8gTg3g,5154
|
348
|
+
zrb/util/codemod/modify_function.py,sha256=dScd-2cwukc3ET3_dHVXOwdHQsXXQQSATkux4RuEcbE,4849
|
349
|
+
zrb/util/codemod/modify_function_call.py,sha256=wbyoRRsM4V9fPYkT5kHN0zpBetpRDq2S1230epeyyFw,5003
|
350
|
+
zrb/util/codemod/modify_method.py,sha256=5fioXjqNQmrf4CV2qlTZHpViF9PMnNer4FvuKam7byo,6344
|
351
|
+
zrb/util/codemod/modify_module.py,sha256=2mzi_NxJ-kNFo5G0U_Rqb3JoYQl1s6Izt7b_wAl10F0,715
|
352
|
+
zrb/util/cron.py,sha256=UWqqhhM7DDTPx6wjCIdBndnVh3NRu-sdKazp8aZkXh8,3833
|
353
|
+
zrb/util/file.py,sha256=Y5pRJxkpshyELxsv8qw_gp1qM5OXgeDwYXqt7Y6Lqu8,2242
|
354
|
+
zrb/util/git.py,sha256=gS_Y9sQgJbY0PfgSQiowLvV3Nf0y9C8nT3j6z6oEsG8,8186
|
355
|
+
zrb/util/git_subtree.py,sha256=Dy12p0VxCdyepv0cvHwhYq9l8PneI7XG0vih0xZtGBE,4603
|
356
|
+
zrb/util/group.py,sha256=T82yr3qg9I5k10VPXkMyrIRIqyfzadSH813bqzwKEPI,4718
|
357
|
+
zrb/util/load.py,sha256=DK0KYSlu48HCoGPqnW1IxnE3pHrZSPCstfz8Fjyqqv8,2140
|
358
|
+
zrb/util/run.py,sha256=FPRCCvl5g6GuDvHTkaV95CFDlqxQ-5FZb2-F-Jz1fnI,485
|
357
359
|
zrb/util/string/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
358
|
-
zrb/util/string/conversion.py,sha256=
|
359
|
-
zrb/util/string/format.py,sha256=
|
360
|
-
zrb/util/string/name.py,sha256=
|
361
|
-
zrb/util/todo.py,sha256=
|
360
|
+
zrb/util/string/conversion.py,sha256=sMmstzbrNgLvWAQukqoXz45JtsNpJrniudAtzJaQlYw,6240
|
361
|
+
zrb/util/string/format.py,sha256=52kLmW2o8AzL-Cm2l8pXBNeELm8MRjRIppeQ6IetWio,1225
|
362
|
+
zrb/util/string/name.py,sha256=SXEfxJ1-tDOzHqmSV8kvepRVyMqs2XdV_vyoh_9XUu0,1584
|
363
|
+
zrb/util/todo.py,sha256=VGISej2KQZERpornK-8X7bysp4JydMrMUTnG8B0-liI,20708
|
362
364
|
zrb/xcom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
363
365
|
zrb/xcom/xcom.py,sha256=o79rxR9wphnShrcIushA0Qt71d_p3ZTxjNf7x9hJB78,1571
|
364
|
-
zrb-1.5.
|
365
|
-
zrb-1.5.
|
366
|
-
zrb-1.5.
|
367
|
-
zrb-1.5.
|
366
|
+
zrb-1.5.12.dist-info/METADATA,sha256=nURPwSnNMIe-L9PXzeqj-YzRpYVtck7At7ICJjSDzaM,8469
|
367
|
+
zrb-1.5.12.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
368
|
+
zrb-1.5.12.dist-info/entry_points.txt,sha256=-Pg3ElWPfnaSM-XvXqCxEAa-wfVI6BEgcs386s8C8v8,46
|
369
|
+
zrb-1.5.12.dist-info/RECORD,,
|
File without changes
|
File without changes
|