beswarm 0.1.49__tar.gz → 0.1.51__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. {beswarm-0.1.49 → beswarm-0.1.51}/PKG-INFO +1 -1
  2. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/setup.py +1 -1
  3. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/plugins/excute_command.py +73 -4
  4. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm.egg-info/PKG-INFO +1 -1
  5. {beswarm-0.1.49 → beswarm-0.1.51}/pyproject.toml +1 -1
  6. {beswarm-0.1.49 → beswarm-0.1.51}/MANIFEST.in +0 -0
  7. {beswarm-0.1.49 → beswarm-0.1.51}/README.md +0 -0
  8. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/__init__.py +0 -0
  9. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/main.py +0 -0
  10. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/__init__.py +0 -0
  11. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/core/__init__.py +0 -0
  12. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/core/log_config.py +0 -0
  13. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/core/models.py +0 -0
  14. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/core/request.py +0 -0
  15. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/core/response.py +0 -0
  16. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/core/test/test_base_api.py +0 -0
  17. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/core/test/test_geminimask.py +0 -0
  18. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/core/test/test_image.py +0 -0
  19. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/core/test/test_payload.py +0 -0
  20. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/core/utils.py +0 -0
  21. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/models/__init__.py +0 -0
  22. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/models/audio.py +0 -0
  23. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/models/base.py +0 -0
  24. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/models/chatgpt.py +0 -0
  25. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/models/claude.py +0 -0
  26. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/models/duckduckgo.py +0 -0
  27. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/models/gemini.py +0 -0
  28. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/models/groq.py +0 -0
  29. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/models/vertex.py +0 -0
  30. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/plugins/__init__.py +0 -0
  31. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/plugins/arXiv.py +0 -0
  32. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/plugins/config.py +0 -0
  33. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/plugins/get_time.py +0 -0
  34. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/plugins/image.py +0 -0
  35. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/plugins/list_directory.py +0 -0
  36. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/plugins/read_file.py +0 -0
  37. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/plugins/registry.py +0 -0
  38. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/plugins/run_python.py +0 -0
  39. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/plugins/websearch.py +0 -0
  40. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/plugins/write_file.py +0 -0
  41. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/prompt/__init__.py +0 -0
  42. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/prompt/agent.py +0 -0
  43. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/utils/__init__.py +0 -0
  44. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/utils/prompt.py +0 -0
  45. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/src/aient/utils/scripts.py +0 -0
  46. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/chatgpt.py +0 -0
  47. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/claude.py +0 -0
  48. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test.py +0 -0
  49. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_API.py +0 -0
  50. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_Deepbricks.py +0 -0
  51. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_Web_crawler.py +0 -0
  52. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_aiwaves.py +0 -0
  53. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_aiwaves_arxiv.py +0 -0
  54. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_ask_gemini.py +0 -0
  55. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_class.py +0 -0
  56. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_claude.py +0 -0
  57. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_claude_zh_char.py +0 -0
  58. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_ddg_search.py +0 -0
  59. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_download_pdf.py +0 -0
  60. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_gemini.py +0 -0
  61. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_get_token_dict.py +0 -0
  62. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_google_search.py +0 -0
  63. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_jieba.py +0 -0
  64. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_json.py +0 -0
  65. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_logging.py +0 -0
  66. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_ollama.py +0 -0
  67. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_plugin.py +0 -0
  68. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_py_run.py +0 -0
  69. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_requests.py +0 -0
  70. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_search.py +0 -0
  71. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_tikitoken.py +0 -0
  72. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_token.py +0 -0
  73. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_url.py +0 -0
  74. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_whisper.py +0 -0
  75. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_wildcard.py +0 -0
  76. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/aient/test/test_yjh.py +0 -0
  77. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/README.md +0 -0
  78. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/arduino-tags.scm +0 -0
  79. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/c-tags.scm +0 -0
  80. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/chatito-tags.scm +0 -0
  81. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/commonlisp-tags.scm +0 -0
  82. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/cpp-tags.scm +0 -0
  83. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/csharp-tags.scm +0 -0
  84. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/d-tags.scm +0 -0
  85. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/dart-tags.scm +0 -0
  86. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/elisp-tags.scm +0 -0
  87. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/elixir-tags.scm +0 -0
  88. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/elm-tags.scm +0 -0
  89. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/gleam-tags.scm +0 -0
  90. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/go-tags.scm +0 -0
  91. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/java-tags.scm +0 -0
  92. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/javascript-tags.scm +0 -0
  93. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/lua-tags.scm +0 -0
  94. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/pony-tags.scm +0 -0
  95. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/properties-tags.scm +0 -0
  96. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/python-tags.scm +0 -0
  97. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/r-tags.scm +0 -0
  98. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/racket-tags.scm +0 -0
  99. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/ruby-tags.scm +0 -0
  100. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/rust-tags.scm +0 -0
  101. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/solidity-tags.scm +0 -0
  102. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/swift-tags.scm +0 -0
  103. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-language-pack/udev-tags.scm +0 -0
  104. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/README.md +0 -0
  105. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/c-tags.scm +0 -0
  106. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/c_sharp-tags.scm +0 -0
  107. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/cpp-tags.scm +0 -0
  108. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/dart-tags.scm +0 -0
  109. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/elisp-tags.scm +0 -0
  110. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/elixir-tags.scm +0 -0
  111. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/elm-tags.scm +0 -0
  112. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/go-tags.scm +0 -0
  113. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/hcl-tags.scm +0 -0
  114. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/java-tags.scm +0 -0
  115. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/javascript-tags.scm +0 -0
  116. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/kotlin-tags.scm +0 -0
  117. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/ocaml-tags.scm +0 -0
  118. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/php-tags.scm +0 -0
  119. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/python-tags.scm +0 -0
  120. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/ql-tags.scm +0 -0
  121. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/ruby-tags.scm +0 -0
  122. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/rust-tags.scm +0 -0
  123. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/scala-tags.scm +0 -0
  124. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/queries/tree-sitter-languages/typescript-tags.scm +0 -0
  125. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/tools/UIworker.py +0 -0
  126. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/tools/__init__.py +0 -0
  127. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/tools/click.py +0 -0
  128. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/tools/edit_file.py +0 -0
  129. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/tools/planner.py +0 -0
  130. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/tools/repomap.py +0 -0
  131. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/tools/search_arxiv.py +0 -0
  132. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/tools/think.py +0 -0
  133. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/tools/worker.py +0 -0
  134. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm/utils.py +0 -0
  135. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm.egg-info/SOURCES.txt +0 -0
  136. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm.egg-info/dependency_links.txt +0 -0
  137. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm.egg-info/requires.txt +0 -0
  138. {beswarm-0.1.49 → beswarm-0.1.51}/beswarm.egg-info/top_level.txt +0 -0
  139. {beswarm-0.1.49 → beswarm-0.1.51}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: beswarm
3
- Version: 0.1.49
3
+ Version: 0.1.51
4
4
  Summary: MAS
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -4,7 +4,7 @@ from setuptools import setup, find_packages
4
4
 
5
5
  setup(
6
6
  name="aient",
7
- version="1.1.5",
7
+ version="1.1.7",
8
8
  description="Aient: The Awakening of Agent.",
9
9
  long_description=Path.open(Path("README.md"), encoding="utf-8").read(),
10
10
  long_description_content_type="text/markdown",
@@ -12,6 +12,32 @@ IS_UNIX = hasattr(os, 'fork')
12
12
  if IS_UNIX:
13
13
  import pty
14
14
 
15
+ import difflib
16
+
17
+ last_line = ""
18
+ def calculate_similarity(string1: str, string2: str) -> float:
19
+ """Calculates the similarity ratio between two strings.
20
+
21
+ Args:
22
+ string1: The first string.
23
+ string2: The second string.
24
+
25
+ Returns:
26
+ A float between 0 and 1, where 1 means the strings are identical
27
+ and 0 means they are completely different.
28
+ """
29
+ return difflib.SequenceMatcher(None, string1, string2).ratio()
30
+
31
+ def compare_line(line: str) -> bool:
32
+ global last_line
33
+ if last_line == "":
34
+ last_line = line
35
+ return False
36
+ similarity = calculate_similarity(line, last_line)
37
+ last_line = line
38
+ # print(f"similarity: {similarity}")
39
+ return similarity > 0.89
40
+
15
41
  def unescape_html(input_string: str) -> str:
16
42
  """
17
43
  将字符串中的 HTML 实体(例如 &)转换回其原始字符(例如 &)。
@@ -101,6 +127,10 @@ def excute_command(command):
101
127
  data_str = repr(data_bytes) + " (decode error)\n"
102
128
 
103
129
  print(data_str, end='', flush=True)
130
+ if "pip install" in command and '━━' in data_str:
131
+ continue
132
+ if "git clone" in command and ('Counting objects' in data_str or 'Resolving deltas' in data_str or 'Receiving objects' in data_str or 'Compressing objects' in data_str):
133
+ continue
104
134
  output_lines.append(data_str)
105
135
  # 检查进程是否已结束,避免在进程已退出后 select 仍然阻塞
106
136
  if process.poll() is not None and not r:
@@ -141,7 +171,21 @@ def excute_command(command):
141
171
  stderr_output = process.stderr.read()
142
172
  process.stderr.close()
143
173
 
144
- final_output_log = "".join(output_lines)
174
+ new_output_lines = []
175
+ output_lines = "".join(output_lines).strip().replace("\\u001b[A", "").replace("\\r", "\r").replace("\\\\", "").replace("\\n", "\n").replace("\r", "+++").replace("\n", "+++")
176
+ for line in output_lines.split("+++"):
177
+ if line.strip() == "":
178
+ continue
179
+ # aaa = last_line.strip()
180
+ is_same = compare_line(repr(line.strip()))
181
+ if not is_same:
182
+ # print(f"{repr(aaa)}", flush=True)
183
+ # print(f"{repr(line.strip())}", flush=True)
184
+ # print(f"is_same: {is_same}", flush=True)
185
+ # print(f"\n\n\n", flush=True)
186
+ new_output_lines.append(line)
187
+ final_output_log = "\n".join(new_output_lines)
188
+ # print(f"output_lines: {len(new_output_lines)}")
145
189
 
146
190
  if process.returncode == 0:
147
191
  return f"执行命令成功:\n{final_output_log}"
@@ -171,6 +215,31 @@ if __name__ == "__main__":
171
215
  # print('\\n-------TQDM 任务完成.')
172
216
  # """
173
217
 
218
+ # tqdm_script = """
219
+ # import time
220
+ # print("Hello, World!1")
221
+ # print("Hello, World!2")
222
+ # for i in range(10):
223
+ # print(f"TQDM 进度条测试: {i}")
224
+ # time.sleep(1)
225
+ # """
226
+ # processed_tqdm_script = tqdm_script.replace('"', '\\"')
227
+ # tqdm_command = f"python -c \"{processed_tqdm_script}\""
228
+ # # print(f"执行: {tqdm_command}")
229
+ # print(excute_command(tqdm_command))
230
+
231
+ tqdm_script = """
232
+ import time
233
+ with open("/Users/yanyuming/Downloads/GitHub/beswarm/1.txt", "r") as f:
234
+ content = f.read()
235
+ for i in content.split("\\n"):
236
+ print(i)
237
+ """
238
+ processed_tqdm_script = tqdm_script.replace('"', '\\"')
239
+ tqdm_command = f"python -c \"{processed_tqdm_script}\""
240
+ # print(f"执行: {tqdm_command}")
241
+ print(excute_command(tqdm_command))
242
+
174
243
  # tqdm_script = """
175
244
  # import time
176
245
  # from tqdm import tqdm
@@ -184,9 +253,9 @@ if __name__ == "__main__":
184
253
  # print(excute_command(tqdm_command))
185
254
 
186
255
 
187
- tqdm_command = f"pip install requests"
188
- # print(f"执行: {tqdm_command}")
189
- print(excute_command(tqdm_command))
256
+ # tqdm_command = f"pip install requests"
257
+ # # print(f"执行: {tqdm_command}")
258
+ # print(excute_command(tqdm_command))
190
259
 
191
260
 
192
261
  # long_running_command_unix = "echo '开始长时间任务...' && for i in 1 2 3; do echo \"正在处理步骤 $i/3...\"; sleep 1; done && echo '长时间任务完成!'"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: beswarm
3
- Version: 0.1.49
3
+ Version: 0.1.51
4
4
  Summary: MAS
5
5
  Requires-Python: >=3.11
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "beswarm"
3
- version = "0.1.49"
3
+ version = "0.1.51"
4
4
  description = "MAS"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes