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.
Files changed (75) hide show
  1. {qbraid_cli-0.16.14/qbraid_cli.egg-info → qbraid_cli-0.16.15}/PKG-INFO +4 -4
  2. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/pyproject.toml +4 -4
  3. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/agents/app.py +9 -2
  4. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15/qbraid_cli.egg-info}/PKG-INFO +4 -4
  5. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli.egg-info/requires.txt +3 -3
  6. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/tests/test_cli_e2e.py +25 -0
  7. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/LICENSE +0 -0
  8. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/README.md +0 -0
  9. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/__init__.py +0 -0
  10. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/_build_info.py +0 -0
  11. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/_version.py +0 -0
  12. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/account/__init__.py +0 -0
  13. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/account/app.py +0 -0
  14. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/admin/__init__.py +0 -0
  15. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/admin/app.py +0 -0
  16. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/admin/headers.py +0 -0
  17. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/admin/validation.py +0 -0
  18. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/agents/__init__.py +0 -0
  19. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/agents/keep_alive.py +0 -0
  20. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/agents/permission_response.py +0 -0
  21. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/agents/provider_children.py +0 -0
  22. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/agents/queue.py +0 -0
  23. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/agents/work.py +0 -0
  24. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/ai/__init__.py +0 -0
  25. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/ai/app.py +0 -0
  26. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/ai/token.py +0 -0
  27. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/comms/__init__.py +0 -0
  28. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/comms/app.py +0 -0
  29. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/compute/__init__.py +0 -0
  30. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/compute/app.py +0 -0
  31. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/compute/instances.py +0 -0
  32. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/compute/profiles.py +0 -0
  33. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/compute/server.py +0 -0
  34. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/compute/ssh.py +0 -0
  35. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/configure/__init__.py +0 -0
  36. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/configure/actions.py +0 -0
  37. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/configure/app.py +0 -0
  38. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/devices/__init__.py +0 -0
  39. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/devices/app.py +0 -0
  40. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/devices/validation.py +0 -0
  41. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/__init__.py +0 -0
  42. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/activate.py +0 -0
  43. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/app.py +0 -0
  44. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/create.py +0 -0
  45. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/data_handling.py +0 -0
  46. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/groups.py +0 -0
  47. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/publish.py +0 -0
  48. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/registry.py +0 -0
  49. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/envs/share.py +0 -0
  50. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/exceptions.py +0 -0
  51. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/handlers.py +0 -0
  52. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/jobs/__init__.py +0 -0
  53. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/jobs/app.py +0 -0
  54. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/jobs/groups.py +0 -0
  55. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/kernels/__init__.py +0 -0
  56. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/kernels/app.py +0 -0
  57. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/lab/__init__.py +0 -0
  58. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/lab/app.py +0 -0
  59. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/main.py +0 -0
  60. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/pip/__init__.py +0 -0
  61. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/pip/app.py +0 -0
  62. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/pip/hooks.py +0 -0
  63. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/projects/__init__.py +0 -0
  64. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/projects/app.py +0 -0
  65. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/py.typed +0 -0
  66. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/skills/__init__.py +0 -0
  67. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/skills/app.py +0 -0
  68. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/troubleshoot/__init__.py +0 -0
  69. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli/troubleshoot/app.py +0 -0
  70. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli.egg-info/SOURCES.txt +0 -0
  71. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli.egg-info/dependency_links.txt +0 -0
  72. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli.egg-info/entry_points.txt +0 -0
  73. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/qbraid_cli.egg-info/top_level.txt +0 -0
  74. {qbraid_cli-0.16.14 → qbraid_cli-0.16.15}/setup.cfg +0 -0
  75. {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.14
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
33
+ Requires-Dist: qbraid-core>=0.6.34
34
34
  Provides-Extra: compute
35
- Requires-Dist: qbraid-core[compute]>=0.6.33; extra == "compute"
35
+ Requires-Dist: qbraid-core[compute]>=0.6.34; extra == "compute"
36
36
  Provides-Extra: envs
37
- Requires-Dist: qbraid-core[environments]>=0.6.33; extra == "envs"
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.14"
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.33",
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.33"]
47
- envs = ["qbraid-core[environments]>=0.6.33"]
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.14
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
33
+ Requires-Dist: qbraid-core>=0.6.34
34
34
  Provides-Extra: compute
35
- Requires-Dist: qbraid-core[compute]>=0.6.33; extra == "compute"
35
+ Requires-Dist: qbraid-core[compute]>=0.6.34; extra == "compute"
36
36
  Provides-Extra: envs
37
- Requires-Dist: qbraid-core[environments]>=0.6.33; extra == "envs"
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.33
5
+ qbraid-core>=0.6.34
6
6
 
7
7
  [compute]
8
- qbraid-core[compute]>=0.6.33
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.33
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