qbraid-cli 0.16.0__tar.gz → 0.16.2__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.
- {qbraid_cli-0.16.0/qbraid_cli.egg-info → qbraid_cli-0.16.2}/PKG-INFO +2 -2
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/pyproject.toml +2 -2
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/agents/app.py +131 -11
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2/qbraid_cli.egg-info}/PKG-INFO +2 -2
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli.egg-info/requires.txt +1 -1
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/LICENSE +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/README.md +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/_build_info.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/_version.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/account/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/account/app.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/admin/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/admin/app.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/admin/headers.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/admin/validation.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/agents/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/agents/permission_response.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/ai/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/ai/app.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/ai/token.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/compute/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/compute/app.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/compute/instances.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/compute/profiles.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/compute/server.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/compute/ssh.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/configure/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/configure/actions.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/configure/app.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/devices/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/devices/app.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/devices/validation.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/activate.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/app.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/create.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/data_handling.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/groups.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/publish.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/registry.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/share.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/exceptions.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/handlers.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/jobs/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/jobs/app.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/jobs/groups.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/kernels/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/kernels/app.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/lab/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/lab/app.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/main.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/pip/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/pip/app.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/pip/hooks.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/projects/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/projects/app.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/py.typed +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/skills/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/skills/app.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/troubleshoot/__init__.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/troubleshoot/app.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli.egg-info/SOURCES.txt +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli.egg-info/dependency_links.txt +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli.egg-info/entry_points.txt +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli.egg-info/top_level.txt +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/setup.cfg +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/tests/test_cli_e2e.py +0 -0
- {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/tests/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: qbraid-cli
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.2
|
|
4
4
|
Summary: Command Line Interface for interacting with all parts of the qBraid platform.
|
|
5
5
|
Author-email: qBraid Development Team <contact@qbraid.com>
|
|
6
6
|
License-Expression: LicenseRef-Proprietary
|
|
@@ -28,7 +28,7 @@ Description-Content-Type: text/markdown
|
|
|
28
28
|
License-File: LICENSE
|
|
29
29
|
Requires-Dist: typer>=0.12.1
|
|
30
30
|
Requires-Dist: rich>=10.11.0
|
|
31
|
-
Requires-Dist: click<=8.
|
|
31
|
+
Requires-Dist: click<=8.5.0
|
|
32
32
|
Requires-Dist: questionary>=2.0.0
|
|
33
33
|
Requires-Dist: qbraid-core>=0.6.5
|
|
34
34
|
Provides-Extra: compute
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "qbraid-cli"
|
|
7
|
-
version = "0.16.
|
|
7
|
+
version = "0.16.2"
|
|
8
8
|
description = "Command Line Interface for interacting with all parts of the qBraid platform."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [{ name = "qBraid Development Team", email = "contact@qbraid.com" }]
|
|
@@ -30,7 +30,7 @@ classifiers = [
|
|
|
30
30
|
dependencies = [
|
|
31
31
|
"typer>=0.12.1",
|
|
32
32
|
"rich>=10.11.0",
|
|
33
|
-
"click<=8.
|
|
33
|
+
"click<=8.5.0",
|
|
34
34
|
"questionary>=2.0.0",
|
|
35
35
|
"qbraid-core>=0.6.5",
|
|
36
36
|
]
|
|
@@ -327,7 +327,12 @@ def agents_list(
|
|
|
327
327
|
remote_flags.extend(["--limit", str(limit)])
|
|
328
328
|
remote_flags.extend(["--page", str(page)])
|
|
329
329
|
|
|
330
|
-
|
|
330
|
+
# Nothing but the payload on stdout when --json is set: a caller
|
|
331
|
+
# piping this into a parser gets the status line too, and Rich
|
|
332
|
+
# would read square brackets in the payload as markup and mangle
|
|
333
|
+
# it. Status goes to stderr, the payload through plain print.
|
|
334
|
+
if not json_output:
|
|
335
|
+
console.print(f"[dim]Listing agents on {compute}...[/dim]")
|
|
331
336
|
result = subprocess.run(
|
|
332
337
|
["ssh", "-o", "ConnectTimeout=10", compute, " ".join(remote_flags)],
|
|
333
338
|
capture_output=True,
|
|
@@ -336,8 +341,29 @@ def agents_list(
|
|
|
336
341
|
timeout=30,
|
|
337
342
|
)
|
|
338
343
|
if result.returncode == 0:
|
|
339
|
-
|
|
344
|
+
if json_output:
|
|
345
|
+
payload = result.stdout.strip()
|
|
346
|
+
if not payload:
|
|
347
|
+
# Exit 0 with nothing on stdout means the remote did
|
|
348
|
+
# not produce a listing -- most likely a remote CLI
|
|
349
|
+
# too old to know --json. Printing the blank through
|
|
350
|
+
# would hand a parser a bare newline while still
|
|
351
|
+
# reporting success; an empty result is "[]", never "".
|
|
352
|
+
typer.echo(
|
|
353
|
+
f"No JSON returned by 'qbraid agents list' on {compute} "
|
|
354
|
+
"(is the remote qbraid-cli recent enough to support --json?)",
|
|
355
|
+
err=True,
|
|
356
|
+
)
|
|
357
|
+
raise typer.Exit(code=1)
|
|
358
|
+
print(payload)
|
|
359
|
+
else:
|
|
360
|
+
# markup=False -- see agents_status. Pre-existing on this
|
|
361
|
+
# branch; the --json path above already bypasses Rich.
|
|
362
|
+
console.print(result.stdout, markup=False)
|
|
340
363
|
else:
|
|
364
|
+
if json_output:
|
|
365
|
+
typer.echo(f"Failed: {result.stderr.strip()}", err=True)
|
|
366
|
+
raise typer.Exit(code=1)
|
|
341
367
|
console.print(f"[red]Failed: {result.stderr.strip()}[/red]")
|
|
342
368
|
return
|
|
343
369
|
|
|
@@ -590,11 +616,28 @@ def agents_discover(
|
|
|
590
616
|
@agents_app.command("status")
|
|
591
617
|
def agents_status(
|
|
592
618
|
session_id: str = typer.Argument(..., help="Session ID (full or prefix)"),
|
|
619
|
+
compute: Optional[str] = typer.Option(None, "--compute", "-c", help="SSH alias for remote compute"),
|
|
593
620
|
):
|
|
594
|
-
"""Show detailed status for an agent session.
|
|
621
|
+
"""Show detailed status for an agent session.
|
|
622
|
+
|
|
623
|
+
Without ``--compute`` this reads the local registry, which is per-host: an
|
|
624
|
+
agent on another machine is simply absent and reports as not found.
|
|
625
|
+
"""
|
|
595
626
|
try:
|
|
596
627
|
from qbraid_core.services.agents import AgentSessionRegistryManager
|
|
597
628
|
|
|
629
|
+
if compute:
|
|
630
|
+
import shlex
|
|
631
|
+
|
|
632
|
+
# markup=False: remote output is already rendered, and Rich would
|
|
633
|
+
# read square brackets in it -- a branch name, a path -- as markup
|
|
634
|
+
# and silently drop them.
|
|
635
|
+
console.print(
|
|
636
|
+
_ssh_cmd(compute, f"qbraid agents status {shlex.quote(session_id)}"),
|
|
637
|
+
markup=False,
|
|
638
|
+
)
|
|
639
|
+
return
|
|
640
|
+
|
|
598
641
|
registry = AgentSessionRegistryManager()
|
|
599
642
|
|
|
600
643
|
# Support prefix and name matching
|
|
@@ -825,11 +868,25 @@ def agents_update(
|
|
|
825
868
|
def agents_kill(
|
|
826
869
|
target: str = typer.Argument(..., help="Agent name, ID prefix, or PID"),
|
|
827
870
|
force: bool = typer.Option(False, "--force", "-f", help="Use SIGKILL instead of SIGTERM"),
|
|
871
|
+
compute: Optional[str] = typer.Option(None, "--compute", "-c", help="SSH alias for remote compute"),
|
|
828
872
|
):
|
|
829
|
-
"""Stop an agent by name, session ID, or PID.
|
|
873
|
+
"""Stop an agent by name, session ID, or PID.
|
|
874
|
+
|
|
875
|
+
With ``--compute`` the agent is stopped on that machine. Without it, an
|
|
876
|
+
agent running elsewhere is simply not in this host's registry and reports
|
|
877
|
+
as not found -- the registry is per-host.
|
|
878
|
+
"""
|
|
830
879
|
try:
|
|
831
880
|
from qbraid_core.services.agents import AgentSessionRegistryManager
|
|
832
881
|
|
|
882
|
+
if compute:
|
|
883
|
+
import shlex
|
|
884
|
+
|
|
885
|
+
flags = " --force" if force else ""
|
|
886
|
+
_ssh_cmd(compute, f"qbraid agents kill {shlex.quote(target)}{flags}")
|
|
887
|
+
console.print(f"[green]Stopped '{target}' on {compute}.[/green]")
|
|
888
|
+
return
|
|
889
|
+
|
|
833
890
|
registry = AgentSessionRegistryManager()
|
|
834
891
|
all_sessions = registry.load_registry().sessions
|
|
835
892
|
|
|
@@ -1529,14 +1586,39 @@ def agents_resume(
|
|
|
1529
1586
|
execution_mode: Optional[ExecutionMode] = typer.Option(
|
|
1530
1587
|
None, "--execution-mode", help="Override the recorded Codex execution mode for this resume."
|
|
1531
1588
|
),
|
|
1589
|
+
compute: Optional[str] = typer.Option(None, "--compute", "-c", help="SSH alias for remote compute"),
|
|
1532
1590
|
):
|
|
1533
1591
|
"""Resume a previous agent session.
|
|
1534
1592
|
|
|
1535
|
-
Resumes in a managed tmux window.
|
|
1593
|
+
Resumes in a managed tmux window. With ``--compute`` the session is resumed
|
|
1594
|
+
on that machine, and a session id is required -- the interactive picker
|
|
1595
|
+
reads the local registry and cannot see another host's sessions.
|
|
1536
1596
|
"""
|
|
1537
1597
|
try:
|
|
1538
1598
|
from qbraid_core.services.agents import AgentLauncher, AgentLauncherError
|
|
1539
1599
|
|
|
1600
|
+
if compute:
|
|
1601
|
+
if session_id is None:
|
|
1602
|
+
console.print(
|
|
1603
|
+
"[red]--compute needs an explicit session id.[/red] The picker "
|
|
1604
|
+
"lists this host's sessions only; use 'qbraid agents list "
|
|
1605
|
+
f"--compute {compute}' to find one."
|
|
1606
|
+
)
|
|
1607
|
+
raise typer.Exit(code=2)
|
|
1608
|
+
import shlex
|
|
1609
|
+
|
|
1610
|
+
flags = ""
|
|
1611
|
+
if name:
|
|
1612
|
+
flags += f" --name {shlex.quote(name)}"
|
|
1613
|
+
if execution_mode:
|
|
1614
|
+
flags += f" --execution-mode {shlex.quote(execution_mode.value)}"
|
|
1615
|
+
# markup=False -- see agents_status.
|
|
1616
|
+
console.print(
|
|
1617
|
+
_ssh_cmd(compute, f"qbraid agents resume {shlex.quote(session_id)}{flags}"),
|
|
1618
|
+
markup=False,
|
|
1619
|
+
)
|
|
1620
|
+
return
|
|
1621
|
+
|
|
1540
1622
|
# Interactive mode if no session_id provided
|
|
1541
1623
|
if session_id is None:
|
|
1542
1624
|
session_id = _interactive_resume(console)
|
|
@@ -1712,6 +1794,12 @@ def agents_send(
|
|
|
1712
1794
|
):
|
|
1713
1795
|
"""Send text to a running agent's terminal."""
|
|
1714
1796
|
try:
|
|
1797
|
+
# Imported before anything else in this try: the `except
|
|
1798
|
+
# AgentLauncherError` clause below cannot be evaluated unless the name
|
|
1799
|
+
# is bound, so a failure in the --compute branch above would raise
|
|
1800
|
+
# UnboundLocalError and bury the real error instead of reporting it.
|
|
1801
|
+
from qbraid_core.services.agents import AgentLauncher, AgentLauncherError
|
|
1802
|
+
|
|
1715
1803
|
if compute:
|
|
1716
1804
|
import shlex
|
|
1717
1805
|
|
|
@@ -1719,8 +1807,6 @@ def agents_send(
|
|
|
1719
1807
|
console.print(f"[green]Sent text to session {session_id} on {compute}.[/green]")
|
|
1720
1808
|
return
|
|
1721
1809
|
|
|
1722
|
-
from qbraid_core.services.agents import AgentLauncher, AgentLauncherError
|
|
1723
|
-
|
|
1724
1810
|
launcher = AgentLauncher()
|
|
1725
1811
|
launcher.send(session_id, text)
|
|
1726
1812
|
console.print(f"[green]Sent text to session {session_id}.[/green]")
|
|
@@ -1748,15 +1834,21 @@ def agents_read(
|
|
|
1748
1834
|
):
|
|
1749
1835
|
"""Read recent terminal output from an agent."""
|
|
1750
1836
|
try:
|
|
1837
|
+
# Imported before anything else in this try: the `except
|
|
1838
|
+
# AgentLauncherError` clause below cannot be evaluated unless the name
|
|
1839
|
+
# is bound, so a failure in the --compute branch above would raise
|
|
1840
|
+
# UnboundLocalError and bury the real error instead of reporting it.
|
|
1841
|
+
from qbraid_core.services.agents import AgentLauncher, AgentLauncherError
|
|
1842
|
+
|
|
1751
1843
|
if compute:
|
|
1752
1844
|
import shlex
|
|
1753
1845
|
|
|
1754
1846
|
output = _ssh_cmd(compute, f"qbraid agents read {shlex.quote(session_id)} --lines {lines}")
|
|
1755
|
-
|
|
1847
|
+
# markup=False -- see agents_status. Terminal output is exactly
|
|
1848
|
+
# where square brackets are most likely, and this was dropping them.
|
|
1849
|
+
console.print(output, markup=False)
|
|
1756
1850
|
return
|
|
1757
1851
|
|
|
1758
|
-
from qbraid_core.services.agents import AgentLauncher, AgentLauncherError
|
|
1759
|
-
|
|
1760
1852
|
launcher = AgentLauncher()
|
|
1761
1853
|
output = launcher.read(session_id, lines)
|
|
1762
1854
|
console.print(output)
|
|
@@ -1779,14 +1871,25 @@ def agents_read(
|
|
|
1779
1871
|
@agents_app.command("approve")
|
|
1780
1872
|
def agents_approve(
|
|
1781
1873
|
session_id: str = typer.Argument(..., help="Session ID (prefix match)"),
|
|
1874
|
+
compute: Optional[str] = typer.Option(None, "--compute", "-c", help="SSH alias for remote compute"),
|
|
1782
1875
|
):
|
|
1783
1876
|
"""Approve a tool-use prompt.
|
|
1784
1877
|
|
|
1785
|
-
Sends 'y' + Enter to the agent's terminal.
|
|
1878
|
+
Sends 'y' + Enter to the agent's terminal. With ``--compute`` the approval
|
|
1879
|
+
is sent on that machine.
|
|
1786
1880
|
"""
|
|
1787
1881
|
try:
|
|
1882
|
+
# Bound before the --compute branch below, which can raise: evaluating
|
|
1883
|
+
# the `except AgentLauncherError` clause needs the name.
|
|
1788
1884
|
from qbraid_core.services.agents import AgentLauncher, AgentLauncherError
|
|
1789
1885
|
|
|
1886
|
+
if compute:
|
|
1887
|
+
import shlex
|
|
1888
|
+
|
|
1889
|
+
_ssh_cmd(compute, f"qbraid agents approve {shlex.quote(session_id)}")
|
|
1890
|
+
console.print(f"[green]Approval sent to session {session_id} on {compute}.[/green]")
|
|
1891
|
+
return
|
|
1892
|
+
|
|
1790
1893
|
launcher = AgentLauncher()
|
|
1791
1894
|
launcher.approve(session_id)
|
|
1792
1895
|
console.print(f"[green]Approval sent to session {session_id}.[/green]")
|
|
@@ -2791,6 +2894,11 @@ def agents_send_to(
|
|
|
2791
2894
|
|
|
2792
2895
|
For multi-recipient / team broadcast, use ``qbraid agents broadcast``.
|
|
2793
2896
|
|
|
2897
|
+
Same-host only: an inbox is a JSONL file under ``~/.qbraid/inboxes/`` on
|
|
2898
|
+
the machine that owns it, so there is no ``--compute``. Cross-host
|
|
2899
|
+
messaging needs a transport, tracked in qBraid-CLI#328 / qbraid-core#307.
|
|
2900
|
+
|
|
2901
|
+
|
|
2794
2902
|
Delivery is a JSONL append at ~/.qbraid/inboxes/<to-session-id>.jsonl
|
|
2795
2903
|
(local host only — cross-host messaging isn't yet supported and will raise
|
|
2796
2904
|
a clear error). Permission rules (leader/worker/observer/reviewer) are
|
|
@@ -2858,6 +2966,10 @@ def agents_broadcast(
|
|
|
2858
2966
|
) -> None:
|
|
2859
2967
|
"""Broadcast to multiple agent inboxes.
|
|
2860
2968
|
|
|
2969
|
+
Same-host only: an inbox is a JSONL file under ``~/.qbraid/inboxes/`` on
|
|
2970
|
+
the machine that owns it, so there is no ``--compute``. Cross-host
|
|
2971
|
+
messaging needs a transport, tracked in qBraid-CLI#328 / qbraid-core#307.
|
|
2972
|
+
|
|
2861
2973
|
Two selectors — pick exactly one:
|
|
2862
2974
|
* ``--team <team_id>`` — every session with that team_id (except sender)
|
|
2863
2975
|
* ``--to A,B,C`` — explicit id/prefix/name list
|
|
@@ -2985,6 +3097,10 @@ def inbox_default( # pylint: disable=too-many-arguments
|
|
|
2985
3097
|
|
|
2986
3098
|
Without a subcommand this reads the inbox (optionally streams with
|
|
2987
3099
|
--follow). Use ``qbraid agents inbox mark-read`` to mark manually.
|
|
3100
|
+
|
|
3101
|
+
Same-host only: an inbox is a JSONL file under ``~/.qbraid/inboxes/`` on
|
|
3102
|
+
the machine that owns it, so there is no ``--compute``. Cross-host
|
|
3103
|
+
messaging needs a transport, tracked in qBraid-CLI#328 / qbraid-core#307.
|
|
2988
3104
|
"""
|
|
2989
3105
|
if ctx.invoked_subcommand is not None:
|
|
2990
3106
|
return
|
|
@@ -3092,6 +3208,10 @@ def agents_team(
|
|
|
3092
3208
|
) -> None:
|
|
3093
3209
|
"""Show a team roster with unread counts.
|
|
3094
3210
|
|
|
3211
|
+
Same-host only: an inbox is a JSONL file under ``~/.qbraid/inboxes/`` on
|
|
3212
|
+
the machine that owns it, so there is no ``--compute``. Cross-host
|
|
3213
|
+
messaging needs a transport, tracked in qBraid-CLI#328 / qbraid-core#307.
|
|
3214
|
+
|
|
3095
3215
|
Answers the leader-orchestrator question "who is on my team, how many
|
|
3096
3216
|
unread messages do they have, and what was the last thing they heard from
|
|
3097
3217
|
anyone?" — which today requires peeking each worker's inbox individually.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: qbraid-cli
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.2
|
|
4
4
|
Summary: Command Line Interface for interacting with all parts of the qBraid platform.
|
|
5
5
|
Author-email: qBraid Development Team <contact@qbraid.com>
|
|
6
6
|
License-Expression: LicenseRef-Proprietary
|
|
@@ -28,7 +28,7 @@ Description-Content-Type: text/markdown
|
|
|
28
28
|
License-File: LICENSE
|
|
29
29
|
Requires-Dist: typer>=0.12.1
|
|
30
30
|
Requires-Dist: rich>=10.11.0
|
|
31
|
-
Requires-Dist: click<=8.
|
|
31
|
+
Requires-Dist: click<=8.5.0
|
|
32
32
|
Requires-Dist: questionary>=2.0.0
|
|
33
33
|
Requires-Dist: qbraid-core>=0.6.5
|
|
34
34
|
Provides-Extra: compute
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|