meshagent-cli 0.3.1__py3-none-any.whl → 0.4.3__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 meshagent-cli might be problematic. Click here for more details.

meshagent/cli/chatbot.py CHANGED
@@ -22,7 +22,9 @@ from meshagent.agents.chat import (
22
22
  )
23
23
 
24
24
  from typing import List
25
+ from pathlib import Path
25
26
 
27
+ from meshagent.openai.tools.responses_adapter import WebSearchTool
26
28
  from meshagent.api import RequiredToolkit, RequiredSchema
27
29
 
28
30
  app = async_typer.AsyncTyper()
@@ -38,6 +40,8 @@ def build_chatbot(
38
40
  image_generation: Optional[str] = None,
39
41
  local_shell: bool,
40
42
  computer_use: bool,
43
+ web_search: bool,
44
+ rules_file: Optional[str] = None,
41
45
  ):
42
46
  requirements = []
43
47
 
@@ -49,6 +53,13 @@ def build_chatbot(
49
53
  for t in schema:
50
54
  requirements.append(RequiredSchema(name=t))
51
55
 
56
+ if rules_file is not None:
57
+ try:
58
+ with open(Path(rules_file).resolve(), "r") as f:
59
+ rule.extend(f.read().splitlines())
60
+ except FileNotFoundError:
61
+ print(f"[yellow]rules file not found at {rules_file}[/yellow]")
62
+
52
63
  BaseClass = ChatBot
53
64
  if computer_use:
54
65
  BaseClass = ComputerAgent
@@ -95,6 +106,9 @@ def build_chatbot(
95
106
  )
96
107
  )
97
108
 
109
+ if web_search:
110
+ thread_toolkit.tools.append(WebSearchTool())
111
+
98
112
  toolkits.append(thread_toolkit)
99
113
  return toolkits
100
114
 
@@ -111,6 +125,7 @@ async def make_call(
111
125
  agent_name: Annotated[str, typer.Option(..., help="Name of the agent to call")],
112
126
  token_path: Annotated[Optional[str], typer.Option()] = None,
113
127
  rule: Annotated[List[str], typer.Option("--rule", "-r", help="a system rule")] = [],
128
+ rules_file: Optional[str] = None,
114
129
  toolkit: Annotated[
115
130
  List[str],
116
131
  typer.Option("--toolkit", "-t", help="the name or url of a required toolkit"),
@@ -134,6 +149,9 @@ async def make_call(
134
149
  local_shell: Annotated[
135
150
  Optional[bool], typer.Option(..., help="Enable local shell tool calling")
136
151
  ] = False,
152
+ web_search: Annotated[
153
+ Optional[bool], typer.Option(..., help="Enable web search tool calling")
154
+ ] = False,
137
155
  ):
138
156
  account_client = await get_client()
139
157
  try:
@@ -174,6 +192,8 @@ async def make_call(
174
192
  toolkit=toolkit,
175
193
  schema=schema,
176
194
  image_generation=image_generation,
195
+ web_search=web_search,
196
+ rules_file=rules_file,
177
197
  )
178
198
 
179
199
  bot = CustomChatbot()
@@ -198,6 +218,7 @@ async def service(
198
218
  room: Annotated[Optional[str], typer.Option()] = None,
199
219
  agent_name: Annotated[str, typer.Option(..., help="Name of the agent to call")],
200
220
  rule: Annotated[List[str], typer.Option("--rule", "-r", help="a system rule")] = [],
221
+ rules_file: Optional[str] = None,
201
222
  toolkit: Annotated[
202
223
  List[str],
203
224
  typer.Option("--toolkit", "-t", help="the name or url of a required toolkit"),
@@ -221,6 +242,9 @@ async def service(
221
242
  ..., help="Enable computer use (requires computer-use-preview model)"
222
243
  ),
223
244
  ] = False,
245
+ web_search: Annotated[
246
+ Optional[bool], typer.Option(..., help="Enable web search tool calling")
247
+ ] = False,
224
248
  host: Annotated[Optional[str], typer.Option()] = None,
225
249
  port: Annotated[Optional[int], typer.Option()] = None,
226
250
  path: Annotated[str, typer.Option()] = "/agent",
@@ -240,7 +264,9 @@ async def service(
240
264
  rule=rule,
241
265
  toolkit=toolkit,
242
266
  schema=schema,
267
+ web_search=web_search,
243
268
  image_generation=image_generation,
269
+ rules_file=rules_file,
244
270
  ),
245
271
  )
246
272
 
meshagent/cli/cli.py CHANGED
@@ -21,6 +21,7 @@ from meshagent.cli import call
21
21
  from meshagent.cli import cli_mcp
22
22
  from meshagent.cli import chatbot
23
23
  from meshagent.cli import voicebot
24
+ from meshagent.cli import mailbot
24
25
  from meshagent.cli.exec import register as register_exec
25
26
 
26
27
  from meshagent.cli import otel
@@ -59,6 +60,7 @@ app.add_typer(queue.app, name="queue")
59
60
  app.add_typer(cli_mcp.app, name="mcp")
60
61
  app.add_typer(chatbot.app, name="chatbot")
61
62
  app.add_typer(voicebot.app, name="voicebot")
63
+ app.add_typer(mailbot.app, name="mailbot")
62
64
 
63
65
  register_exec(app)
64
66
 
@@ -0,0 +1,250 @@
1
+ from meshagent.agents.mail import MailWorker
2
+
3
+ import typer
4
+ from meshagent.api import ParticipantToken
5
+ from rich import print
6
+ from typing import Annotated, Optional
7
+ from meshagent.tools import Toolkit
8
+ from meshagent.api import RoomClient, WebSocketClientProtocol
9
+ from meshagent.api.helpers import meshagent_base_url, websocket_room_url
10
+ from meshagent.cli import async_typer
11
+ from meshagent.cli.helper import (
12
+ get_client,
13
+ resolve_project_id,
14
+ resolve_api_key,
15
+ resolve_token_jwt,
16
+ resolve_room,
17
+ )
18
+ from meshagent.openai import OpenAIResponsesAdapter
19
+ from meshagent.openai.tools.responses_adapter import ImageGenerationTool, LocalShellTool
20
+ from meshagent.api.services import ServiceHost
21
+
22
+ from meshagent.agents.mail import room_address
23
+ from typing import List
24
+ from pathlib import Path
25
+
26
+ from meshagent.api import RequiredToolkit, RequiredSchema
27
+ from meshagent.openai.tools.responses_adapter import WebSearchTool
28
+
29
+ app = async_typer.AsyncTyper()
30
+
31
+
32
+ def build_mailbot(
33
+ *,
34
+ model: str,
35
+ agent_name: str,
36
+ rule: List[str],
37
+ toolkit: List[str],
38
+ schema: List[str],
39
+ image_generation: Optional[str] = None,
40
+ local_shell: bool,
41
+ computer_use: bool,
42
+ rules_file: Optional[str] = None,
43
+ web_search: Annotated[
44
+ Optional[bool], typer.Option(..., help="Enable web search tool calling")
45
+ ] = False,
46
+ ):
47
+ requirements = []
48
+
49
+ toolkits = []
50
+
51
+ for t in toolkit:
52
+ requirements.append(RequiredToolkit(name=t))
53
+
54
+ for t in schema:
55
+ requirements.append(RequiredSchema(name=t))
56
+
57
+ if rules_file is not None:
58
+ try:
59
+ with open(Path(rules_file).resolve(), "r") as f:
60
+ rule.extend(f.read().splitlines())
61
+ except FileNotFoundError:
62
+ print(f"[yellow]rules file not found at {rules_file}[/yellow]")
63
+
64
+ BaseClass = MailWorker
65
+ if computer_use:
66
+ raise ValueError("computer use is not yet supported for the mail agent")
67
+ else:
68
+ llm_adapter = OpenAIResponsesAdapter(model=model)
69
+
70
+ class CustomMailbot(BaseClass):
71
+ def __init__(self):
72
+ super().__init__(
73
+ llm_adapter=llm_adapter,
74
+ name=agent_name,
75
+ requires=requirements,
76
+ toolkits=toolkits,
77
+ rules=rule if len(rule) > 0 else None,
78
+ )
79
+
80
+ async def start(self, *, room: RoomClient):
81
+ parsed_token = ParticipantToken.from_jwt(
82
+ room.protocol.token, validate=False
83
+ )
84
+ print(
85
+ f"[bold green]Send an email interact with your mailbot: {room_address(project_id=parsed_token.project_id, room_name=room.room_name)}[/bold green]"
86
+ )
87
+ return await super().start(room=room)
88
+
89
+ async def get_thread_toolkits(self, *, thread_context):
90
+ toolkits = await super().get_thread_toolkits(thread_context=thread_context)
91
+
92
+ thread_toolkit = Toolkit(name="thread_toolkit", tools=[])
93
+
94
+ if local_shell:
95
+ thread_toolkit.tools.append(
96
+ LocalShellTool(thread_context=thread_context)
97
+ )
98
+
99
+ if image_generation is not None:
100
+ print("adding openai image gen to thread", flush=True)
101
+ thread_toolkit.tools.append(
102
+ ImageGenerationTool(
103
+ model=image_generation,
104
+ thread_context=thread_context,
105
+ partial_images=3,
106
+ )
107
+ )
108
+
109
+ if web_search:
110
+ thread_toolkit.tools.append(WebSearchTool())
111
+
112
+ toolkits.append(thread_toolkit)
113
+ return toolkits
114
+
115
+ return CustomMailbot
116
+
117
+
118
+ @app.async_command("join")
119
+ async def make_call(
120
+ *,
121
+ project_id: str = None,
122
+ room: Annotated[Optional[str], typer.Option()] = None,
123
+ api_key_id: Annotated[Optional[str], typer.Option()] = None,
124
+ role: str = "agent",
125
+ agent_name: Annotated[str, typer.Option(..., help="Name of the agent to call")],
126
+ token_path: Annotated[Optional[str], typer.Option()] = None,
127
+ rule: Annotated[List[str], typer.Option("--rule", "-r", help="a system rule")] = [],
128
+ rules_file: Optional[str] = None,
129
+ toolkit: Annotated[
130
+ List[str],
131
+ typer.Option("--toolkit", "-t", help="the name or url of a required toolkit"),
132
+ ] = [],
133
+ schema: Annotated[
134
+ List[str],
135
+ typer.Option("--schema", "-s", help="the name or url of a required schema"),
136
+ ] = [],
137
+ model: Annotated[
138
+ str, typer.Option(..., help="Name of the LLM model to use for the chatbot")
139
+ ] = "gpt-4o",
140
+ local_shell: Annotated[
141
+ Optional[bool], typer.Option(..., help="Enable local shell tool calling")
142
+ ] = False,
143
+ web_search: Annotated[
144
+ Optional[bool], typer.Option(..., help="Enable web search tool calling")
145
+ ] = False,
146
+ ):
147
+ account_client = await get_client()
148
+ try:
149
+ project_id = await resolve_project_id(project_id=project_id)
150
+ api_key_id = await resolve_api_key(project_id, api_key_id)
151
+
152
+ room = resolve_room(room)
153
+ jwt = await resolve_token_jwt(
154
+ project_id=project_id,
155
+ api_key_id=api_key_id,
156
+ token_path=token_path,
157
+ name=agent_name,
158
+ role=role,
159
+ room=room,
160
+ )
161
+
162
+ print("[bold green]Connecting to room...[/bold green]", flush=True)
163
+ async with RoomClient(
164
+ protocol=WebSocketClientProtocol(
165
+ url=websocket_room_url(room_name=room, base_url=meshagent_base_url()),
166
+ token=jwt,
167
+ )
168
+ ) as client:
169
+ requirements = []
170
+
171
+ for t in toolkit:
172
+ requirements.append(RequiredToolkit(name=t))
173
+
174
+ for t in schema:
175
+ requirements.append(RequiredSchema(name=t))
176
+
177
+ CustomMailbot = build_mailbot(
178
+ computer_use=None,
179
+ model=model,
180
+ local_shell=local_shell,
181
+ agent_name=agent_name,
182
+ rule=rule,
183
+ toolkit=toolkit,
184
+ schema=schema,
185
+ image_generation=None,
186
+ web_search=web_search,
187
+ rules_file=rules_file,
188
+ )
189
+
190
+ bot = CustomMailbot()
191
+
192
+ await bot.start(room=client)
193
+ try:
194
+ print(
195
+ flush=True,
196
+ )
197
+ await client.protocol.wait_for_close()
198
+ except KeyboardInterrupt:
199
+ await bot.stop()
200
+
201
+ finally:
202
+ await account_client.close()
203
+
204
+
205
+ @app.async_command("service")
206
+ async def service(
207
+ *,
208
+ room: Annotated[Optional[str], typer.Option()] = None,
209
+ agent_name: Annotated[str, typer.Option(..., help="Name of the agent to call")],
210
+ rule: Annotated[List[str], typer.Option("--rule", "-r", help="a system rule")] = [],
211
+ rules_file: Optional[str] = None,
212
+ toolkit: Annotated[
213
+ List[str],
214
+ typer.Option("--toolkit", "-t", help="the name or url of a required toolkit"),
215
+ ] = [],
216
+ schema: Annotated[
217
+ List[str],
218
+ typer.Option("--schema", "-s", help="the name or url of a required schema"),
219
+ ] = [],
220
+ model: Annotated[
221
+ str, typer.Option(..., help="Name of the LLM model to use for the chatbot")
222
+ ] = "gpt-4o",
223
+ local_shell: Annotated[
224
+ Optional[bool], typer.Option(..., help="Enable local shell tool calling")
225
+ ] = False,
226
+ host: Annotated[Optional[str], typer.Option()] = None,
227
+ port: Annotated[Optional[int], typer.Option()] = None,
228
+ path: Annotated[str, typer.Option()] = "/agent",
229
+ ):
230
+ room = resolve_room(room)
231
+
232
+ print("[bold green]Connecting to room...[/bold green]", flush=True)
233
+
234
+ service = ServiceHost(host=host, port=port)
235
+ service.add_path(
236
+ path=path,
237
+ cls=build_mailbot(
238
+ computer_use=None,
239
+ model=model,
240
+ local_shell=local_shell,
241
+ agent_name=agent_name,
242
+ rule=rule,
243
+ toolkit=toolkit,
244
+ schema=schema,
245
+ image_generation=None,
246
+ rules_file=rules_file,
247
+ ),
248
+ )
249
+
250
+ await service.run()
meshagent/cli/projects.py CHANGED
@@ -1,5 +1,6 @@
1
1
  import typer
2
2
  from rich import print
3
+ from typing import Annotated
3
4
  from meshagent.cli import async_typer
4
5
  from meshagent.cli.helper import (
5
6
  get_client,
@@ -22,7 +23,16 @@ async def create(name: str):
22
23
 
23
24
 
24
25
  @app.async_command("list")
25
- async def list():
26
+ async def list(
27
+ o: Annotated[
28
+ str,
29
+ typer.Option(
30
+ "--output",
31
+ "-o",
32
+ help="output format [json|table]",
33
+ ),
34
+ ] = "table",
35
+ ):
26
36
  client = await get_client()
27
37
  projects = await client.list_projects()
28
38
  active_project = await get_active_project()
@@ -30,7 +40,10 @@ async def list():
30
40
  if project["id"] == active_project:
31
41
  project["name"] = "*" + project["name"]
32
42
 
33
- print_json_table(projects["projects"], "id", "name")
43
+ if o == "json":
44
+ print(projects)
45
+ else:
46
+ print_json_table(projects["projects"], "id", "name")
34
47
  await client.close()
35
48
 
36
49
 
meshagent/cli/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.3.1"
1
+ __version__ = "0.4.3"
meshagent/cli/voicebot.py CHANGED
@@ -15,6 +15,7 @@ from typing import List
15
15
 
16
16
  from meshagent.api import RequiredToolkit, RequiredSchema
17
17
  from meshagent.api.services import ServiceHost
18
+ from pathlib import Path
18
19
 
19
20
  try:
20
21
  from meshagent.livekit.agents.voice import VoiceBot
@@ -41,6 +42,7 @@ async def make_call(
41
42
  role: str = "agent",
42
43
  agent_name: Annotated[str, typer.Option(..., help="Name of the agent to call")],
43
44
  rule: Annotated[List[str], typer.Option("--rule", "-r", help="a system rule")] = [],
45
+ rules_file: Optional[str] = None,
44
46
  toolkit: Annotated[
45
47
  List[str],
46
48
  typer.Option("--toolkit", "-t", help="the name or url of a required toolkit"),
@@ -68,6 +70,13 @@ async def make_call(
68
70
  room=room,
69
71
  )
70
72
 
73
+ if rules_file is not None:
74
+ try:
75
+ with open(Path(rules_file).resolve(), "r") as f:
76
+ rule.extend(f.read().splitlines())
77
+ except FileNotFoundError:
78
+ print(f"[yellow]rules file not found at {rules_file}[/yellow]")
79
+
71
80
  print("[bold green]Connecting to room...[/bold green]", flush=True)
72
81
  async with RoomClient(
73
82
  protocol=WebSocketClientProtocol(
@@ -112,6 +121,7 @@ async def service(
112
121
  project_id: str = None,
113
122
  agent_name: Annotated[str, typer.Option(..., help="Name of the agent to call")],
114
123
  rule: Annotated[List[str], typer.Option("--rule", "-r", help="a system rule")] = [],
124
+ rules_file: Optional[str] = None,
115
125
  toolkit: Annotated[
116
126
  List[str],
117
127
  typer.Option("--toolkit", "-t", help="the name or url of a required toolkit"),
@@ -134,6 +144,13 @@ async def service(
134
144
  for t in schema:
135
145
  requirements.append(RequiredSchema(name=t))
136
146
 
147
+ if rules_file is not None:
148
+ try:
149
+ with open(Path(rules_file).resolve(), "r") as f:
150
+ rule.extend(f.read().splitlines())
151
+ except FileNotFoundError:
152
+ print(f"[yellow]rules file not found at {rules_file}[/yellow]")
153
+
137
154
  service = ServiceHost(host=host, port=port)
138
155
 
139
156
  @service.path(path=path)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: meshagent-cli
3
- Version: 0.3.1
3
+ Version: 0.4.3
4
4
  Summary: CLI for Meshagent
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Documentation, https://docs.meshagent.com
@@ -10,12 +10,12 @@ Requires-Python: >=3.12
10
10
  Description-Content-Type: text/markdown
11
11
  Requires-Dist: typer~=0.15
12
12
  Requires-Dist: pydantic-yaml~=1.4
13
- Requires-Dist: meshagent-api~=0.3.1
14
- Requires-Dist: meshagent-agents~=0.3.1
15
- Requires-Dist: meshagent-computers~=0.3.1
16
- Requires-Dist: meshagent-openai~=0.3.1
17
- Requires-Dist: meshagent-tools~=0.3.1
18
- Requires-Dist: meshagent-mcp~=0.3.1
13
+ Requires-Dist: meshagent-api~=0.4.3
14
+ Requires-Dist: meshagent-agents~=0.4.3
15
+ Requires-Dist: meshagent-computers~=0.4.3
16
+ Requires-Dist: meshagent-openai~=0.4.3
17
+ Requires-Dist: meshagent-tools~=0.4.3
18
+ Requires-Dist: meshagent-mcp~=0.4.3
19
19
  Requires-Dist: supabase~=2.15
20
20
  Requires-Dist: fastmcp~=2.8
21
21
  Requires-Dist: opentelemetry-distro~=0.54b1
@@ -5,26 +5,27 @@ meshagent/cli/async_typer.py,sha256=GCeSefBDbpd-V4V8LrvHGUTBMth3HspVMfFa-HUZ0cg,
5
5
  meshagent/cli/auth.py,sha256=tPipbOtHnsrvJ-OUOE-lyfvvIhkTIGYlkgS81hLdyB8,783
6
6
  meshagent/cli/auth_async.py,sha256=mi2-u949M412PAMN-PCdHEiF9hGf0W3m1RAseZX07-w,4058
7
7
  meshagent/cli/call.py,sha256=aVRs-7QDZWxK8jYc71oACNIkHuoDe1KUyfl8EtUbj-0,5306
8
- meshagent/cli/chatbot.py,sha256=88EviswmakCEONA-ELAslYd1FAI8lCjIsvl6Bppzwwg,7910
9
- meshagent/cli/cli.py,sha256=DuTkcCLtMFlNdb69-SnFkIJFIFIcUJj4LAR4-jQvG8I,6447
8
+ meshagent/cli/chatbot.py,sha256=eeQsO_94x34WyWER1H8LnutH6p4xnm3XL6SCeuoV1K0,8888
9
+ meshagent/cli/cli.py,sha256=vxAIGcc_XF9X07PQYxgBK3vtHpWBUvILVEmZhCSbEns,6524
10
10
  meshagent/cli/cli_mcp.py,sha256=BTTAMn3u4i1uTDItFxmxMTsSAvFaWtdI3YdZngHz11g,10641
11
11
  meshagent/cli/cli_secrets.py,sha256=lkfR8tVjOA5KdynAhKCg5Z2EJkgrHFTX43pdB60YiU4,13767
12
12
  meshagent/cli/developer.py,sha256=JWz-qcduCbFopQ1DNGbwrknzFt59KBLIXx8DyD6PxZM,3081
13
13
  meshagent/cli/exec.py,sha256=H5_AOu5vic7ijFmRFotGj0WHf5t3jbEjZRCAp2-S3WQ,11551
14
14
  meshagent/cli/helper.py,sha256=gbd6Tvlp7CObPp3srWm-mbAe7tBD0iacg6PitGWJdtw,4874
15
+ meshagent/cli/mailbot.py,sha256=y5kDGs-PDahxsfTdh8sUc0MRxxzNo653bTqVbQbOg5M,8145
15
16
  meshagent/cli/messaging.py,sha256=cr-oVAu_s8uEPUm3GELSq8yaVDnEWlt02D5V4KbA6wc,6437
16
17
  meshagent/cli/otel.py,sha256=1yoMGivskLV9f7M_LqCLKbttTTAPmFY5yhWXqFzvRN8,4066
17
18
  meshagent/cli/participant_token.py,sha256=N07hblRjj0zDKxl5CQXJjIMmft5s9mWgKZKz-VZyhKw,1400
18
- meshagent/cli/projects.py,sha256=WaO7M-D4ghy0nVpvwZ08ZEcybZ_e_cFe6rEoNxyAWkc,3306
19
+ meshagent/cli/projects.py,sha256=yr2nPyUBepR4V52nInOyVsbsFMflHCiyoKq_JoFgMhc,3564
19
20
  meshagent/cli/queue.py,sha256=iCbFOFRvX5opeCL0YMk2d3l-4vDWIsi1joe0r2gQeMM,3820
20
21
  meshagent/cli/services.py,sha256=1afeMH41Kj0-1uAKB72buWnPFcgaqT4xFVO4FEpTPC0,19308
21
22
  meshagent/cli/sessions.py,sha256=MP7XhrtkUrealdpl8IKrTR3u9sjF15sG175-Y_m7nps,800
22
23
  meshagent/cli/storage.py,sha256=wtLKYFyfsErCePxCG962Xb--moCN-zj9uVCtRPhIpfA,35572
23
- meshagent/cli/version.py,sha256=r4xAFihOf72W9TD-lpMi6ntWSTKTP2SlzKP1ytkjRbI,22
24
- meshagent/cli/voicebot.py,sha256=Ykn9mUhcwl03ZCPDRua6moeNyrvToGPowQfjhPM0zqA,5032
24
+ meshagent/cli/version.py,sha256=Nyg0pmk5ea9-SLCAFEIF96ByFx4-TJFtrqYPN-Zn6g4,22
25
+ meshagent/cli/voicebot.py,sha256=eTPaw4yEIBgNclZxlH8aXv0GquKcUTpqBH9WUuKRwsg,5691
25
26
  meshagent/cli/webhook.py,sha256=r5zct-UBQYSq3BWmnZRrHVOEHVlkY0j8uDxGVn3Pbxo,2902
26
- meshagent_cli-0.3.1.dist-info/METADATA,sha256=jI_bsFT3Phi3SwMFZ6-CS4CCbk3AcOh7TitZoK1vnYk,1448
27
- meshagent_cli-0.3.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
28
- meshagent_cli-0.3.1.dist-info/entry_points.txt,sha256=WRcGGN4vMtvC5Pgl3uRFqsJiQXNoHuLLa-TCSY3gAhQ,52
29
- meshagent_cli-0.3.1.dist-info/top_level.txt,sha256=GlcXnHtRP6m7zlG3Df04M35OsHtNXy_DY09oFwWrH74,10
30
- meshagent_cli-0.3.1.dist-info/RECORD,,
27
+ meshagent_cli-0.4.3.dist-info/METADATA,sha256=5NFZ0_iXJbmtvKB-8g6xpBY8Oclv95b6eeaQDryBPMs,1448
28
+ meshagent_cli-0.4.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
29
+ meshagent_cli-0.4.3.dist-info/entry_points.txt,sha256=WRcGGN4vMtvC5Pgl3uRFqsJiQXNoHuLLa-TCSY3gAhQ,52
30
+ meshagent_cli-0.4.3.dist-info/top_level.txt,sha256=GlcXnHtRP6m7zlG3Df04M35OsHtNXy_DY09oFwWrH74,10
31
+ meshagent_cli-0.4.3.dist-info/RECORD,,