alita-sdk 0.3.602__py3-none-any.whl → 0.3.609__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 alita-sdk might be problematic. Click here for more details.

Files changed (32) hide show
  1. alita_sdk/cli/agents.py +108 -826
  2. alita_sdk/cli/testcases/__init__.py +94 -0
  3. alita_sdk/cli/testcases/data_generation.py +119 -0
  4. alita_sdk/cli/testcases/discovery.py +96 -0
  5. alita_sdk/cli/testcases/executor.py +84 -0
  6. alita_sdk/cli/testcases/logger.py +85 -0
  7. alita_sdk/cli/testcases/parser.py +172 -0
  8. alita_sdk/cli/testcases/prompts.py +91 -0
  9. alita_sdk/cli/testcases/reporting.py +125 -0
  10. alita_sdk/cli/testcases/setup.py +108 -0
  11. alita_sdk/cli/testcases/test_runner.py +282 -0
  12. alita_sdk/cli/testcases/utils.py +39 -0
  13. alita_sdk/cli/testcases/validation.py +90 -0
  14. alita_sdk/cli/testcases/workflow.py +196 -0
  15. alita_sdk/configurations/openapi.py +2 -2
  16. alita_sdk/runtime/clients/artifact.py +1 -1
  17. alita_sdk/runtime/tools/artifact.py +253 -8
  18. alita_sdk/runtime/tools/llm.py +12 -11
  19. alita_sdk/tools/bitbucket/api_wrapper.py +31 -30
  20. alita_sdk/tools/bitbucket/cloud_api_wrapper.py +49 -35
  21. alita_sdk/tools/confluence/api_wrapper.py +8 -1
  22. alita_sdk/tools/elitea_base.py +40 -36
  23. alita_sdk/tools/figma/api_wrapper.py +140 -83
  24. alita_sdk/tools/github/github_client.py +18 -10
  25. alita_sdk/tools/github/graphql_client_wrapper.py +1 -0
  26. alita_sdk/tools/utils/text_operations.py +156 -52
  27. {alita_sdk-0.3.602.dist-info → alita_sdk-0.3.609.dist-info}/METADATA +1 -1
  28. {alita_sdk-0.3.602.dist-info → alita_sdk-0.3.609.dist-info}/RECORD +32 -19
  29. {alita_sdk-0.3.602.dist-info → alita_sdk-0.3.609.dist-info}/WHEEL +0 -0
  30. {alita_sdk-0.3.602.dist-info → alita_sdk-0.3.609.dist-info}/entry_points.txt +0 -0
  31. {alita_sdk-0.3.602.dist-info → alita_sdk-0.3.609.dist-info}/licenses/LICENSE +0 -0
  32. {alita_sdk-0.3.602.dist-info → alita_sdk-0.3.609.dist-info}/top_level.txt +0 -0
@@ -1156,13 +1156,18 @@ class GitHubClient(BaseModel):
1156
1156
  file_path, edit_content = file_query.split("\n", 1)
1157
1157
  file_path = file_path.strip()
1158
1158
 
1159
- # Delegate to shared edit_file implementation
1160
- return self.edit_file(
1161
- file_path=file_path,
1162
- file_query=edit_content,
1163
- branch=branch,
1164
- commit_message=commit_message or f"Update {file_path}",
1165
- )
1159
+ # Set temporary repo override for internal helpers
1160
+ self._tmp_repo_for_edit = repo_name
1161
+ try:
1162
+ return self.edit_file(
1163
+ file_path=file_path,
1164
+ file_query=edit_content,
1165
+ branch=branch,
1166
+ commit_message=commit_message or f"Update {file_path}",
1167
+ )
1168
+ finally:
1169
+ if hasattr(self, "_tmp_repo_for_edit"):
1170
+ delattr(self, "_tmp_repo_for_edit")
1166
1171
  except Exception as e:
1167
1172
  return f"Unable to update file due to error:\n{str(e)}"
1168
1173
 
@@ -1400,11 +1405,12 @@ class GitHubClient(BaseModel):
1400
1405
  str: The file decoded as a string, or an error message if not found
1401
1406
  """
1402
1407
  try:
1403
- repo = self.github_api.get_repo(repo_name) if repo_name else self.github_repo_instance
1408
+ # Prefer temporary repo set by update_file, then explicit repo_name
1409
+ effective_repo = getattr(self, "_tmp_repo_for_edit", None) or repo_name
1410
+ repo = self.github_api.get_repo(effective_repo) if effective_repo else self.github_repo_instance
1404
1411
  file = repo.get_contents(file_path, ref=branch)
1405
1412
  return file.decoded_content.decode("utf-8")
1406
1413
  except Exception as e:
1407
- from traceback import format_exc
1408
1414
  return f"File not found `{file_path}` on branch `{branch}`. Error: {str(e)}"
1409
1415
 
1410
1416
  def read_file(self, file_path: str, branch: Optional[str] = None, repo_name: Optional[str] = None) -> str:
@@ -1442,7 +1448,9 @@ class GitHubClient(BaseModel):
1442
1448
  Success message
1443
1449
  """
1444
1450
  try:
1445
- repo = self.github_api.get_repo(repo_name) if repo_name else self.github_repo_instance
1451
+ # Prefer temporary repo set by update_file, then explicit repo_name
1452
+ effective_repo = getattr(self, "_tmp_repo_for_edit", None) or repo_name
1453
+ repo = self.github_api.get_repo(effective_repo) if effective_repo else self.github_repo_instance
1446
1454
  branch = branch or self.active_branch
1447
1455
 
1448
1456
  if branch == self.github_base_branch:
@@ -1464,6 +1464,7 @@ class GraphQLClientWrapper(BaseModel):
1464
1464
 
1465
1465
  missing_fields = []
1466
1466
  fields_to_update = []
1467
+ updated_fields = []
1467
1468
 
1468
1469
  if fields:
1469
1470
  try:
@@ -26,48 +26,119 @@ TEXT_EDITABLE_EXTENSIONS = {
26
26
  def parse_old_new_markers(file_query: str) -> List[Tuple[str, str]]:
27
27
  """Parse OLD/NEW marker-based edit instructions.
28
28
 
29
- Extracts pairs of old and new content from a file query using markers in
30
- a minimal, regex-based way without additional line splitting logic.
31
-
32
- Supported forms (OLD/NEW blocks must appear in pairs):
33
- - OLD <<<< ... >>>> OLD
34
- NEW <<<< ... >>>> NEW
35
- - If no such pairs are found, we also accept the slightly incorrect
36
- "<<<" form as a fallback:
37
- OLD <<< ... >>> OLD
38
- NEW <<< ... >>> NEW
29
+ Format:
30
+
31
+ OLD <<<<[optional text or newline]
32
+ ... OLD content ...
33
+ >>>> OLD
34
+ NEW <<<<[optional text or newline]
35
+ ... NEW content ...
36
+ >>>> NEW
37
+
38
+ Rules:
39
+ - OLD block:
40
+ - Starts at the first line that contains "OLD <<<<".
41
+ - OLD content includes:
42
+ * On that line: everything after the first "OLD <<<<" (if any),
43
+ * Plus all following lines up to (but not including) the first line
44
+ that contains ">>>> OLD".
45
+ - NEW block:
46
+ - Starts at the first line, after the OLD block, that contains "NEW <<<<".
47
+ - NEW content includes:
48
+ * On that line: everything after the first "NEW <<<<" (if any),
49
+ * Plus all following lines up to (but not including) the first line
50
+ that contains ">>>> NEW".
51
+ - Only the first complete OLD/NEW pair is returned.
39
52
 
40
53
  Args:
41
54
  file_query: String containing marked old and new content sections.
42
55
 
43
56
  Returns:
44
- List of (old_content, new_content) tuples, where each content string
45
- is the raw inner block (with leading/trailing whitespace stripped),
46
- but otherwise unmodified.
57
+ A list with at most one (old_content, new_content) tuple. Each
58
+ content string includes newlines but excludes the marker substrings
59
+ and their closing lines.
47
60
  """
48
- # Primary pattern: correct 4-< markers
49
- pattern_primary = re.compile(
50
- r"OLD <<<<(\s*.*?\s*)>>>> OLD" # OLD block
51
- r"\s*" # optional whitespace between OLD/NEW
52
- r"NEW <<<<(\s*.*?\s*)>>>> NEW", # NEW block
53
- re.DOTALL,
54
- )
55
61
 
56
- matches = pattern_primary.findall(file_query)
62
+ if not file_query:
63
+ return []
57
64
 
58
- # Fallback pattern: accept 3-< markers if no proper 4-< markers found
59
- if not matches:
60
- pattern_fallback = re.compile(
61
- r"OLD <<<(\s*.*?\s*)>>>> OLD" # OLD block (3 < and 4 > to support previous version)
62
- r"\s*" # optional whitespace between OLD/NEW
63
- r"NEW <<<(\s*.*?\s*)>>>> NEW", # NEW block (3 < and 4 > to support previous version)
64
- re.DOTALL,
65
- )
66
- matches = pattern_fallback.findall(file_query)
65
+ lines = file_query.splitlines(keepends=True)
66
+
67
+ old_open = "OLD <<<<"
68
+ old_close = ">>>> OLD"
69
+ new_open = "NEW <<<<"
70
+ new_close = ">>>> NEW"
71
+
72
+ state = "search_old" # -> in_old -> search_new -> in_new
73
+ old_parts: list[str] = []
74
+ new_parts: list[str] = []
75
+
76
+ i = 0
77
+ n = len(lines)
78
+
79
+ # 1. Find OLD block
80
+ while i < n and state == "search_old":
81
+ line = lines[i]
82
+ pos = line.find(old_open)
83
+ if pos != -1:
84
+ # Start OLD content after the first "OLD <<<<" on this line
85
+ after = line[pos + len(old_open):]
86
+ old_parts.append(after)
87
+ state = "in_old"
88
+ i += 1
89
+
90
+ if state != "in_old":
91
+ # No OLD block found
92
+ return []
93
+
94
+ # Collect until a line containing ">>>> OLD"
95
+ while i < n and state == "in_old":
96
+ line = lines[i]
97
+ if old_close in line:
98
+ # Stop before this line; do not include any part of it
99
+ state = "search_new"
100
+ else:
101
+ old_parts.append(line)
102
+ i += 1
103
+
104
+ if state != "search_new":
105
+ # Didn't find a proper OLD close
106
+ return []
107
+
108
+ # 2. Find NEW block after OLD
109
+ while i < n and state == "search_new":
110
+ line = lines[i]
111
+ pos = line.find(new_open)
112
+ if pos != -1:
113
+ # NEW content starts from the *next* line after the marker line
114
+ state = "in_new"
115
+ i += 1
116
+ break
117
+ i += 1
118
+
119
+ if state != "in_new":
120
+ # No NEW block found
121
+ return []
122
+
123
+ # Collect until a line containing ">>>> NEW"
124
+ while i < n and state == "in_new":
125
+ line = lines[i]
126
+ close_pos = line.rfind(new_close)
127
+ if close_pos != -1:
128
+ # Include content up to but not including the *last* ">>>> NEW" on the line
129
+ before_close = line[:close_pos]
130
+ new_parts.append(before_close)
131
+ break
132
+ else:
133
+ new_parts.append(line)
134
+ i += 1
135
+
136
+ if not old_parts or not new_parts:
137
+ return []
67
138
 
68
- # Preserve block content exactly as captured so Stage 1 can use exact
69
- # substring replacement (including indentation and trailing spaces).
70
- return [(old_block, new_block) for old_block, new_block in matches]
139
+ old_content = "".join(old_parts)
140
+ new_content = "".join(new_parts)
141
+ return [(old_content, new_content)]
71
142
 
72
143
 
73
144
  def is_text_editable(filename: str) -> bool:
@@ -250,7 +321,7 @@ def try_apply_edit(
250
321
  old_text: str,
251
322
  new_text: str,
252
323
  file_path: Optional[str] = None,
253
- ) -> Tuple[str, bool]:
324
+ ) -> Tuple[str, Optional[str]]:
254
325
  """Apply a single OLD/NEW edit with a tolerant fallback.
255
326
 
256
327
  This helper is used by edit_file to apply one (old_text, new_text) pair:
@@ -271,21 +342,53 @@ def try_apply_edit(
271
342
  file_path: Optional path for logging context
272
343
 
273
344
  Returns:
274
- (updated_content, used_fallback)
345
+ (updated_content, warning_message)
346
+ - updated_content: resulting content (may be unchanged)
347
+ - warning_message: human-readable warning if no edit was applied
348
+ or if the operation was ambiguous; None if an edit was
349
+ successfully and unambiguously applied.
275
350
  """
276
351
  # Stage 1: exact match
277
- if old_text in content:
278
- return content.replace(old_text, new_text), False
352
+ if old_text:
353
+ occurrences = content.count(old_text)
354
+ if occurrences == 1:
355
+ return content.replace(old_text, new_text, 1), None
356
+ if occurrences > 1:
357
+ msg = (
358
+ "Exact OLD block appears %d times in %s; no replacement applied to avoid ambiguity. "
359
+ "OLD value: %r" % (
360
+ occurrences,
361
+ file_path or "<unknown>",
362
+ old_text,
363
+ )
364
+ )
365
+ logger.warning(msg)
366
+ return content, msg
279
367
 
280
368
  # Stage 2: tolerant match
281
- if not old_text.strip() or not content:
282
- return content, False
369
+ if not old_text or not old_text.strip() or not content:
370
+ msg = None
371
+ if not old_text or not old_text.strip():
372
+ msg = (
373
+ "OLD block is empty or whitespace-only; no replacement applied. "
374
+ "OLD value: %r" % (old_text,)
375
+ )
376
+ elif not content:
377
+ msg = "Content is empty; no replacement applied."
378
+ if msg:
379
+ logger.warning(msg)
380
+ return content, msg
283
381
 
284
382
  # Logical OLD: drop empty/whitespace-only lines
285
383
  old_lines_raw = old_text.splitlines()
286
384
  old_lines = [l for l in old_lines_raw if l.strip()]
287
385
  if not old_lines:
288
- return content, False
386
+ msg = (
387
+ "OLD block contains only empty/whitespace lines; no replacement applied. "
388
+ "OLD value: %r" % (old_text,)
389
+ )
390
+ logger.warning(msg)
391
+ return content, msg
289
392
 
290
393
  # Precompute normalized OLD (joined by '\n')
291
394
  norm_old = _normalize_for_match("\n".join(old_lines))
@@ -318,29 +421,30 @@ def try_apply_edit(
318
421
  candidates.append((start, idx, block))
319
422
 
320
423
  if not candidates:
321
- logger.warning(
322
- "Fallback match: normalized OLD block not found in %s.",
323
- file_path or "<unknown>",
424
+ msg = (
425
+ "Normalized OLD block not found in %s. OLD value: %r"
426
+ % (file_path or "<unknown>", old_text)
324
427
  )
325
- return content, False
428
+ logger.warning(msg)
429
+ return content, msg
326
430
 
327
431
  if len(candidates) > 1:
328
- logger.warning(
329
- "Fallback match: multiple candidate regions for OLD block in %s; "
330
- "no change applied to avoid ambiguity.",
331
- file_path or "<unknown>",
432
+ msg = (
433
+ "Multiple candidate regions for OLD block in %s; "
434
+ "no change applied to avoid ambiguity. OLD value: %r"
435
+ % (file_path or "<unknown>", old_text)
332
436
  )
333
- return content, False
437
+ logger.warning(msg)
438
+ return content, msg
334
439
 
335
440
  start_idx, end_idx, candidate_block = candidates[0]
336
441
  updated = content.replace(candidate_block, new_text, 1)
337
442
 
338
443
  logger.info(
339
- "Fallback match: applied tolerant OLD/NEW replacement in %s around lines %d-%d",
444
+ "Applied tolerant OLD/NEW replacement in %s around lines %d-%d",
340
445
  file_path or "<unknown>",
341
446
  start_idx + 1,
342
447
  start_idx + len(old_lines),
343
448
  )
344
449
 
345
- return updated, True
346
-
450
+ return updated, None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alita_sdk
3
- Version: 0.3.602
3
+ Version: 0.3.609
4
4
  Summary: SDK for building langchain agents using resources from Alita
5
5
  Author-email: Artem Rozumenko <artyom.rozumenko@gmail.com>, Mikalai Biazruchka <mikalai_biazruchka@epam.com>, Roman Mitusov <roman_mitusov@epam.com>, Ivan Krakhmaliuk <lifedj27@gmail.com>, Artem Dubrovskiy <ad13box@gmail.com>
6
6
  License-Expression: Apache-2.0
@@ -4,7 +4,7 @@ alita_sdk/cli/__main__.py,sha256=dAhgWWWEOG1ZiwCs6wQoJwnD62cFRnxiyiAoiFqU8K4,420
4
4
  alita_sdk/cli/agent_executor.py,sha256=jSsB3XtbPf7GDEOEPswI3tVS35Q2YbRbMVzb3W6sSdM,5634
5
5
  alita_sdk/cli/agent_loader.py,sha256=xtxOW4tmUGj2EGa0Jb3WqAr2ZtXnWuZKRMdji2GpB-I,9837
6
6
  alita_sdk/cli/agent_ui.py,sha256=qNqCtzRKlkziB-45lRPcMaKYZDmxYJAXHx9SEUbfInE,8778
7
- alita_sdk/cli/agents.py,sha256=c4a78V9yiZ6xbzymsHFJVIlMK_auGpYkRvrdioMr13Q,191211
7
+ alita_sdk/cli/agents.py,sha256=AXXG5FrUvhSdE6QT4eEkm5uVym7gNF5ZogJCLG-aft8,159489
8
8
  alita_sdk/cli/callbacks.py,sha256=zHxciqlT7mMJ1sYlzJrztXnPZBvK6BOgmPVY0Df7b8k,22610
9
9
  alita_sdk/cli/cli.py,sha256=Ud5N8hjIiFcupGfZBx8SC9_70RyXnylBinNd-yfiw6w,5343
10
10
  alita_sdk/cli/config.py,sha256=TUpJyLVLvZfXZ_jLF-NhqUNHpl04_JYMGZZpqADhf30,11270
@@ -22,6 +22,19 @@ alita_sdk/cli/context/manager.py,sha256=rINhO85psQALP0-ISmsvqge4OjXUO7TRXh561us0
22
22
  alita_sdk/cli/context/message.py,sha256=dGm3hH8jbbe48iD2-1WSxighQ7Xxj_sLy8woqhU2C4I,8646
23
23
  alita_sdk/cli/context/strategies.py,sha256=mJvOgtZmszmVoOo1rKkYKgj7WIVEmxAMyh5PwCIt_Rw,10062
24
24
  alita_sdk/cli/context/token_estimation.py,sha256=n7Vg8ZqtY-bilWSOryFZWdafRZUuy95-ZdRGvbTAQ6I,3696
25
+ alita_sdk/cli/testcases/__init__.py,sha256=Z7QeIVhA-n_SAt3wWIyKK2kl24639ZpunsulLxVgEg0,2502
26
+ alita_sdk/cli/testcases/data_generation.py,sha256=L9hAtKiWzYhWaDBp3XmQ9xsBCHMQ_iTIdz3F3tafVDU,4715
27
+ alita_sdk/cli/testcases/discovery.py,sha256=z5qdtCn5zh8_Gi2mvSRZooy6AjgRloJwrAsTkkT1xyQ,3120
28
+ alita_sdk/cli/testcases/executor.py,sha256=p8YofY4tTKqu9Cpt1EPjx2h4z6YTPoyLrquRp3YOWXs,2673
29
+ alita_sdk/cli/testcases/logger.py,sha256=k5kw7-bxLlV2FmbHpCUE9T0lWi_eDAvNOkobplxwJB0,3228
30
+ alita_sdk/cli/testcases/parser.py,sha256=V_17zs8vnETAjc8I48z75d_arealKSlglZ0B-jFVO0M,6515
31
+ alita_sdk/cli/testcases/prompts.py,sha256=HKmfX_mF27OrDWr8MVNmAmZRCAm3iDIk83FWQ3TgDMA,3173
32
+ alita_sdk/cli/testcases/reporting.py,sha256=HQXqCrtPvQaD1IqmbB7OSfoI3y9nfRUIIJk9PxmsoCQ,4038
33
+ alita_sdk/cli/testcases/setup.py,sha256=4d0nAGKoj13za2BIUaBJlS1sU9E8sAHHi1UbGZ2av-o,3872
34
+ alita_sdk/cli/testcases/test_runner.py,sha256=TRtrBPHI4PrjKY7hcNaAnsuJBY0xCFTCoVFLpwccYoI,10907
35
+ alita_sdk/cli/testcases/utils.py,sha256=f2OjoUKQNYST-5GCt0VzIeaRC2-pHQYUyfXHx2qUMc4,1208
36
+ alita_sdk/cli/testcases/validation.py,sha256=8PAWajJX6H4IHbdh9jd7CGAdDh37lU-NDFcgBs9eNbc,2886
37
+ alita_sdk/cli/testcases/workflow.py,sha256=kTgnK-ss_Ty0CGgXS_3YkPNSU31ScZJow4JcAdPhV54,6811
25
38
  alita_sdk/cli/tools/__init__.py,sha256=xy5SzLWQXUl-tBkDlJeJr1h4Su9Z8RKZwYPXqaMH-iU,1095
26
39
  alita_sdk/cli/tools/approval.py,sha256=b_TtmyOaMJHjHAiig-1ds9qgNYbniWqPqv-dkNQ_r4Q,7536
27
40
  alita_sdk/cli/tools/filesystem.py,sha256=qbZbPAeIwHFwx_EZXWny2q7fMloPDv5ZyCOuabggG_Q,73311
@@ -73,7 +86,7 @@ alita_sdk/configurations/github.py,sha256=6F7P9BPu9zE54q8m8IPjIct8cEX3WODYzZvn9W
73
86
  alita_sdk/configurations/gitlab.py,sha256=v63-sgFq5yJrMqCW8J2ISwp64VToFKY74ZB3P5P0bcM,4301
74
87
  alita_sdk/configurations/google_places.py,sha256=jXhlPXywkDhHNrgB4KoVWogf3CVi1bY3wFLRzDqMr-E,589
75
88
  alita_sdk/configurations/jira.py,sha256=isZPChfvzVNaoWLcVq4jWVDUcDGszieWdLg8gqxAU84,5914
76
- alita_sdk/configurations/openapi.py,sha256=bM-X_OBl2CUowo_r5p-rRUIjROo6V0qA_V_izdX2FaE,14285
89
+ alita_sdk/configurations/openapi.py,sha256=WY9YvMxu1-UE-7sZqCGNRYolYMYXjojwsdmHKn60yUc,14276
77
90
  alita_sdk/configurations/pgvector.py,sha256=P-Q07ocIg4CXN_7hUBDM6r9gN62XS1N2jyP79tM9Tig,500
78
91
  alita_sdk/configurations/postman.py,sha256=A4swgV_0eEJ3LXYWzUUIDD5zFu9rS_vndqp1xd4YHnM,1114
79
92
  alita_sdk/configurations/qtest.py,sha256=qU9f9wq_Phh9MTsrbyLpUcog-q8esm1T_1hHK2AZhsY,3676
@@ -93,7 +106,7 @@ alita_sdk/configurations/zephyr_enterprise.py,sha256=x2ZNvR2tYJySzEmBY3fovUe7B-_
93
106
  alita_sdk/configurations/zephyr_essential.py,sha256=TiZedsBlfIDroflipvoqxjJeEWPonQzeT7e1bYns98s,3869
94
107
  alita_sdk/runtime/__init__.py,sha256=4W0UF-nl3QF2bvET5lnah4o24CoTwSoKXhuN0YnwvEE,828
95
108
  alita_sdk/runtime/clients/__init__.py,sha256=BdehU5GBztN1Qi1Wul0cqlU46FxUfMnI6Vq2Zd_oq1M,296
96
- alita_sdk/runtime/clients/artifact.py,sha256=7C1e9RtftqOJd3Mo5gNDnBuYg1Z9xTqjxmfdWeJH5Cc,4014
109
+ alita_sdk/runtime/clients/artifact.py,sha256=dzQm_QXYYFD3TCGevx8Y7uQnR3z3DQVQq7k86nv9o78,4021
97
110
  alita_sdk/runtime/clients/client.py,sha256=-RaAfIzZfxuNcdVQ3i8l7C9e-1ou2mcKV0tcwvAIknE,61520
98
111
  alita_sdk/runtime/clients/datasource.py,sha256=HAZovoQN9jBg0_-lIlGBQzb4FJdczPhkHehAiVG3Wx0,1020
99
112
  alita_sdk/runtime/clients/mcp_discovery.py,sha256=aFJ0wYQ8EAmXa9qLUusHZfQXkNec1wbgkqHdVeSFX-g,11697
@@ -182,7 +195,7 @@ alita_sdk/runtime/toolkits/vectorstore.py,sha256=5ZHw66au3DOAuYFIJB52_zE2ea5yPzs
182
195
  alita_sdk/runtime/tools/__init__.py,sha256=lS5GKEagDiK-3E3nHzktVOC1bIgN1sM0f31kuzHhe4Q,639
183
196
  alita_sdk/runtime/tools/agent.py,sha256=m98QxOHwnCRTT9j18Olbb5UPS8-ZGeQaGiUyZJSyFck,3162
184
197
  alita_sdk/runtime/tools/application.py,sha256=RCGe-mRfj8372gTFkEX2xBvcYhw7IKdU1t50lXaBPOY,3701
185
- alita_sdk/runtime/tools/artifact.py,sha256=1S3GtUv8xuf-LU6cwe_DeJwPmBgHxM7Th1-GtHi8s4M,24499
198
+ alita_sdk/runtime/tools/artifact.py,sha256=Us-NM1VTfqDNBzs8nMsI3Inu-_V9SoZOqjfUAxnf7qY,34389
186
199
  alita_sdk/runtime/tools/data_analysis.py,sha256=PHQ0xa2eDkw6FsHAHVTWB58wO8tg76tHrp4lXRQZ0jQ,6396
187
200
  alita_sdk/runtime/tools/datasource.py,sha256=pvbaSfI-ThQQnjHG-QhYNSTYRnZB0rYtZFpjCfpzxYI,2443
188
201
  alita_sdk/runtime/tools/echo.py,sha256=spw9eCweXzixJqHnZofHE1yWiSUa04L4VKycf3KCEaM,486
@@ -190,7 +203,7 @@ alita_sdk/runtime/tools/function.py,sha256=HSMO1nBTRKMvWC_m0M8TOLGaZ2k_7ksPgLqzu
190
203
  alita_sdk/runtime/tools/graph.py,sha256=7jImBBSEdP5Mjnn2keOiyUwdGDFhEXLUrgUiugO3mgA,3503
191
204
  alita_sdk/runtime/tools/image_generation.py,sha256=waxxFIAgmh9-COcljL9uZ7e_s7EL9OWveUxYk0ulEUM,7855
192
205
  alita_sdk/runtime/tools/indexer_tool.py,sha256=whSLPevB4WD6dhh2JDXEivDmTvbjiMV1MrPl9cz5eLA,4375
193
- alita_sdk/runtime/tools/llm.py,sha256=qHIhj0JS9xflFd9oyFtb1FavZ8Nzdv5SDB2EvhNzNQ0,59927
206
+ alita_sdk/runtime/tools/llm.py,sha256=I35UmRLZ-Sj8RK_0HsfuAxLfpk8GJavLLFags9uk4YE,59866
194
207
  alita_sdk/runtime/tools/loop.py,sha256=jjX3I_Oac2K8hXBSg6feeJaiXkKyLgd58OTq9LUSUzE,8460
195
208
  alita_sdk/runtime/tools/loop_output.py,sha256=JFql7uuCOSIFw92vNl6uUdsnUyS7bJPF0ZK300hHQ7I,8202
196
209
  alita_sdk/runtime/tools/mcp_inspect_tool.py,sha256=38X8euaxDbEGjcfp6ElvExZalpZun6QEr6ZEW4nU5pQ,11496
@@ -224,7 +237,7 @@ alita_sdk/runtime/utils/utils.py,sha256=d0RLiKfBnobC3PrEFPvZt3uUx3Jie2rR32Fp-3hk
224
237
  alita_sdk/tools/__init__.py,sha256=ODGQvgKCLrgZvIpz0M0NnPXuhY_Gjku3AHcmdkfTyCo,14756
225
238
  alita_sdk/tools/base_indexer_toolkit.py,sha256=5m985GbINputInypgTmwmvx4T2MxIargtSZg38ymvBQ,35437
226
239
  alita_sdk/tools/code_indexer_toolkit.py,sha256=eqEH0YShqMMFTQAHKiOhUkidC-GltbWfbW1oVigGi7s,10212
227
- alita_sdk/tools/elitea_base.py,sha256=h5NbVPF0WV3tvP9CfFm1aGZuiNhiLX1e9pLOFnInndc,52620
240
+ alita_sdk/tools/elitea_base.py,sha256=JVbiFgJ6zJWkK45gPEEDl19GlIb6470MUatuqIq_usI,53221
228
241
  alita_sdk/tools/non_code_indexer_toolkit.py,sha256=DVxcEml-pftoplBs1wSvzcAHsxjRyxq5YY36LSp3Jy4,1362
229
242
  alita_sdk/tools/ado/__init__.py,sha256=NnNYpNFW0_N_v1td_iekYOoQRRB7PIunbpT2f9ZFJM4,1201
230
243
  alita_sdk/tools/ado/utils.py,sha256=EQs6_KMA-frp7iInTVbUgKccWZrj4-U50AUbvlkHXHk,639
@@ -249,9 +262,9 @@ alita_sdk/tools/azure_ai/search/api_wrapper.py,sha256=BaQeD27hwk8htfqMX5YV84PthB
249
262
  alita_sdk/tools/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
250
263
  alita_sdk/tools/base/tool.py,sha256=RgWHmP8tZi6hROn9DnsW-76ZVcksXtjZY24SOXKpyTE,1087
251
264
  alita_sdk/tools/bitbucket/__init__.py,sha256=KnBWuWvdCYhVUFeWJJKbHFCLUPG43xTm5Lo54zbYMIg,5635
252
- alita_sdk/tools/bitbucket/api_wrapper.py,sha256=g8qMV2zjKpfSeM6YVJ-yNjSXuS28Tl1dH095DXp2Gdg,22222
265
+ alita_sdk/tools/bitbucket/api_wrapper.py,sha256=zpPfvqIzvLMvkBKEyPW2XLyMpr8SDq4iBr50Z8PW0xs,22259
253
266
  alita_sdk/tools/bitbucket/bitbucket_constants.py,sha256=UsbhQ1iEvrKoxceTFPWTYhaXS1zSxbmjs1TwY0-P4gw,462
254
- alita_sdk/tools/bitbucket/cloud_api_wrapper.py,sha256=g7CWe4qaXkTgIzzztnjtZGmIWwl8Su5BREorqwiBgAk,15529
267
+ alita_sdk/tools/bitbucket/cloud_api_wrapper.py,sha256=1h-lqw_bJDdXWFuOBBk0gvjE-gPY59NFfYAV3CpZOPk,16020
255
268
  alita_sdk/tools/browser/__init__.py,sha256=H1wdiz12tvy7OYGLvTNvM_Q2IQuo9s9wlLZVbaBWsRE,6603
256
269
  alita_sdk/tools/browser/crawler.py,sha256=tkB5UX9FmpJrhKPfaS-a2pL9loRf8zN-V5SfpQvX2NI,2406
257
270
  alita_sdk/tools/browser/duck_duck_go_search.py,sha256=iKws923v34o-ySXohJw-8xTDBWlj3fMsnzC_ZRuPugE,2002
@@ -318,7 +331,7 @@ alita_sdk/tools/code/loaders/codesearcher.py,sha256=boeVqB0p84YxDK3OgGObpb_-wbmU
318
331
  alita_sdk/tools/code/sonar/__init__.py,sha256=nXlvXin9NKdftpb9Kg87c7mUgGG9ETH400ReGVnkmR4,3447
319
332
  alita_sdk/tools/code/sonar/api_wrapper.py,sha256=nNqxcWN_6W8c0ckj-Er9HkNuAdgQLoWBXh5UyzNutis,2653
320
333
  alita_sdk/tools/confluence/__init__.py,sha256=vJ97VGUEaHETGcM0SVHyrjCmCwa3lY2nAXd8N8P9oB0,6954
321
- alita_sdk/tools/confluence/api_wrapper.py,sha256=oCB7awwIZVWnSGaJ-wXUloQcwkbPFoG8BJ4SLk7QVRY,92528
334
+ alita_sdk/tools/confluence/api_wrapper.py,sha256=LG0tgI_5ejeqE6_H2rbNmXr7AH6qVrNU9ocaPGQMnsQ,92825
322
335
  alita_sdk/tools/confluence/loader.py,sha256=qL5BMvqzeC8vqrjFXRrcJf3GBpvVEiDRZ-2G5mHA50k,10192
323
336
  alita_sdk/tools/confluence/utils.py,sha256=Lxo6dBD0OlvM4o0JuK6qeB_4LV9BptiwJA9e1vqNcDw,435
324
337
  alita_sdk/tools/custom_open_api/__init__.py,sha256=LlHPcRZXExEjArEvtlS4cXX4IOsfz2MA1yranQGvpSw,3100
@@ -326,13 +339,13 @@ alita_sdk/tools/custom_open_api/api_wrapper.py,sha256=sDSFpvEqpSvXHGiBISdQQcUecf
326
339
  alita_sdk/tools/elastic/__init__.py,sha256=8U4XSoDop1jfl6cJNaOj-WByDShfJJVEgkM_e9vaB0w,2940
327
340
  alita_sdk/tools/elastic/api_wrapper.py,sha256=pl8CqQxteJAGwyOhMcld-ZgtOTFwwbv42OITQVe8rM0,1948
328
341
  alita_sdk/tools/figma/__init__.py,sha256=ffteWvi0zOF61BQ1smno-clw6HGzgPGrqEqbi5kgyhs,6825
329
- alita_sdk/tools/figma/api_wrapper.py,sha256=t4boASfiKf5u8cQSUTXtV4PU_HzpjtwZXaui6kA_t6U,78337
342
+ alita_sdk/tools/figma/api_wrapper.py,sha256=QzvqeuHwSUhYgyhm_2zGBu1Ps78ARU8LKxItk0oj1zQ,80076
330
343
  alita_sdk/tools/figma/figma_client.py,sha256=SQwZIFMrDk09Hqp-kbjECpwTIJyHmXDkTAj51F6Su4s,2863
331
344
  alita_sdk/tools/figma/toon_tools.py,sha256=AWpdqHk3cKdVXPVLkjpwAG6HoaKWSySIsM1sXai4JnE,103563
332
345
  alita_sdk/tools/github/__init__.py,sha256=_beRvKqr-nQ9D_Z1eY0beX8REVntwpuGIQyvPWVa-c0,5016
333
346
  alita_sdk/tools/github/api_wrapper.py,sha256=mX23Rro6xnRa35tpeWhKYcRCJx0cDTzIe32pZAKDYno,7986
334
- alita_sdk/tools/github/github_client.py,sha256=xm7XjTj7JzE2GkELUWVnfCPwhleN84Lgq4nW_VFzBAo,87636
335
- alita_sdk/tools/github/graphql_client_wrapper.py,sha256=d3AGjzLGH_hdQV2V8HeAX92dJ4dlnE5OXqUlCO_PBr0,71539
347
+ alita_sdk/tools/github/github_client.py,sha256=9pL7AWosL_wBWSfHxSxlP5wLmVKlY1pUjsB6jQQIU38,88166
348
+ alita_sdk/tools/github/graphql_client_wrapper.py,sha256=HSw-ynf50YpbsYJvOOKw31dV1XwIkyhUcsG4K6FZilo,71567
336
349
  alita_sdk/tools/github/schemas.py,sha256=GTvw_2QV9Dm179_8d-4fHs1Q133y7zDzXA_Pt1VvLD8,14024
337
350
  alita_sdk/tools/github/tool.py,sha256=Vs57WMn6_AVAmDTE5nsByNYwZ4B1z9WGboBbIy2CRDw,1278
338
351
  alita_sdk/tools/github/tool_prompts.py,sha256=y6ZW_FpUCE87Uop3WuQAZVRnzxO5t7xjBOI5bCqiluw,30194
@@ -423,7 +436,7 @@ alita_sdk/tools/testrail/api_wrapper.py,sha256=XycH0iEH2cCAv7InJotmsGE9lPj6hP45Z
423
436
  alita_sdk/tools/utils/__init__.py,sha256=Bt1TsxkQIezgkxCgn5wFIOMsTsW5vEoWdM6KznodktU,4027
424
437
  alita_sdk/tools/utils/available_tools_decorator.py,sha256=IbrdfeQkswxUFgvvN7-dyLMZMyXLiwvX7kgi3phciCk,273
425
438
  alita_sdk/tools/utils/content_parser.py,sha256=nzuxocuaNrdLNZ9m4_lqlpdv8QXfLmNLLxi2EDhtOWE,19181
426
- alita_sdk/tools/utils/text_operations.py,sha256=KJ0zk3hDELIJXHmH_Yf1gO2ksj-AKQ4WyS1O9D-f1Js,11446
439
+ alita_sdk/tools/utils/text_operations.py,sha256=SNp6N-fz2Hwkt2LDJlCirK72QZnON_EdcR9WdhqiAGs,14317
427
440
  alita_sdk/tools/vector_adapters/VectorStoreAdapter.py,sha256=N8FwoEKXLgIAb4O2bjQDn5XwPCc_oKQVaaB5Kzt-fvo,20351
428
441
  alita_sdk/tools/vector_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
429
442
  alita_sdk/tools/xray/__init__.py,sha256=vABZyW9cXQF46vMgYIItcPyOkmq8Bmcgbd_AN7I6MDw,4617
@@ -445,9 +458,9 @@ alita_sdk/tools/zephyr_scale/api_wrapper.py,sha256=ppJayzkKRhTbQVVd2EhQmvADwdosl
445
458
  alita_sdk/tools/zephyr_squad/__init__.py,sha256=cUSc0ZhpGmWnTQ3ZjllU9QmNlCfaHZ21HCFjfenSMH8,3081
446
459
  alita_sdk/tools/zephyr_squad/api_wrapper.py,sha256=kmw_xol8YIYFplBLWTqP_VKPRhL_1ItDD0_vXTe_UuI,14906
447
460
  alita_sdk/tools/zephyr_squad/zephyr_squad_cloud_client.py,sha256=R371waHsms4sllHCbijKYs90C-9Yu0sSR3N4SUfQOgU,5066
448
- alita_sdk-0.3.602.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
449
- alita_sdk-0.3.602.dist-info/METADATA,sha256=k9c31as4WJyXoDMDRZNkMAdRi8-7ZhZav3kLcZeN5-M,24339
450
- alita_sdk-0.3.602.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
451
- alita_sdk-0.3.602.dist-info/entry_points.txt,sha256=VijN0h4alp1WXm8tfS3P7vuGxN4a5RZqHjXAoEIBZnI,49
452
- alita_sdk-0.3.602.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
453
- alita_sdk-0.3.602.dist-info/RECORD,,
461
+ alita_sdk-0.3.609.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
462
+ alita_sdk-0.3.609.dist-info/METADATA,sha256=hEWxQjw26WUFFy2f56DL-k9cuqD3Xxxszb6f4YEFtC8,24339
463
+ alita_sdk-0.3.609.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
464
+ alita_sdk-0.3.609.dist-info/entry_points.txt,sha256=VijN0h4alp1WXm8tfS3P7vuGxN4a5RZqHjXAoEIBZnI,49
465
+ alita_sdk-0.3.609.dist-info/top_level.txt,sha256=0vJYy5p_jK6AwVb1aqXr7Kgqgk3WDtQ6t5C-XI9zkmg,10
466
+ alita_sdk-0.3.609.dist-info/RECORD,,