qbraid-cli 0.16.14__tar.gz → 0.16.15__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.14/qbraid_cli.egg-info → qbraid_cli-0.16.15}/PKG-INFO +4 -4
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/pyproject.toml +4 -4
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/agents/app.py +9 -2
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15/qbraid_cli.egg-info}/PKG-INFO +4 -4
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli.egg-info/requires.txt +3 -3
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/tests/test_cli_e2e.py +25 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/LICENSE +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/README.md +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/_build_info.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/_version.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/account/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/account/app.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/admin/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/admin/app.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/admin/headers.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/admin/validation.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/agents/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/agents/keep_alive.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/agents/permission_response.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/agents/provider_children.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/agents/queue.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/agents/work.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/ai/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/ai/app.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/ai/token.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/comms/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/comms/app.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/compute/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/compute/app.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/compute/instances.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/compute/profiles.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/compute/server.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/compute/ssh.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/configure/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/configure/actions.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/configure/app.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/devices/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/devices/app.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/devices/validation.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/activate.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/app.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/create.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/data_handling.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/groups.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/publish.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/registry.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/share.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/exceptions.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/handlers.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/jobs/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/jobs/app.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/jobs/groups.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/kernels/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/kernels/app.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/lab/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/lab/app.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/main.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/pip/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/pip/app.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/pip/hooks.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/projects/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/projects/app.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/py.typed +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/skills/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/skills/app.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/troubleshoot/__init__.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/troubleshoot/app.py +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli.egg-info/SOURCES.txt +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli.egg-info/dependency_links.txt +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli.egg-info/entry_points.txt +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli.egg-info/top_level.txt +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/setup.cfg +0 -0
- {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/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.15
|
|
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
|
|
@@ -30,11 +30,11 @@ Requires-Dist: typer>=0.12.1
|
|
|
30
30
|
Requires-Dist: rich>=10.11.0
|
|
31
31
|
Requires-Dist: click<=8.5.0
|
|
32
32
|
Requires-Dist: questionary>=2.0.0
|
|
33
|
-
Requires-Dist: qbraid-core>=0.6.
|
|
33
|
+
Requires-Dist: qbraid-core>=0.6.34
|
|
34
34
|
Provides-Extra: compute
|
|
35
|
-
Requires-Dist: qbraid-core[compute]>=0.6.
|
|
35
|
+
Requires-Dist: qbraid-core[compute]>=0.6.34; extra == "compute"
|
|
36
36
|
Provides-Extra: envs
|
|
37
|
-
Requires-Dist: qbraid-core[environments]>=0.6.
|
|
37
|
+
Requires-Dist: qbraid-core[environments]>=0.6.34; extra == "envs"
|
|
38
38
|
Provides-Extra: dev
|
|
39
39
|
Requires-Dist: isort; extra == "dev"
|
|
40
40
|
Requires-Dist: black; extra == "dev"
|
|
@@ -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.15"
|
|
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" }]
|
|
@@ -32,7 +32,7 @@ dependencies = [
|
|
|
32
32
|
"rich>=10.11.0",
|
|
33
33
|
"click<=8.5.0",
|
|
34
34
|
"questionary>=2.0.0",
|
|
35
|
-
"qbraid-core>=0.6.
|
|
35
|
+
"qbraid-core>=0.6.34",
|
|
36
36
|
]
|
|
37
37
|
requires-python = ">= 3.10"
|
|
38
38
|
|
|
@@ -43,8 +43,8 @@ Documentation = "https://docs.qbraid.com/v2/cli/api-reference/qbraid"
|
|
|
43
43
|
Discord = "https://discord.gg/KugF6Cnncm"
|
|
44
44
|
|
|
45
45
|
[project.optional-dependencies]
|
|
46
|
-
compute = ["qbraid-core[compute]>=0.6.
|
|
47
|
-
envs = ["qbraid-core[environments]>=0.6.
|
|
46
|
+
compute = ["qbraid-core[compute]>=0.6.34"]
|
|
47
|
+
envs = ["qbraid-core[environments]>=0.6.34"]
|
|
48
48
|
dev = ["isort", "black", "pytest", "pytest-cov", "pytest-asyncio"]
|
|
49
49
|
|
|
50
50
|
[project.scripts]
|
|
@@ -1031,12 +1031,19 @@ def agents_discover(
|
|
|
1031
1031
|
include_error_traceback=False,
|
|
1032
1032
|
)
|
|
1033
1033
|
|
|
1034
|
+
registered_count = registry.merge_discovered_sessions(discovered) if discovered else 0
|
|
1035
|
+
# Refresh native provider children even when discovery found no new
|
|
1036
|
+
# process sessions. Their lifecycle is owned by the provider transcript
|
|
1037
|
+
# observer, not by process discovery; without this refresh a stopped
|
|
1038
|
+
# Claude child can remain "working" in the registry indefinitely.
|
|
1039
|
+
refresh = getattr(registry, "refresh_discovered_sessions", None)
|
|
1040
|
+
if callable(refresh):
|
|
1041
|
+
refresh()
|
|
1042
|
+
|
|
1034
1043
|
if not discovered:
|
|
1035
1044
|
console.print("[dim]No agent sessions found.[/dim]")
|
|
1036
1045
|
return
|
|
1037
1046
|
|
|
1038
|
-
registered_count = registry.merge_discovered_sessions(discovered)
|
|
1039
|
-
|
|
1040
1047
|
table = Table(title=f"Discovered Sessions ({len(discovered)})")
|
|
1041
1048
|
table.add_column("Session ID", style="cyan", no_wrap=True)
|
|
1042
1049
|
table.add_column("Tool")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: qbraid-cli
|
|
3
|
-
Version: 0.16.
|
|
3
|
+
Version: 0.16.15
|
|
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
|
|
@@ -30,11 +30,11 @@ Requires-Dist: typer>=0.12.1
|
|
|
30
30
|
Requires-Dist: rich>=10.11.0
|
|
31
31
|
Requires-Dist: click<=8.5.0
|
|
32
32
|
Requires-Dist: questionary>=2.0.0
|
|
33
|
-
Requires-Dist: qbraid-core>=0.6.
|
|
33
|
+
Requires-Dist: qbraid-core>=0.6.34
|
|
34
34
|
Provides-Extra: compute
|
|
35
|
-
Requires-Dist: qbraid-core[compute]>=0.6.
|
|
35
|
+
Requires-Dist: qbraid-core[compute]>=0.6.34; extra == "compute"
|
|
36
36
|
Provides-Extra: envs
|
|
37
|
-
Requires-Dist: qbraid-core[environments]>=0.6.
|
|
37
|
+
Requires-Dist: qbraid-core[environments]>=0.6.34; extra == "envs"
|
|
38
38
|
Provides-Extra: dev
|
|
39
39
|
Requires-Dist: isort; extra == "dev"
|
|
40
40
|
Requires-Dist: black; extra == "dev"
|
|
@@ -2,10 +2,10 @@ typer>=0.12.1
|
|
|
2
2
|
rich>=10.11.0
|
|
3
3
|
click<=8.5.0
|
|
4
4
|
questionary>=2.0.0
|
|
5
|
-
qbraid-core>=0.6.
|
|
5
|
+
qbraid-core>=0.6.34
|
|
6
6
|
|
|
7
7
|
[compute]
|
|
8
|
-
qbraid-core[compute]>=0.6.
|
|
8
|
+
qbraid-core[compute]>=0.6.34
|
|
9
9
|
|
|
10
10
|
[dev]
|
|
11
11
|
isort
|
|
@@ -15,4 +15,4 @@ pytest-cov
|
|
|
15
15
|
pytest-asyncio
|
|
16
16
|
|
|
17
17
|
[envs]
|
|
18
|
-
qbraid-core[environments]>=0.6.
|
|
18
|
+
qbraid-core[environments]>=0.6.34
|
|
@@ -976,6 +976,7 @@ class TestAgentsE2E:
|
|
|
976
976
|
def test_discover_empty(self, mock_registry_cls):
|
|
977
977
|
"""Discover with no new sessions found."""
|
|
978
978
|
mock_registry = MagicMock()
|
|
979
|
+
mock_registry.refresh_discovered_sessions = MagicMock(return_value={"pruned": [], "reactivated": []})
|
|
979
980
|
mock_registry_cls.return_value = mock_registry
|
|
980
981
|
|
|
981
982
|
from qbraid_cli.agents.app import agents_app
|
|
@@ -984,6 +985,30 @@ class TestAgentsE2E:
|
|
|
984
985
|
result = runner.invoke(agents_app, ["discover"])
|
|
985
986
|
|
|
986
987
|
assert result.exit_code == 0
|
|
988
|
+
mock_registry.refresh_discovered_sessions.assert_called_once_with()
|
|
989
|
+
|
|
990
|
+
@patch("qbraid_core.services.agents.AgentSessionRegistryManager")
|
|
991
|
+
def test_discover_refreshes_children_after_merging(self, mock_registry_cls):
|
|
992
|
+
"""Provider child reconciliation follows process discovery and merge."""
|
|
993
|
+
events = []
|
|
994
|
+
mock_session = MagicMock()
|
|
995
|
+
mock_session.session_id = "abc12345-6789"
|
|
996
|
+
mock_session.tool.value = "codex"
|
|
997
|
+
mock_session.status.value = "idle"
|
|
998
|
+
mock_session.model_name = "test-model"
|
|
999
|
+
mock_session.cwd = "/tmp/project"
|
|
1000
|
+
mock_registry = MagicMock()
|
|
1001
|
+
mock_registry.merge_discovered_sessions.side_effect = lambda rows: events.append("merge") or 1
|
|
1002
|
+
mock_registry.refresh_discovered_sessions.side_effect = lambda: events.append("refresh")
|
|
1003
|
+
mock_registry_cls.return_value = mock_registry
|
|
1004
|
+
|
|
1005
|
+
from qbraid_cli.agents.app import agents_app
|
|
1006
|
+
|
|
1007
|
+
with patch("qbraid_core.services.agents.detect_sessions", return_value=[mock_session]):
|
|
1008
|
+
result = runner.invoke(agents_app, ["discover"])
|
|
1009
|
+
|
|
1010
|
+
assert result.exit_code == 0, result.output
|
|
1011
|
+
assert events == ["merge", "refresh"]
|
|
987
1012
|
|
|
988
1013
|
@patch("qbraid_core.services.agents.AgentSessionRegistryManager")
|
|
989
1014
|
def test_update_session(self, mock_registry_cls):
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|