meshagent-cli 0.0.36__py3-none-any.whl → 0.0.38__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/tty.py CHANGED
@@ -1,4 +1,3 @@
1
- import pathlib
2
1
  import sys
3
2
  import tty
4
3
  import termios
@@ -10,27 +9,24 @@ import typer
10
9
  from rich import print
11
10
  import aiohttp
12
11
 
13
- from meshagent.api import RoomClient, ParticipantToken
12
+ from meshagent.api import ParticipantToken
14
13
  from meshagent.cli import async_typer
15
14
  from meshagent.cli.helper import (
16
15
  get_client,
17
- print_json_table,
18
- set_active_project,
19
16
  resolve_project_id,
20
17
  resolve_api_key,
21
18
  )
22
19
 
23
- import os
24
20
 
25
21
  app = async_typer.AsyncTyper()
26
22
 
23
+
27
24
  @app.async_command("connect")
28
25
  async def tty_command(
29
26
  *,
30
27
  project_id: str = None,
31
28
  room: Annotated[str, typer.Option()],
32
29
  api_key_id: Annotated[Optional[str], typer.Option()] = None,
33
-
34
30
  ):
35
31
  """Open an interactive websocket‑based TTY."""
36
32
  client = await get_client()
@@ -38,18 +34,20 @@ async def tty_command(
38
34
  project_id = await resolve_project_id(project_id=project_id)
39
35
  api_key_id = await resolve_api_key(project_id=project_id, api_key_id=api_key_id)
40
36
 
41
- key = (await client.decrypt_project_api_key(project_id=project_id, id=api_key_id))["token"]
42
-
43
37
  token = ParticipantToken(
44
- name="tty",
45
- project_id=project_id,
46
- api_key_id=api_key_id
38
+ name="tty", project_id=project_id, api_key_id=api_key_id
47
39
  )
48
40
 
41
+ key = (
42
+ await client.decrypt_project_api_key(project_id=project_id, id=api_key_id)
43
+ )["token"]
44
+
49
45
  token.add_role_grant(role="user")
50
46
  token.add_room_grant(room)
51
47
 
52
- ws_url = websocket_room_url(room_name=room)+"/tty?token={token.to_jwt(token=key)}"
48
+ ws_url = (
49
+ websocket_room_url(room_name=room) + f"/tty?token={token.to_jwt(token=key)}"
50
+ )
53
51
 
54
52
  print(f"[bold green]Connecting to[/bold green] {room}")
55
53
 
@@ -57,23 +55,20 @@ async def tty_command(
57
55
  old_tty_settings = termios.tcgetattr(sys.stdin)
58
56
  try:
59
57
  async with aiohttp.ClientSession() as session:
60
-
61
58
  async with session.ws_connect(ws_url) as websocket:
62
-
63
59
  print(f"[bold green]Connected to[/bold green] {room}")
64
60
 
65
61
  tty.setraw(sys.stdin)
66
62
 
67
63
  async def recv_from_websocket():
68
64
  async for message in websocket:
69
-
70
65
  if message.type == aiohttp.WSMsgType.CLOSE:
71
66
  await websocket.close()
72
-
67
+
73
68
  elif message.type == aiohttp.WSMsgType.ERROR:
74
69
  await websocket.close()
75
-
76
- data : bytes = message.data
70
+
71
+ data: bytes = message.data
77
72
  sys.stdout.write(data.decode("utf-8"))
78
73
  sys.stdout.flush()
79
74
 
@@ -83,19 +78,18 @@ async def tty_command(
83
78
  reader = asyncio.StreamReader()
84
79
  protocol = asyncio.StreamReaderProtocol(reader)
85
80
  await loop.connect_read_pipe(lambda: protocol, sys.stdin)
86
-
81
+
87
82
  while True:
88
83
  # Read one character at a time from stdin without blocking the event loop.
89
84
 
90
-
91
85
  data = await reader.read(1)
92
86
  if not data:
93
87
  break
94
88
 
95
89
  if websocket.closed:
96
90
  break
97
-
98
- if data == b'\x03':
91
+
92
+ if data == b"\x03":
99
93
  print("<CTRL-C>\n")
100
94
  break
101
95
 
@@ -105,18 +99,20 @@ async def tty_command(
105
99
  await websocket.close(code=1000)
106
100
  break
107
101
 
108
- done, pending = await asyncio.wait([
109
- asyncio.create_task(recv_from_websocket()),
110
- asyncio.create_task(send_to_websocket())
111
- ], return_when=asyncio.FIRST_COMPLETED)
102
+ done, pending = await asyncio.wait(
103
+ [
104
+ asyncio.create_task(recv_from_websocket()),
105
+ asyncio.create_task(send_to_websocket()),
106
+ ],
107
+ return_when=asyncio.FIRST_COMPLETED,
108
+ )
112
109
 
113
110
  for task in pending:
114
- task.cancel()
111
+ task.cancel()
115
112
 
116
113
  finally:
117
114
  # Restore original terminal settings even if the coroutine is cancelled.
118
115
  termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_tty_settings)
119
116
 
120
117
  finally:
121
-
122
118
  await client.close()
meshagent/cli/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.0.36"
1
+ __version__ = "0.0.38"
meshagent/cli/voicebot.py CHANGED
@@ -1,34 +1,36 @@
1
-
2
1
  import typer
3
2
  from rich import print
4
3
  from typing import Annotated, Optional
5
- import json
6
- import aiohttp
7
- from meshagent.api import RoomClient, ParticipantToken, WebSocketClientProtocol, RoomException
4
+ from meshagent.api import RoomClient, WebSocketClientProtocol, RoomException
8
5
  from meshagent.api.helpers import meshagent_base_url, websocket_room_url
9
- from meshagent.api.services import send_webhook
10
6
  from meshagent.cli import async_typer
11
- from meshagent.cli.helper import get_client, resolve_project_id, resolve_api_key, resolve_token_jwt, resolve_room
12
- from meshagent.openai import OpenAIResponsesAdapter
7
+ from meshagent.cli.helper import (
8
+ get_client,
9
+ resolve_project_id,
10
+ resolve_api_key,
11
+ resolve_token_jwt,
12
+ resolve_room,
13
+ )
13
14
  from typing import List
14
15
 
15
16
  from meshagent.api import RequiredToolkit, RequiredSchema
16
17
  from meshagent.api.services import ServiceHost
17
18
 
18
19
  try:
19
-
20
20
  from meshagent.livekit.agents.voice import VoiceBot
21
21
 
22
22
  except ImportError:
23
-
24
- class VoiceBot:
25
- def __init__(**kwargs):
26
- raise RoomException("meshagent.livekit module not found, voicebots are not available")
27
23
 
24
+ class VoiceBot:
25
+ def __init__(self, **kwargs):
26
+ raise RoomException(
27
+ "meshagent.livekit module not found, voicebots are not available"
28
+ )
28
29
 
29
30
 
30
31
  app = async_typer.AsyncTyper()
31
32
 
33
+
32
34
  @app.async_command("join")
33
35
  async def make_call(
34
36
  *,
@@ -39,30 +41,45 @@ async def make_call(
39
41
  role: str = "agent",
40
42
  agent_name: Annotated[str, typer.Option(..., help="Name of the agent to call")],
41
43
  rule: Annotated[List[str], typer.Option("--rule", "-r", help="a system rule")] = [],
42
- toolkit: Annotated[List[str], typer.Option("--toolkit", "-t", help="the name or url of a required toolkit")] = [],
43
- schema: Annotated[List[str], typer.Option("--schema", "-s", help="the name or url of a required schema")] = [],
44
+ toolkit: Annotated[
45
+ List[str],
46
+ typer.Option("--toolkit", "-t", help="the name or url of a required toolkit"),
47
+ ] = [],
48
+ schema: Annotated[
49
+ List[str],
50
+ typer.Option("--schema", "-s", help="the name or url of a required schema"),
51
+ ] = [],
44
52
  auto_greet_message: Annotated[Optional[str], typer.Option()] = None,
45
53
  auto_greet_prompt: Annotated[Optional[str], typer.Option()] = None,
46
- token_path: Annotated[Optional[str], typer.Option()] = None,
54
+ token_path: Annotated[Optional[str], typer.Option()] = None,
47
55
  ):
48
56
  account_client = await get_client()
49
57
  try:
50
58
  project_id = await resolve_project_id(project_id=project_id)
51
59
  api_key_id = await resolve_api_key(project_id, api_key_id)
52
-
60
+
53
61
  room = resolve_room(room)
54
- jwt = await resolve_token_jwt(project_id=project_id, api_key_id=api_key_id, token_path=token_path, name=name, role=role, room=room)
55
-
62
+ jwt = await resolve_token_jwt(
63
+ project_id=project_id,
64
+ api_key_id=api_key_id,
65
+ token_path=token_path,
66
+ name=name,
67
+ role=role,
68
+ room=room,
69
+ )
70
+
56
71
  print("[bold green]Connecting to room...[/bold green]", flush=True)
57
72
  async with RoomClient(
58
- protocol=WebSocketClientProtocol(url=websocket_room_url(room_name=room, base_url=meshagent_base_url()), token=jwt)
73
+ protocol=WebSocketClientProtocol(
74
+ url=websocket_room_url(room_name=room, base_url=meshagent_base_url()),
75
+ token=jwt,
76
+ )
59
77
  ) as client:
60
-
61
78
  requirements = []
62
79
 
63
80
  for t in toolkit:
64
81
  requirements.append(RequiredToolkit(name=t))
65
-
82
+
66
83
  for t in schema:
67
84
  requirements.append(RequiredSchema(name=t))
68
85
 
@@ -71,16 +88,20 @@ async def make_call(
71
88
  auto_greet_prompt=auto_greet_prompt,
72
89
  name=agent_name,
73
90
  requires=requirements,
74
- rules=rule if len(rule) > 0 else None
91
+ rules=rule if len(rule) > 0 else None,
75
92
  )
76
93
 
77
94
  await bot.start(room=client)
78
95
 
79
96
  try:
97
+ print(
98
+ f"[bold green]Open the studio to interact with your agent: {meshagent_base_url().replace('api.', 'studio.')}/projects/{project_id}/rooms/{client.room_name}[/bold green]",
99
+ flush=True,
100
+ )
80
101
  await client.protocol.wait_for_close()
81
102
  except KeyboardInterrupt:
82
103
  await bot.stop()
83
-
104
+
84
105
  finally:
85
106
  await account_client.close()
86
107
 
@@ -91,27 +112,29 @@ async def service(
91
112
  project_id: str = None,
92
113
  agent_name: Annotated[str, typer.Option(..., help="Name of the agent to call")],
93
114
  rule: Annotated[List[str], typer.Option("--rule", "-r", help="a system rule")] = [],
94
- toolkit: Annotated[List[str], typer.Option("--toolkit", "-t", help="the name or url of a required toolkit")] = [],
95
- schema: Annotated[List[str], typer.Option("--schema", "-s", help="the name or url of a required schema")] = [],
115
+ toolkit: Annotated[
116
+ List[str],
117
+ typer.Option("--toolkit", "-t", help="the name or url of a required toolkit"),
118
+ ] = [],
119
+ schema: Annotated[
120
+ List[str],
121
+ typer.Option("--schema", "-s", help="the name or url of a required schema"),
122
+ ] = [],
96
123
  auto_greet_message: Annotated[Optional[str], typer.Option()] = None,
97
124
  auto_greet_prompt: Annotated[Optional[str], typer.Option()] = None,
98
-
99
- host: Annotated[Optional[str], typer.Option()] = None,
100
- port: Annotated[Optional[int], typer.Option()] = None,
125
+ host: Annotated[Optional[str], typer.Option()] = None,
126
+ port: Annotated[Optional[int], typer.Option()] = None,
101
127
  path: Annotated[str, typer.Option()] = "/agent",
102
128
  ):
103
129
  requirements = []
104
130
 
105
131
  for t in toolkit:
106
132
  requirements.append(RequiredToolkit(name=t))
107
-
133
+
108
134
  for t in schema:
109
135
  requirements.append(RequiredSchema(name=t))
110
136
 
111
- service = ServiceHost(
112
- host=host,
113
- port=port
114
- )
137
+ service = ServiceHost(host=host, port=port)
115
138
 
116
139
  @service.path(path=path)
117
140
  class CustomVoiceBot(VoiceBot):
@@ -121,7 +144,7 @@ async def service(
121
144
  auto_greet_prompt=auto_greet_prompt,
122
145
  name=agent_name,
123
146
  requires=requirements,
124
- rules=rule if len(rule) > 0 else None
147
+ rules=rule if len(rule) > 0 else None,
125
148
  )
126
149
 
127
150
  await service.run()
meshagent/cli/webhook.py CHANGED
@@ -12,6 +12,7 @@ app = async_typer.AsyncTyper()
12
12
  # Webhook commands
13
13
  # ---------------------------------------------------------------------------
14
14
 
15
+
15
16
  @app.async_command("create")
16
17
  async def webhook_create(
17
18
  *,
@@ -21,12 +22,12 @@ async def webhook_create(
21
22
  event: Annotated[
22
23
  List[str],
23
24
  typer.Option(
24
- "-e",
25
- "--event",
26
- help="Event to subscribe to (repeat for multiple)."
25
+ "-e", "--event", help="Event to subscribe to (repeat for multiple)."
27
26
  ),
28
27
  ],
29
- description: Annotated[str, typer.Option(default="", help="Optional description")] = "",
28
+ description: Annotated[
29
+ str, typer.Option(default="", help="Optional description")
30
+ ] = "",
30
31
  action: Annotated[
31
32
  Optional[str],
32
33
  typer.Option("--action", help="Optional action name delivered with each call"),
@@ -69,7 +70,15 @@ async def webhook_list(
69
70
  try:
70
71
  project_id = await resolve_project_id(project_id=project_id)
71
72
  hooks = await client.list_project_webhooks(project_id)
72
- print_json_table(hooks.get("webhooks"), "id","name","description","url","events","action")
73
+ print_json_table(
74
+ hooks.get("webhooks"),
75
+ "id",
76
+ "name",
77
+ "description",
78
+ "url",
79
+ "events",
80
+ "action",
81
+ )
73
82
  finally:
74
83
  await client.close()
75
84
 
@@ -0,0 +1,35 @@
1
+ Metadata-Version: 2.4
2
+ Name: meshagent-cli
3
+ Version: 0.0.38
4
+ Summary: CLI for Meshagent
5
+ License-Expression: Apache-2.0
6
+ Project-URL: Documentation, https://docs.meshagent.com
7
+ Project-URL: Website, https://www.meshagent.com
8
+ Project-URL: Source, https://www.meshagent.com
9
+ Requires-Python: >=3.12
10
+ Description-Content-Type: text/markdown
11
+ Requires-Dist: typer~=0.15
12
+ Requires-Dist: pydantic-yaml~=1.4
13
+ Requires-Dist: meshagent-api~=0.0.38
14
+ Requires-Dist: meshagent-agents~=0.0.38
15
+ Requires-Dist: meshagent-tools~=0.0.38
16
+ Requires-Dist: meshagent-mcp~=0.0.38
17
+ Requires-Dist: supabase~=2.15
18
+ Requires-Dist: fastmcp~=2.8
19
+ Requires-Dist: opentelemetry-distro~=0.54b1
20
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http~=1.33
21
+ Requires-Dist: art~=6.5
22
+
23
+ ## MeshAgent CLI
24
+
25
+ The ``meshagent.cli`` package installs everything you need to streamline room and agent management from your terminal. The CLI assembles submodules for authentication, projects, API keys, participant tokens, messaging, storage, agents, webhooks, and more.
26
+ Check out the [CLI Quickstart](https://docs.meshagent.com/cli/getting_started) for more details.
27
+
28
+ ---
29
+ ### Learn more about MeshAgent on our website or check out the docs for additional examples!
30
+
31
+ **Website**: [www.meshagent.com](https://www.meshagent.com/)
32
+
33
+ **Documentation**: [docs.meshagent.com](https://docs.meshagent.com/)
34
+
35
+ ---
@@ -0,0 +1,29 @@
1
+ meshagent/cli/__init__.py,sha256=X78Z4yEg5XfkNKH0HiIdG4k1q5ktB-ampTuXHLNFrAw,58
2
+ meshagent/cli/agent.py,sha256=bKumeTB87aICqCQwqvAf7ES5WcSZ9Tkp1RpZxMluIlE,10591
3
+ meshagent/cli/api_keys.py,sha256=4mBqyh_WAogaMIYhRBQOCjfsSSp1RY9BqiI_6DaGLmk,4963
4
+ meshagent/cli/async_typer.py,sha256=GCeSefBDbpd-V4V8LrvHGUTBMth3HspVMfFa-HUZ0cg,898
5
+ meshagent/cli/auth.py,sha256=tPipbOtHnsrvJ-OUOE-lyfvvIhkTIGYlkgS81hLdyB8,783
6
+ meshagent/cli/auth_async.py,sha256=mi2-u949M412PAMN-PCdHEiF9hGf0W3m1RAseZX07-w,4058
7
+ meshagent/cli/call.py,sha256=CMPMHbMtsXqFbekuo2ZgupSzXvnKrODBaf2bZugW0yc,4646
8
+ meshagent/cli/chatbot.py,sha256=pK-_G3CiMbV-NC0iXzbjztu4f-ZAeXNzcmOB-HxJWQo,7928
9
+ meshagent/cli/cli.py,sha256=3WgplELmgV6OqfCuRyvm9DvqCCwmGI8yCeeic7oKYUw,6315
10
+ meshagent/cli/cli_mcp.py,sha256=BTTAMn3u4i1uTDItFxmxMTsSAvFaWtdI3YdZngHz11g,10641
11
+ meshagent/cli/cli_secrets.py,sha256=lkfR8tVjOA5KdynAhKCg5Z2EJkgrHFTX43pdB60YiU4,13767
12
+ meshagent/cli/developer.py,sha256=JWz-qcduCbFopQ1DNGbwrknzFt59KBLIXx8DyD6PxZM,3081
13
+ meshagent/cli/helper.py,sha256=gbd6Tvlp7CObPp3srWm-mbAe7tBD0iacg6PitGWJdtw,4874
14
+ meshagent/cli/messaging.py,sha256=cr-oVAu_s8uEPUm3GELSq8yaVDnEWlt02D5V4KbA6wc,6437
15
+ meshagent/cli/otel.py,sha256=1yoMGivskLV9f7M_LqCLKbttTTAPmFY5yhWXqFzvRN8,4066
16
+ meshagent/cli/participant_token.py,sha256=N07hblRjj0zDKxl5CQXJjIMmft5s9mWgKZKz-VZyhKw,1400
17
+ meshagent/cli/projects.py,sha256=WaO7M-D4ghy0nVpvwZ08ZEcybZ_e_cFe6rEoNxyAWkc,3306
18
+ meshagent/cli/services.py,sha256=og4iOwxIT-TgYtTBExGbrABQJva9yo5PjeD_eFLw6dU,11358
19
+ meshagent/cli/sessions.py,sha256=MP7XhrtkUrealdpl8IKrTR3u9sjF15sG175-Y_m7nps,800
20
+ meshagent/cli/storage.py,sha256=Q3ajuC6j4GLlU4jZoUW_Zsl1dOr04vzLibw2DPedJJ4,35564
21
+ meshagent/cli/tty.py,sha256=GBVz5XoAKTCoczMnnJrLLmQiAHTvHE6HYxxSYfw-UZc,3988
22
+ meshagent/cli/version.py,sha256=R5QxTjVaID7odO0eBWpOnyCjNQxBZ7cpyruM_NMOoDc,23
23
+ meshagent/cli/voicebot.py,sha256=Ykn9mUhcwl03ZCPDRua6moeNyrvToGPowQfjhPM0zqA,5032
24
+ meshagent/cli/webhook.py,sha256=r5zct-UBQYSq3BWmnZRrHVOEHVlkY0j8uDxGVn3Pbxo,2902
25
+ meshagent_cli-0.0.38.dist-info/METADATA,sha256=z9NypcG9qqZijrDiDs5g0P1XTvwUKVC47n1HJeGeeLE,1338
26
+ meshagent_cli-0.0.38.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
+ meshagent_cli-0.0.38.dist-info/entry_points.txt,sha256=WRcGGN4vMtvC5Pgl3uRFqsJiQXNoHuLLa-TCSY3gAhQ,52
28
+ meshagent_cli-0.0.38.dist-info/top_level.txt,sha256=GlcXnHtRP6m7zlG3Df04M35OsHtNXy_DY09oFwWrH74,10
29
+ meshagent_cli-0.0.38.dist-info/RECORD,,
@@ -1,28 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: meshagent-cli
3
- Version: 0.0.36
4
- Summary: CLI for Meshagent
5
- License-Expression: Apache-2.0
6
- Project-URL: Documentation, https://docs.meshagent.com
7
- Project-URL: Website, https://www.meshagent.com
8
- Project-URL: Source, https://www.meshagent.com
9
- Requires-Python: >=3.12
10
- Description-Content-Type: text/markdown
11
- Requires-Dist: typer~=0.15
12
- Requires-Dist: pydantic-yaml~=1.4
13
- Requires-Dist: meshagent-api~=0.0.36
14
- Requires-Dist: meshagent-agents~=0.0.36
15
- Requires-Dist: meshagent-tools~=0.0.36
16
- Requires-Dist: meshagent-mcp~=0.0.36
17
- Requires-Dist: supabase~=2.15
18
- Requires-Dist: fastmcp~=2.8
19
- Requires-Dist: opentelemetry-distro~=0.54b1
20
- Requires-Dist: opentelemetry-exporter-otlp-proto-http~=1.33
21
-
22
- ### Meshagent CLI
23
-
24
-
25
-
26
-
27
-
28
-
@@ -1,29 +0,0 @@
1
- meshagent/cli/__init__.py,sha256=8zLGg-DfQhnDl2Ky0n-zXpN-8e-g7iR0AcaI4l4Vvpk,32
2
- meshagent/cli/agent.py,sha256=0VjwJkwZ-G637Mps3OtxxWIfjWbrirJ4TTq2Idvjtug,10023
3
- meshagent/cli/api_keys.py,sha256=VZynVFCBwxcwJ6dtxcoqKB91B0_QsUfJTim4vUXGvKc,4550
4
- meshagent/cli/async_typer.py,sha256=GCeSefBDbpd-V4V8LrvHGUTBMth3HspVMfFa-HUZ0cg,898
5
- meshagent/cli/auth.py,sha256=pZQwYTNWQOWTqpyDrkQLNKuidH-wn9GNE5yEJoxn3-g,767
6
- meshagent/cli/auth_async.py,sha256=run_J11mRPJQ6BI_aAtV_3O3h52eAl1EOnHuotwhoqQ,4018
7
- meshagent/cli/call.py,sha256=-6Bf5PCVcsuLMgDpG1g3GiY3S5rgs_-CWgWX4C6AXwg,4739
8
- meshagent/cli/chatbot.py,sha256=1MDzQOdNPyyux50D3rre_HhqXlySo8tBVfnDu2_std4,7455
9
- meshagent/cli/cli.py,sha256=HbMyzks8LTDz-D6pGV97OHZAiAX39VqS3DrZZB06Y5A,6166
10
- meshagent/cli/cli_mcp.py,sha256=SG0r-cL3P7eu-fbwB-1WgjQPCmxKqQBh-X3kTKDli-E,9536
11
- meshagent/cli/cli_secrets.py,sha256=U0kdzN3zt7JIqzdRLynAjxdvAsI0enesBd_m7TeXjnQ,13629
12
- meshagent/cli/developer.py,sha256=5eoDr3kfi-IufA5d6OESqNr739Bdut_IFBtT3nq0xZU,3002
13
- meshagent/cli/helper.py,sha256=39_oznxO4sCi3namCJzYC0eWqeeGNlen1zlOuWF43os,4785
14
- meshagent/cli/messaging.py,sha256=bHMecKtVwY8P11itXMIvaLxPv-Zm6SpgrXnLDppb4Gc,6282
15
- meshagent/cli/otel.py,sha256=6XaCrffRwPnQWp2KqGBAz4oPZUdlT6xh5kc-JKanJm4,4056
16
- meshagent/cli/participant_token.py,sha256=uCGmlUgNOfarYGkDZpzreXwnv9AJrM76tu5Lt690vYU,1456
17
- meshagent/cli/projects.py,sha256=EQfbO9_GQKkjlFcaSHQfIxqIxsmFR3FbH5Fd17I5IPk,3305
18
- meshagent/cli/services.py,sha256=pMAyLg0eEO33fhRiin5q0KbNVoTzQyT5wSDgvDqeRYM,11241
19
- meshagent/cli/sessions.py,sha256=WWvuztYqRfthSq6ztwL_eQ_sz9JRc33jcN6p7YyM_Fs,782
20
- meshagent/cli/storage.py,sha256=Se_4xhxiihIovSR1ajlEWo_YZ12G7eUY_-lvifJ8pjo,33806
21
- meshagent/cli/tty.py,sha256=DkgeYQckjil191HNoEGHmheniCi41XNUSMpYY1ilAic,4099
22
- meshagent/cli/version.py,sha256=oSKhQHo_8dYEVv3A19nCmQysoh4TbOzHl508xX9iHoo,23
23
- meshagent/cli/voicebot.py,sha256=lkiFHL2vhQuknQU5b2fbLafqzfycDik8DGZ8PkuK1z0,4713
24
- meshagent/cli/webhook.py,sha256=KBl8U1TcOX3z2uoyH4YMuUuw0vSVX7xpRxYvzxI5c-Y,2811
25
- meshagent_cli-0.0.36.dist-info/METADATA,sha256=TW6N-7Duj-FnJA6C5NkWpKBF3ovNE18HHcNK6MQKCHM,731
26
- meshagent_cli-0.0.36.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
27
- meshagent_cli-0.0.36.dist-info/entry_points.txt,sha256=WRcGGN4vMtvC5Pgl3uRFqsJiQXNoHuLLa-TCSY3gAhQ,52
28
- meshagent_cli-0.0.36.dist-info/top_level.txt,sha256=GlcXnHtRP6m7zlG3Df04M35OsHtNXy_DY09oFwWrH74,10
29
- meshagent_cli-0.0.36.dist-info/RECORD,,