qbraid-cli 0.16.1__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.1/qbraid_cli.egg-info → qbraid_cli-0.16.2}/PKG-INFO +1 -1
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/pyproject.toml +1 -1
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/agents/app.py +79 -5
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2/qbraid_cli.egg-info}/PKG-INFO +1 -1
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/LICENSE +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/README.md +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/_build_info.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/_version.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/account/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/account/app.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/admin/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/admin/app.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/admin/headers.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/admin/validation.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/agents/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/agents/permission_response.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/ai/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/ai/app.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/ai/token.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/compute/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/compute/app.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/compute/instances.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/compute/profiles.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/compute/server.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/compute/ssh.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/configure/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/configure/actions.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/configure/app.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/devices/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/devices/app.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/devices/validation.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/envs/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/envs/activate.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/envs/app.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/envs/create.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/envs/data_handling.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/envs/groups.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/envs/publish.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/envs/registry.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/envs/share.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/exceptions.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/handlers.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/jobs/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/jobs/app.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/jobs/groups.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/kernels/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/kernels/app.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/lab/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/lab/app.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/main.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/pip/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/pip/app.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/pip/hooks.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/projects/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/projects/app.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/py.typed +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/skills/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/skills/app.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/troubleshoot/__init__.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli/troubleshoot/app.py +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli.egg-info/SOURCES.txt +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli.egg-info/dependency_links.txt +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli.egg-info/entry_points.txt +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli.egg-info/requires.txt +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/qbraid_cli.egg-info/top_level.txt +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/setup.cfg +0 -0
- {qbraid_cli-0.16.1 → qbraid_cli-0.16.2}/tests/test_cli_e2e.py +0 -0
- {qbraid_cli-0.16.1 → 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
|
|
@@ -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" }]
|
|
@@ -357,7 +357,9 @@ def agents_list(
|
|
|
357
357
|
raise typer.Exit(code=1)
|
|
358
358
|
print(payload)
|
|
359
359
|
else:
|
|
360
|
-
|
|
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)
|
|
361
363
|
else:
|
|
362
364
|
if json_output:
|
|
363
365
|
typer.echo(f"Failed: {result.stderr.strip()}", err=True)
|
|
@@ -614,11 +616,28 @@ def agents_discover(
|
|
|
614
616
|
@agents_app.command("status")
|
|
615
617
|
def agents_status(
|
|
616
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"),
|
|
617
620
|
):
|
|
618
|
-
"""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
|
+
"""
|
|
619
626
|
try:
|
|
620
627
|
from qbraid_core.services.agents import AgentSessionRegistryManager
|
|
621
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
|
+
|
|
622
641
|
registry = AgentSessionRegistryManager()
|
|
623
642
|
|
|
624
643
|
# Support prefix and name matching
|
|
@@ -1567,14 +1586,39 @@ def agents_resume(
|
|
|
1567
1586
|
execution_mode: Optional[ExecutionMode] = typer.Option(
|
|
1568
1587
|
None, "--execution-mode", help="Override the recorded Codex execution mode for this resume."
|
|
1569
1588
|
),
|
|
1589
|
+
compute: Optional[str] = typer.Option(None, "--compute", "-c", help="SSH alias for remote compute"),
|
|
1570
1590
|
):
|
|
1571
1591
|
"""Resume a previous agent session.
|
|
1572
1592
|
|
|
1573
|
-
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.
|
|
1574
1596
|
"""
|
|
1575
1597
|
try:
|
|
1576
1598
|
from qbraid_core.services.agents import AgentLauncher, AgentLauncherError
|
|
1577
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
|
+
|
|
1578
1622
|
# Interactive mode if no session_id provided
|
|
1579
1623
|
if session_id is None:
|
|
1580
1624
|
session_id = _interactive_resume(console)
|
|
@@ -1800,7 +1844,9 @@ def agents_read(
|
|
|
1800
1844
|
import shlex
|
|
1801
1845
|
|
|
1802
1846
|
output = _ssh_cmd(compute, f"qbraid agents read {shlex.quote(session_id)} --lines {lines}")
|
|
1803
|
-
|
|
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)
|
|
1804
1850
|
return
|
|
1805
1851
|
|
|
1806
1852
|
launcher = AgentLauncher()
|
|
@@ -1825,14 +1871,25 @@ def agents_read(
|
|
|
1825
1871
|
@agents_app.command("approve")
|
|
1826
1872
|
def agents_approve(
|
|
1827
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"),
|
|
1828
1875
|
):
|
|
1829
1876
|
"""Approve a tool-use prompt.
|
|
1830
1877
|
|
|
1831
|
-
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.
|
|
1832
1880
|
"""
|
|
1833
1881
|
try:
|
|
1882
|
+
# Bound before the --compute branch below, which can raise: evaluating
|
|
1883
|
+
# the `except AgentLauncherError` clause needs the name.
|
|
1834
1884
|
from qbraid_core.services.agents import AgentLauncher, AgentLauncherError
|
|
1835
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
|
+
|
|
1836
1893
|
launcher = AgentLauncher()
|
|
1837
1894
|
launcher.approve(session_id)
|
|
1838
1895
|
console.print(f"[green]Approval sent to session {session_id}.[/green]")
|
|
@@ -2837,6 +2894,11 @@ def agents_send_to(
|
|
|
2837
2894
|
|
|
2838
2895
|
For multi-recipient / team broadcast, use ``qbraid agents broadcast``.
|
|
2839
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
|
+
|
|
2840
2902
|
Delivery is a JSONL append at ~/.qbraid/inboxes/<to-session-id>.jsonl
|
|
2841
2903
|
(local host only — cross-host messaging isn't yet supported and will raise
|
|
2842
2904
|
a clear error). Permission rules (leader/worker/observer/reviewer) are
|
|
@@ -2904,6 +2966,10 @@ def agents_broadcast(
|
|
|
2904
2966
|
) -> None:
|
|
2905
2967
|
"""Broadcast to multiple agent inboxes.
|
|
2906
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
|
+
|
|
2907
2973
|
Two selectors — pick exactly one:
|
|
2908
2974
|
* ``--team <team_id>`` — every session with that team_id (except sender)
|
|
2909
2975
|
* ``--to A,B,C`` — explicit id/prefix/name list
|
|
@@ -3031,6 +3097,10 @@ def inbox_default( # pylint: disable=too-many-arguments
|
|
|
3031
3097
|
|
|
3032
3098
|
Without a subcommand this reads the inbox (optionally streams with
|
|
3033
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.
|
|
3034
3104
|
"""
|
|
3035
3105
|
if ctx.invoked_subcommand is not None:
|
|
3036
3106
|
return
|
|
@@ -3138,6 +3208,10 @@ def agents_team(
|
|
|
3138
3208
|
) -> None:
|
|
3139
3209
|
"""Show a team roster with unread counts.
|
|
3140
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
|
+
|
|
3141
3215
|
Answers the leader-orchestrator question "who is on my team, how many
|
|
3142
3216
|
unread messages do they have, and what was the last thing they heard from
|
|
3143
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
|
|
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
|
|
File without changes
|