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.
Files changed (69) hide show
  1. {qbraid_cli-0.16.0/qbraid_cli.egg-info → qbraid_cli-0.16.2}/PKG-INFO +2 -2
  2. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/pyproject.toml +2 -2
  3. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/agents/app.py +131 -11
  4. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2/qbraid_cli.egg-info}/PKG-INFO +2 -2
  5. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli.egg-info/requires.txt +1 -1
  6. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/LICENSE +0 -0
  7. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/README.md +0 -0
  8. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/__init__.py +0 -0
  9. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/_build_info.py +0 -0
  10. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/_version.py +0 -0
  11. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/account/__init__.py +0 -0
  12. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/account/app.py +0 -0
  13. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/admin/__init__.py +0 -0
  14. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/admin/app.py +0 -0
  15. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/admin/headers.py +0 -0
  16. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/admin/validation.py +0 -0
  17. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/agents/__init__.py +0 -0
  18. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/agents/permission_response.py +0 -0
  19. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/ai/__init__.py +0 -0
  20. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/ai/app.py +0 -0
  21. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/ai/token.py +0 -0
  22. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/compute/__init__.py +0 -0
  23. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/compute/app.py +0 -0
  24. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/compute/instances.py +0 -0
  25. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/compute/profiles.py +0 -0
  26. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/compute/server.py +0 -0
  27. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/compute/ssh.py +0 -0
  28. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/configure/__init__.py +0 -0
  29. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/configure/actions.py +0 -0
  30. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/configure/app.py +0 -0
  31. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/devices/__init__.py +0 -0
  32. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/devices/app.py +0 -0
  33. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/devices/validation.py +0 -0
  34. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/__init__.py +0 -0
  35. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/activate.py +0 -0
  36. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/app.py +0 -0
  37. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/create.py +0 -0
  38. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/data_handling.py +0 -0
  39. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/groups.py +0 -0
  40. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/publish.py +0 -0
  41. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/registry.py +0 -0
  42. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/envs/share.py +0 -0
  43. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/exceptions.py +0 -0
  44. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/handlers.py +0 -0
  45. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/jobs/__init__.py +0 -0
  46. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/jobs/app.py +0 -0
  47. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/jobs/groups.py +0 -0
  48. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/kernels/__init__.py +0 -0
  49. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/kernels/app.py +0 -0
  50. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/lab/__init__.py +0 -0
  51. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/lab/app.py +0 -0
  52. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/main.py +0 -0
  53. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/pip/__init__.py +0 -0
  54. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/pip/app.py +0 -0
  55. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/pip/hooks.py +0 -0
  56. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/projects/__init__.py +0 -0
  57. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/projects/app.py +0 -0
  58. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/py.typed +0 -0
  59. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/skills/__init__.py +0 -0
  60. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/skills/app.py +0 -0
  61. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/troubleshoot/__init__.py +0 -0
  62. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli/troubleshoot/app.py +0 -0
  63. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli.egg-info/SOURCES.txt +0 -0
  64. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli.egg-info/dependency_links.txt +0 -0
  65. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli.egg-info/entry_points.txt +0 -0
  66. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/qbraid_cli.egg-info/top_level.txt +0 -0
  67. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/setup.cfg +0 -0
  68. {qbraid_cli-0.16.0 → qbraid_cli-0.16.2}/tests/test_cli_e2e.py +0 -0
  69. {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.0
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.3.3
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.0"
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.3.3",
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
- console.print(f"[dim]Listing agents on {compute}...[/dim]")
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
- console.print(result.stdout)
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
- console.print(output)
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.0
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.3.3
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
@@ -1,6 +1,6 @@
1
1
  typer>=0.12.1
2
2
  rich>=10.11.0
3
- click<=8.3.3
3
+ click<=8.5.0
4
4
  questionary>=2.0.0
5
5
  qbraid-core>=0.6.5
6
6
 
File without changes
File without changes
File without changes