zrb 1.21.28__py3-none-any.whl → 1.21.37__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.

Potentially problematic release.


This version of zrb might be problematic. Click here for more details.

Files changed (36) hide show
  1. zrb/builtin/llm/chat_completion.py +199 -222
  2. zrb/builtin/llm/chat_session.py +1 -1
  3. zrb/builtin/llm/chat_session_cmd.py +28 -11
  4. zrb/builtin/llm/chat_trigger.py +3 -4
  5. zrb/builtin/llm/tool/cli.py +45 -14
  6. zrb/builtin/llm/tool/code.py +5 -1
  7. zrb/builtin/llm/tool/file.py +17 -0
  8. zrb/builtin/llm/tool/note.py +7 -7
  9. zrb/builtin/llm/tool/search/__init__.py +1 -0
  10. zrb/builtin/llm/tool/search/brave.py +66 -0
  11. zrb/builtin/llm/tool/search/searxng.py +61 -0
  12. zrb/builtin/llm/tool/search/serpapi.py +61 -0
  13. zrb/builtin/llm/tool/sub_agent.py +4 -1
  14. zrb/builtin/llm/tool/web.py +17 -72
  15. zrb/cmd/cmd_result.py +2 -1
  16. zrb/config/config.py +5 -1
  17. zrb/config/default_prompt/interactive_system_prompt.md +15 -12
  18. zrb/config/default_prompt/system_prompt.md +16 -18
  19. zrb/config/llm_rate_limitter.py +36 -13
  20. zrb/input/option_input.py +30 -2
  21. zrb/task/cmd_task.py +3 -0
  22. zrb/task/llm/agent_runner.py +6 -2
  23. zrb/task/llm/history_list.py +13 -0
  24. zrb/task/llm/history_processor.py +4 -13
  25. zrb/task/llm/print_node.py +64 -23
  26. zrb/task/llm/tool_confirmation_completer.py +41 -0
  27. zrb/task/llm/tool_wrapper.py +6 -4
  28. zrb/task/llm/workflow.py +41 -14
  29. zrb/task/llm_task.py +4 -5
  30. zrb/task/rsync_task.py +2 -0
  31. zrb/util/cmd/command.py +33 -10
  32. zrb/util/match.py +71 -0
  33. {zrb-1.21.28.dist-info → zrb-1.21.37.dist-info}/METADATA +1 -1
  34. {zrb-1.21.28.dist-info → zrb-1.21.37.dist-info}/RECORD +36 -29
  35. {zrb-1.21.28.dist-info → zrb-1.21.37.dist-info}/WHEEL +0 -0
  36. {zrb-1.21.28.dist-info → zrb-1.21.37.dist-info}/entry_points.txt +0 -0
zrb/util/cmd/command.py CHANGED
@@ -5,7 +5,7 @@ import signal
5
5
  import sys
6
6
  from collections import deque
7
7
  from collections.abc import Callable
8
- from typing import TextIO
8
+ from typing import Any, TextIO
9
9
 
10
10
  import psutil
11
11
 
@@ -62,6 +62,8 @@ async def run_command(
62
62
  register_pid_method: Callable[[int], None] | None = None,
63
63
  max_output_line: int = 1000,
64
64
  max_error_line: int = 1000,
65
+ max_display_line: int | None = None,
66
+ timeout: int = 3600,
65
67
  is_interactive: bool = False,
66
68
  ) -> tuple[CmdResult, int]:
67
69
  """
@@ -77,6 +79,8 @@ async def run_command(
77
79
  actual_print_method = print_method if print_method is not None else print
78
80
  if cwd is None:
79
81
  cwd = os.getcwd()
82
+ if max_display_line is None:
83
+ max_display_line = max(max_output_line, max_error_line)
80
84
  # While environment variables alone weren't the fix, they are still
81
85
  # good practice for encouraging simpler output from tools.
82
86
  child_env = (env_map or os.environ).copy()
@@ -95,17 +99,33 @@ async def run_command(
95
99
  if register_pid_method is not None:
96
100
  register_pid_method(cmd_process.pid)
97
101
  # Use the new, simple, and correct stream reader.
102
+ display_lines = deque(maxlen=max_display_line if max_display_line > 0 else 0)
98
103
  stdout_task = asyncio.create_task(
99
- __read_stream(cmd_process.stdout, actual_print_method, max_output_line)
104
+ __read_stream(
105
+ cmd_process.stdout, actual_print_method, max_output_line, display_lines
106
+ )
100
107
  )
101
108
  stderr_task = asyncio.create_task(
102
- __read_stream(cmd_process.stderr, actual_print_method, max_error_line)
109
+ __read_stream(
110
+ cmd_process.stderr, actual_print_method, max_error_line, display_lines
111
+ )
112
+ )
113
+ timeout_task = (
114
+ asyncio.create_task(asyncio.sleep(timeout)) if timeout and timeout > 0 else None
103
115
  )
104
116
  try:
105
- return_code = await cmd_process.wait()
117
+ wait_task = asyncio.create_task(cmd_process.wait())
118
+ done, pending = await asyncio.wait(
119
+ {wait_task, timeout_task} if timeout_task else {wait_task},
120
+ return_when=asyncio.FIRST_COMPLETED,
121
+ )
122
+ if timeout_task and timeout_task in done:
123
+ raise asyncio.TimeoutError()
124
+ return_code = wait_task.result()
106
125
  stdout, stderr = await asyncio.gather(stdout_task, stderr_task)
107
- return CmdResult(stdout, stderr), return_code
108
- except (KeyboardInterrupt, asyncio.CancelledError):
126
+ display = "\r\n".join(display_lines)
127
+ return CmdResult(stdout, stderr, display=display), return_code
128
+ except (KeyboardInterrupt, asyncio.CancelledError, asyncio.TimeoutError):
109
129
  try:
110
130
  os.killpg(cmd_process.pid, signal.SIGINT)
111
131
  await asyncio.wait_for(cmd_process.wait(), timeout=2.0)
@@ -133,13 +153,14 @@ def __get_cmd_stdin(is_interactive: bool) -> int | TextIO:
133
153
  async def __read_stream(
134
154
  stream: asyncio.StreamReader,
135
155
  print_method: Callable[..., None],
136
- max_lines: int,
156
+ max_line: int,
157
+ display_queue: deque[Any],
137
158
  ) -> str:
138
159
  """
139
160
  Reads from the stream using the robust `readline()` and correctly
140
161
  interprets carriage returns (`\r`) as distinct print events.
141
162
  """
142
- captured_lines = deque(maxlen=max_lines if max_lines > 0 else 0)
163
+ captured_lines = deque(maxlen=max_line if max_line > 0 else 0)
143
164
  while True:
144
165
  try:
145
166
  line_bytes = await stream.readline()
@@ -149,8 +170,9 @@ async def __read_stream(
149
170
  # Safety valve for the memory limit.
150
171
  error_msg = "[ERROR] A single line of output was too long to process."
151
172
  print_method(error_msg)
152
- if max_lines > 0:
173
+ if max_line > 0:
153
174
  captured_lines.append(error_msg)
175
+ display_queue.append(error_msg)
154
176
  break
155
177
  except (KeyboardInterrupt, asyncio.CancelledError):
156
178
  raise
@@ -165,8 +187,9 @@ async def __read_stream(
165
187
  print_method(clean_part, end="\r\n")
166
188
  except Exception:
167
189
  print_method(clean_part)
168
- if max_lines > 0:
190
+ if max_line > 0:
169
191
  captured_lines.append(clean_part)
192
+ display_queue.append(clean_part)
170
193
  return "\r\n".join(captured_lines)
171
194
 
172
195
 
zrb/util/match.py ADDED
@@ -0,0 +1,71 @@
1
+ import os
2
+ import re
3
+
4
+
5
+ def fuzzy_match(text: str, pattern: str) -> tuple[bool, float]:
6
+ """
7
+ Match text against a pattern using a fuzzy search algorithm similar to VSCode's Ctrl+P.
8
+
9
+ The pattern is split into tokens by whitespace and path separators.
10
+ Each token must be found in the text (in order).
11
+
12
+ Args:
13
+ text: The string to search in.
14
+ pattern: The search pattern (e.g., "src main" or "util/io").
15
+
16
+ Returns:
17
+ A tuple (matched, score).
18
+ - matched: True if the pattern matches the text.
19
+ - score: A float representing the match quality (lower is better).
20
+ """
21
+ text_cmp = text.lower()
22
+ # Normalize pattern -> tokens split on path separators or whitespace
23
+ search_pattern = pattern.strip()
24
+ tokens = (
25
+ [t for t in re.split(rf"[{re.escape(os.path.sep)}\s]+", search_pattern) if t]
26
+ if search_pattern
27
+ else []
28
+ )
29
+ tokens = [t.lower() for t in tokens]
30
+ if not tokens:
31
+ return True, 0.0
32
+ last_pos = 0
33
+ score = 0.0
34
+ for token in tokens:
35
+ # try contiguous substring search first
36
+ idx = text_cmp.find(token, last_pos)
37
+ if idx != -1:
38
+ # good match: reward contiguous early matches
39
+ score += idx # smaller idx preferred
40
+ last_pos = idx + len(token)
41
+ else:
42
+ # fallback to subsequence matching
43
+ pos = _find_subsequence_pos(text_cmp, token, last_pos)
44
+ if pos is None:
45
+ return False, 0.0
46
+
47
+ # subsequence match is less preferred than contiguous substring
48
+ score += pos + 0.5 * len(token)
49
+ last_pos = pos + len(token)
50
+ # prefer shorter texts when score ties, so include length as tiebreaker
51
+ score += 0.01 * len(text)
52
+ return True, score
53
+
54
+
55
+ def _find_subsequence_pos(hay: str, needle: str, start: int = 0) -> int | None:
56
+ """
57
+ Try to locate needle in hay as a subsequence starting at `start`.
58
+ Returns the index of the first matched character of the subsequence or None if not match.
59
+ """
60
+ if not needle:
61
+ return start
62
+ i = start
63
+ j = 0
64
+ first_pos = None
65
+ while i < len(hay) and j < len(needle):
66
+ if hay[i] == needle[j]:
67
+ if first_pos is None:
68
+ first_pos = i
69
+ j += 1
70
+ i += 1
71
+ return first_pos if j == len(needle) else None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zrb
3
- Version: 1.21.28
3
+ Version: 1.21.37
4
4
  Summary: Your Automation Powerhouse
5
5
  License: AGPL-3.0-or-later
6
6
  Keywords: Automation,Task Runner,Code Generator,Monorepo,Low Code
@@ -10,23 +10,27 @@ zrb/builtin/group.py,sha256=W_IA_4414c8Wi8QazqcT6Gq6UftrKwy95yMF114EJtI,2677
10
10
  zrb/builtin/http.py,sha256=L6RE73c65wWwG5iHFN-tpOhyh56KsrgVskDd3c3YXtk,4246
11
11
  zrb/builtin/jwt.py,sha256=3M5uaQhJZbKQLjTUft1OwPz_JxtmK-xtkjxWjciOQho,2859
12
12
  zrb/builtin/llm/attachment.py,sha256=UwhOGtZY9Px9aebsKfTTw2_ZIpbsqx0XgoAonk6Ewkc,1344
13
- zrb/builtin/llm/chat_completion.py,sha256=ybOo-LZaoUjhEBd1N8R-ZpN7MCV88VHGG9Phs3yLi1w,11060
14
- zrb/builtin/llm/chat_session.py,sha256=TmXL7IkVT22blgWqG625qpr2_BnDMIm7ERYbR61BL4Q,9154
15
- zrb/builtin/llm/chat_session_cmd.py,sha256=lGiN-YNtv957wYuuF_mXV0opbRN61U9pyxVVq-_Gwv8,10842
16
- zrb/builtin/llm/chat_trigger.py,sha256=TZ4u5oQ4W7RGJB2yNrmGRfSEaBbMj4SXEGZHJrYjiJo,2672
13
+ zrb/builtin/llm/chat_completion.py,sha256=1afNkExKf-TGrbwwmcZHhSvA0zy4MG98-VEMRmD1NmY,10614
14
+ zrb/builtin/llm/chat_session.py,sha256=xhnU6Z_P4wLZfdA0lwHPftHkIOkTr60R3pw6-2v6cXY,9160
15
+ zrb/builtin/llm/chat_session_cmd.py,sha256=bR3FM4hY36fXgykTvncgu9ARsBfS_fzbfPBHHI0uIkw,11506
16
+ zrb/builtin/llm/chat_trigger.py,sha256=7Rdsi7TbA9cf3pqjLJosjHOfQ1bhsDDLVaL-5n_gOzk,2673
17
17
  zrb/builtin/llm/history.py,sha256=qNRYq6SlJH5iuzdra_FOJxevWXCDh5YMvN2qPNLjI8I,3099
18
18
  zrb/builtin/llm/input.py,sha256=Nw-26uTWp2QhUgKJcP_IMHmtk-b542CCSQ_vCOjhvhM,877
19
19
  zrb/builtin/llm/llm_ask.py,sha256=6fUbCFjgjFiTVf-88WJZ1RD5wgOzmsVEpD3dR16Jl_8,8598
20
20
  zrb/builtin/llm/previous-session.js,sha256=xMKZvJoAbrwiyHS0OoPrWuaKxWYLoyR5sguePIoCjTY,816
21
21
  zrb/builtin/llm/tool/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  zrb/builtin/llm/tool/api.py,sha256=ItGJLr_1vhmLcitfIKeVDrnJEWdsyqucDnQ7enIC8fQ,2394
23
- zrb/builtin/llm/tool/cli.py,sha256=iwQtiyPgd5RibUHEtO38c4KS6D4_oCdLqv_bZZqM160,1257
24
- zrb/builtin/llm/tool/code.py,sha256=GdMKCc3Z3bllly0tgtUXMoWdIA9WDjyNcoKftNksJTk,7699
25
- zrb/builtin/llm/tool/file.py,sha256=ktGWwGMl1nYtHFw1go10kuvKCbrtkjPkQ4bvDgWM5iY,19294
26
- zrb/builtin/llm/tool/note.py,sha256=HD7qRldvZUpfHW0i4Dev6UZba5j5r4Z3CugB5umL3Wk,2566
23
+ zrb/builtin/llm/tool/cli.py,sha256=0D_AC7ZWCnE7F1HcI9ON8Ks-LgRhNL_B1TLnuIh5ubM,2474
24
+ zrb/builtin/llm/tool/code.py,sha256=1sErE5tsticXGNhiE0bTjI21Zq6zHMgS2hVM6dsAcww,7916
25
+ zrb/builtin/llm/tool/file.py,sha256=pzaIWB64aaEuW2I3TyuZwpNQa_nMv-zqJzSfTfjT9GQ,20183
26
+ zrb/builtin/llm/tool/note.py,sha256=USDQe8F1ddQp5dhv2u35rUN9EfJQl5BaWJIs6Xg9ZZY,2597
27
27
  zrb/builtin/llm/tool/rag.py,sha256=lmoA42IWHcBOWTsWzYGklLs1YoiEldvu_Bi5bp6gbts,9439
28
- zrb/builtin/llm/tool/sub_agent.py,sha256=UNgsvZvSQ1b5ybB0nRzTiFCJpZG3g2RLj_nzjRZzXMY,5808
29
- zrb/builtin/llm/tool/web.py,sha256=x7iHaGRr71yU3qjfKsoyHvht5SB_S3kWPXX2qliyy6k,6278
28
+ zrb/builtin/llm/tool/search/__init__.py,sha256=wiMaie_IYt00fak-LrioC1qEZDs0SwYz4UWwidHfpFU,49
29
+ zrb/builtin/llm/tool/search/brave.py,sha256=ifuq3qX1rWZjJWw1afGD8VNkqED9Vwv5GJaJYwXmYdM,2271
30
+ zrb/builtin/llm/tool/search/searxng.py,sha256=kSp3HhhHu43eR8RvuzgF5f9EwSy0-uQQyWBYaYfZ82I,2092
31
+ zrb/builtin/llm/tool/search/serpapi.py,sha256=t5AM5PJ_j8VQQWHxFN61-WkDmcXVuvC1ZrFQ1tXZw1w,2101
32
+ zrb/builtin/llm/tool/sub_agent.py,sha256=dUF5yyFZFUHUswJl3L8ZDqjz80_47O_YUuHzEO2e6vM,5967
33
+ zrb/builtin/llm/tool/web.py,sha256=nBpCN9sZ66Ly6nzpnNnUunXN_OJqClmShGI-6saEWFk,4364
30
34
  zrb/builtin/md5.py,sha256=690RV2LbW7wQeTFxY-lmmqTSVEEZv3XZbjEUW1Q3XpE,1480
31
35
  zrb/builtin/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
36
  zrb/builtin/project/add/fastapp/fastapp_input.py,sha256=MKlWR_LxWhM_DcULCtLfL_IjTxpDnDBkn9KIqNmajFs,310
@@ -222,21 +226,21 @@ zrb/callback/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
222
226
  zrb/callback/any_callback.py,sha256=PqEJYX_RigXEmoPniSeZusZBZSLWEoVIHvHk8MZ0Mvg,253
223
227
  zrb/callback/callback.py,sha256=PFhCqzfxdk6IAthmXcZ13DokT62xtBzJr_ciLw6I8Zg,4030
224
228
  zrb/cmd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
225
- zrb/cmd/cmd_result.py,sha256=L8bQJzWCpcYexIxHBNsXj2pT3BtLmWex0iJSMkvimOA,597
229
+ zrb/cmd/cmd_result.py,sha256=5hGkWqHCBoh6_c9JgGw2mzAQ40vFy7wHvtRkTRKdJGY,642
226
230
  zrb/cmd/cmd_val.py,sha256=7Doowyg6BK3ISSGBLt-PmlhzaEkBjWWm51cED6fAUOQ,1014
227
- zrb/config/config.py,sha256=bqC_B9OpofNWJkWA11HvtWD-Ut0VeKseIso5OACU6v4,19889
231
+ zrb/config/config.py,sha256=z01roukj8xJXZJaAPjf2IZ1gDjzRajok4UBx1VqiMvU,20041
228
232
  zrb/config/default_prompt/file_extractor_system_prompt.md,sha256=cVqhI016-fKa8PKz2kIxQAC0hPExgMT2ks-rVlz4K60,3789
229
- zrb/config/default_prompt/interactive_system_prompt.md,sha256=UKQBWrihzIHHipIzK4MrdE0ivxBd6JItJ6_eF4Fdr1E,2301
233
+ zrb/config/default_prompt/interactive_system_prompt.md,sha256=LewDZo_zXMP6U_42c5egAY0Hb4KYp4Tbf3rUd9bPK8k,2659
230
234
  zrb/config/default_prompt/persona.md,sha256=GfUJ4-Mlf_Bm1YTzxFNkPkdVbAi06ZDVYh-iIma3NOs,253
231
235
  zrb/config/default_prompt/repo_extractor_system_prompt.md,sha256=lmfMMc9BLLATHAVMmSEeXr7xTeiF4FWv_AWYedgcbDE,3786
232
236
  zrb/config/default_prompt/repo_summarizer_system_prompt.md,sha256=-T_baTblam2XlW99e72jfgsrIBTjpABMBXRFI_7L6RA,1987
233
237
  zrb/config/default_prompt/summarization_prompt.md,sha256=0FI7GO9wkOOP7I_CrJPECtrqDHE_SMNr9aKKHC1GtPI,3633
234
- zrb/config/default_prompt/system_prompt.md,sha256=uyB50RrZBnxGXvBP32QVgdj40vnPECMbP56v48cP2pg,2635
238
+ zrb/config/default_prompt/system_prompt.md,sha256=ipPaECOM4KQj5u2bzQj1f1w0J78vuZuLnxF5orZWElo,2857
235
239
  zrb/config/llm_config.py,sha256=Nt7P0Q6bRpLbGi3IZ1WPeOxUsUUL438_8ufpML1WN28,12798
236
240
  zrb/config/llm_context/config.py,sha256=WdqoFxc-PSwNh9aeTWhHMNiQZotbdQ8WaVr3YcezGNo,6487
237
241
  zrb/config/llm_context/config_parser.py,sha256=PLfLfMgxPBj7Ryy-37gCZIHrweo1XiFQGnUqjvKXU_Y,1465
238
242
  zrb/config/llm_context/workflow.py,sha256=cHkUYBk2Mc35RBuma7Vn3QCNaHd95Ajqr1N4L43FFZs,2681
239
- zrb/config/llm_rate_limitter.py,sha256=sNi_fttwRKjMTCn1pBoqx-p2uI4wHSl8CAAP8poe94g,7012
243
+ zrb/config/llm_rate_limitter.py,sha256=KIE3H7ZE-jILu4FR35F1UeZLa-YJrooHP2UlBmeLXFg,8211
240
244
  zrb/config/web_auth_config.py,sha256=_PXatQTYh2mX9H3HSYSQKp13zm1RlLyVIoeIr6KYMQ8,6279
241
245
  zrb/content_transformer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
242
246
  zrb/content_transformer/any_content_transformer.py,sha256=v8ZUbcix1GGeDQwB6OKX_1TjpY__ksxWVeqibwa_iZA,850
@@ -262,7 +266,7 @@ zrb/input/base_input.py,sha256=HCTxBZwnK-gP-F7XQGDbyyZHvwYR0fwNICzqVUw5Cg8,4169
262
266
  zrb/input/bool_input.py,sha256=9ir8aTm8zaufrJ84_EerC5vOjyn4hHZ3BiLzFqPgPFM,1839
263
267
  zrb/input/float_input.py,sha256=8G9lJKLlb_Upk9m5pBF9JwqlAAiYJLrbIItLnyzPxpg,1475
264
268
  zrb/input/int_input.py,sha256=UhxCFYlZdJcgUSGGEkz301zOgRVpK0KDG_IxxWpQfMU,1457
265
- zrb/input/option_input.py,sha256=pG-7R5QboXRLyb4E63PXIUnhs5fHu2RCkGLBue46mmU,2687
269
+ zrb/input/option_input.py,sha256=9GPT3kqFzYPUO9O0N3e5GdFrQ3dTlghRPrng1uSfzFQ,3776
266
270
  zrb/input/password_input.py,sha256=szBojWxSP9QJecgsgA87OIYwQrY2AQ3USIKdDZY6snU,1465
267
271
  zrb/input/str_input.py,sha256=NevZHX9rf1g8eMatPyy-kUX3DglrVAQpzvVpKAzf7bA,81
268
272
  zrb/input/text_input.py,sha256=9vpXJt7ASa_Gq2zFbVWT1p-PBjYf6DpyXfuhIH-rJgs,2969
@@ -351,11 +355,11 @@ zrb/task/base/monitoring.py,sha256=w4_q3e7dwcJureUfcJr7vhpwQ5RCikr0VHGlGA_crrM,5
351
355
  zrb/task/base/operators.py,sha256=uAMFqpZJsPnCrojgOl1FUDXTS15mtOa_IqiAXltyYRU,1576
352
356
  zrb/task/base_task.py,sha256=upwuqAfwNDXTYM-uRDJhgZqqqARI03T6ksUbFHHLEH0,13321
353
357
  zrb/task/base_trigger.py,sha256=nbhFY3QCLNZkXxRorjyC4k2sEJumzR8YCNjOhFBSjJ8,7165
354
- zrb/task/cmd_task.py,sha256=myM8WZm6NrUD-Wv0Vb5sTOrutrAVZLt5LVsSBKwX6SM,10860
358
+ zrb/task/cmd_task.py,sha256=-R8NQr-68eDZMM4ibEt749mUfXQIR68GB-yiQ5YLf04,10996
355
359
  zrb/task/http_check.py,sha256=Gf5rOB2Se2EdizuN9rp65HpGmfZkGc-clIAlHmPVehs,2565
356
360
  zrb/task/llm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
357
361
  zrb/task/llm/agent.py,sha256=FrwqAt2SKm78C1fXAPJrXOZfd8iu-13n_R3tVetJlfI,8333
358
- zrb/task/llm/agent_runner.py,sha256=7VmLnhtF1oWfuV6xMCIwd4xPewpDXgfIPEJRoX9boiA,5202
362
+ zrb/task/llm/agent_runner.py,sha256=DiSlv1BedkBT218PAZghmrt0s72LHHPIvFekpgY7fpg,5392
359
363
  zrb/task/llm/config.py,sha256=wCcwxcaW2dgjxsjrXnG1inyKpQWs37kXJ-L_CO-KJ5s,4486
360
364
  zrb/task/llm/conversation_history.py,sha256=Fye5oryjdDN_JGBkxoPGUsjuU0FTHis1Ue6nTovo1Zo,7112
361
365
  zrb/task/llm/conversation_history_model.py,sha256=2ScAuu5ne6X6F0bXm-21ckEoqcDlWDeuD5L4DPPdz-Q,2629
@@ -373,17 +377,19 @@ zrb/task/llm/default_workflow/shell/workflow.md,sha256=_5aW5DEjOauiUANNWgbfEFmH5
373
377
  zrb/task/llm/error.py,sha256=QR-nIohS6pBpC_16cWR-fw7Mevo1sNYAiXMBsh_CJDE,4157
374
378
  zrb/task/llm/file_replacement.py,sha256=cUgtcfH9OlHzPwdZhSzWVNs7ZO0YYh0ajxqMwfIbvD0,7193
375
379
  zrb/task/llm/file_tool_model.py,sha256=bNH-nrHamXtc_sUiPZ1TYI6CqefPIXj3tP4FbURiU1Y,1721
376
- zrb/task/llm/history_processor.py,sha256=QQHoE2RNz8w75li-RC4PFgCelCLhVv4ObOiSQQ8JxDM,7684
380
+ zrb/task/llm/history_list.py,sha256=pPR9nwhlQ4PEcGt3NFokPqRzvHsZzHmKlxlIqKKmJX8,380
381
+ zrb/task/llm/history_processor.py,sha256=7TyY4YvAqaNLUwCBII5mQq5HqsP9Qc6s0XMQYUXfAGo,7301
377
382
  zrb/task/llm/history_summarization.py,sha256=YqLm9Q5xzFVTL5XwnWu3XwaMgSxKskDFvoi2MIThRB0,927
378
- zrb/task/llm/print_node.py,sha256=d7OMOJ2kj6iXZS2cC5cyuDF1QDFsA9FxDGX-xfirvxs,8674
383
+ zrb/task/llm/print_node.py,sha256=pBN_wRfl-x9YGR6fu3d9REI6OS_H8dKKsDQxHDCZjSA,10452
379
384
  zrb/task/llm/prompt.py,sha256=jlFNWa1IMCYNQh9Ccq9DB1dq9964IOQJ5jNSC9rMpkw,11366
380
385
  zrb/task/llm/subagent_conversation_history.py,sha256=y8UbKF2GpjB-r1bc2xCpzepriVEq0wfdyFuHOwfpPfk,1647
381
- zrb/task/llm/tool_wrapper.py,sha256=1kKXtZ9Wk6gSZJUpXuccdBZH-8RaQ91lTcTrum1nLog,12440
386
+ zrb/task/llm/tool_confirmation_completer.py,sha256=rOYZdq5No9DfLUG889cr99cUX6XmoO29Yh9FUcdMMio,1534
387
+ zrb/task/llm/tool_wrapper.py,sha256=pOy-WVASeBNW76TvZscxqjhT55xuoqg92YjDf4Ll5_I,12634
382
388
  zrb/task/llm/typing.py,sha256=c8VAuPBw_4A3DxfYdydkgedaP-LU61W9_wj3m3CAX1E,58
383
- zrb/task/llm/workflow.py,sha256=eGpUXoIKgbPFPZJ7hHy_HkGYnGWWx9-B9FNjjNm3_8I,2968
384
- zrb/task/llm_task.py,sha256=8tNtyufjsWUu5jJQEo9-dpl1N6fycA1ugllaKgLvOao,16571
389
+ zrb/task/llm/workflow.py,sha256=HT_Tj3tzehdn4koUGHqyWeS6-eb11WgmE6z8W_2wHxc,4025
390
+ zrb/task/llm_task.py,sha256=ZbVF2DBE2aknY9ygCBHj0Oe2tDRRIN9C_rEB7dSwdps,16539
385
391
  zrb/task/make_task.py,sha256=rWay-Wz2nAOr4mhMcJZuuehuWULfSBmZm5XcDN4ZN3c,2198
386
- zrb/task/rsync_task.py,sha256=0M5g2E_b28uCNLXSq2vTsDP2TdGpHfhNn1sDv4MhzNw,7089
392
+ zrb/task/rsync_task.py,sha256=Y2kFBB7pz3skogtJEj-f8Pyyhzc37Ii_B2RrWlwbUv8,7177
387
393
  zrb/task/scaffolder.py,sha256=rME18w1HJUHXgi9eTYXx_T2G4JdqDYzBoNOkdOOo5-o,6806
388
394
  zrb/task/scheduler.py,sha256=iC1BmXsf_59B-03Uqiu_yO4hsrAMDXVpedWr8w7R-iM,3127
389
395
  zrb/task/task.py,sha256=KCrCaWYOQQvv1RJsYtHDeo9RBFmlXQ28oKyEFU4Q7pA,73
@@ -399,7 +405,7 @@ zrb/util/cli/style.py,sha256=D_548KG1gXEirQGdkAVTc81vBdCeInXtnG1gV1yabBA,6655
399
405
  zrb/util/cli/subcommand.py,sha256=umTZIlrL-9g-qc_eRRgdaQgK-whvXK1roFfvnbuY7NQ,1753
400
406
  zrb/util/cli/text.py,sha256=kNg71NAdT6dAMoe0YN9DgWqV7udh8GlQr6ndXR_6NLA,968
401
407
  zrb/util/cmd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
402
- zrb/util/cmd/command.py,sha256=WpEMWVL9hBsxptvDHmRR93_cJ2zP05BJ2h9-tP93M1Y,7473
408
+ zrb/util/cmd/command.py,sha256=qI0TT3doyjB_hXJkSiCQOednqlidREh_cBX8lOmvQ8o,8444
403
409
  zrb/util/cmd/remote.py,sha256=NGQq2_IrUMDoZz3qmcgtnNYVGjMHaBKQpZxImf0yfXA,1296
404
410
  zrb/util/codemod/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
405
411
  zrb/util/codemod/modification_mode.py,sha256=z_4U2gjskEHkFm6UtBe_Wbm-erufYaXgPbdCQ6CZMlw,128
@@ -421,6 +427,7 @@ zrb/util/group.py,sha256=T82yr3qg9I5k10VPXkMyrIRIqyfzadSH813bqzwKEPI,4718
421
427
  zrb/util/init_path.py,sha256=9eN7CkWNGhDBpjTQs2j9YHVMzui7Y8DEb1WP4aTPzeo,659
422
428
  zrb/util/load.py,sha256=DK0KYSlu48HCoGPqnW1IxnE3pHrZSPCstfz8Fjyqqv8,2140
423
429
  zrb/util/markdown.py,sha256=UtXMKgUBBtFhR-fntNAMatG7jaKqZWI_D1yFb4tDQwU,2200
430
+ zrb/util/match.py,sha256=9xPSfdaJJdzxBTencwG23-qY9CjX5jUqrPogjeuMxbU,2364
424
431
  zrb/util/run.py,sha256=vu-mcSWDP_WuuvIKqM_--Gk3WkABO1oTXiHmBRTvVQk,546
425
432
  zrb/util/string/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
426
433
  zrb/util/string/conversion.py,sha256=ovSQtogMCt2hQcyh1neSp_XdbFx4WX-Mw5xoUlyOnRQ,6271
@@ -432,7 +439,7 @@ zrb/util/truncate.py,sha256=eSzmjBpc1Qod3lM3M73snNbDOcARHukW_tq36dWdPvc,921
432
439
  zrb/util/yaml.py,sha256=MXcqQTOYzx16onFxxg6HNdavxDK4RQjvKUi2NMKd19Y,6510
433
440
  zrb/xcom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
434
441
  zrb/xcom/xcom.py,sha256=W5BOF9w5fVX2ZBlbOTMsXHbY0yU8Advm-_oWJ3DJvDM,1824
435
- zrb-1.21.28.dist-info/METADATA,sha256=fs0DhOtJarqSf8NvHERj0DK3yKjhNV902bLKYvuLa5w,10622
436
- zrb-1.21.28.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
437
- zrb-1.21.28.dist-info/entry_points.txt,sha256=-Pg3ElWPfnaSM-XvXqCxEAa-wfVI6BEgcs386s8C8v8,46
438
- zrb-1.21.28.dist-info/RECORD,,
442
+ zrb-1.21.37.dist-info/METADATA,sha256=yC8BkPpGnsIZCCFF7LLtDHJv2ao2qdqTp-ui8MxFs6U,10622
443
+ zrb-1.21.37.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
444
+ zrb-1.21.37.dist-info/entry_points.txt,sha256=-Pg3ElWPfnaSM-XvXqCxEAa-wfVI6BEgcs386s8C8v8,46
445
+ zrb-1.21.37.dist-info/RECORD,,
File without changes