hyper-sentinel 2.3.3__tar.gz → 2.3.4__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 (18) hide show
  1. {hyper_sentinel-2.3.3/src/hyper_sentinel.egg-info → hyper_sentinel-2.3.4}/PKG-INFO +1 -1
  2. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/pyproject.toml +1 -1
  3. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4/src/hyper_sentinel.egg-info}/PKG-INFO +1 -1
  4. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/sentinel/__init__.py +1 -1
  5. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/sentinel/cli.py +44 -5
  6. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/LICENSE +0 -0
  7. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/README.md +0 -0
  8. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/setup.cfg +0 -0
  9. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/hyper_sentinel.egg-info/SOURCES.txt +0 -0
  10. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/hyper_sentinel.egg-info/dependency_links.txt +0 -0
  11. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/hyper_sentinel.egg-info/entry_points.txt +0 -0
  12. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/hyper_sentinel.egg-info/requires.txt +0 -0
  13. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/hyper_sentinel.egg-info/top_level.txt +0 -0
  14. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/sentinel/client.py +0 -0
  15. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/sentinel/exceptions.py +0 -0
  16. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/sentinel/py.typed +0 -0
  17. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/tests/test_client.py +0 -0
  18. {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/tests/test_integration.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hyper-sentinel
3
- Version: 2.3.3
3
+ Version: 2.3.4
4
4
  Summary: Python SDK for Sentinel — 80+ crypto trading, AI, and market intelligence tools. Free access, usage-based fees.
5
5
  Author-email: Sentinel Labs <dev@hyper-sentinel.com>
6
6
  License-Expression: AGPL-3.0-only
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "hyper-sentinel"
7
- version = "2.3.3"
7
+ version = "2.3.4"
8
8
  description = "Python SDK for Sentinel — 80+ crypto trading, AI, and market intelligence tools. Free access, usage-based fees."
9
9
  readme = "README.md"
10
10
  license = "AGPL-3.0-only"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hyper-sentinel
3
- Version: 2.3.3
3
+ Version: 2.3.4
4
4
  Summary: Python SDK for Sentinel — 80+ crypto trading, AI, and market intelligence tools. Free access, usage-based fees.
5
5
  Author-email: Sentinel Labs <dev@hyper-sentinel.com>
6
6
  License-Expression: AGPL-3.0-only
@@ -21,7 +21,7 @@ from sentinel.exceptions import (
21
21
  ToolNotFoundError,
22
22
  )
23
23
 
24
- __version__ = "2.3.3"
24
+ __version__ = "2.3.4"
25
25
  __all__ = [
26
26
  "SentinelClient",
27
27
  "SentinelError",
@@ -993,10 +993,20 @@ def _handle_upgrade(plan: str = "pro"):
993
993
  if not config.get("sentinel_api_key") and not config.get("ai_key"):
994
994
  console.print(" [s.error]✗ Not authenticated[/] — run [bold]sentinel-setup[/] first.\n")
995
995
  return
996
+ # Try to get sentinel_api_key if we only have ai_key
997
+ if not config.get("sentinel_api_key") and config.get("ai_key"):
998
+ result = _register_with_gateway(config["ai_key"])
999
+ if result.get("api_key"):
1000
+ config["sentinel_api_key"] = result["api_key"]
1001
+ config["tier"] = result.get("tier", "free")
1002
+ _save_config(config)
1003
+ if not config.get("sentinel_api_key"):
1004
+ console.print(" [s.dim]Gateway unavailable — try 'sentinel upgrade' again in a moment.[/]\n")
1005
+ return
996
1006
  console.print(f"\n [s.magenta]💎 Upgrading to {plan.title()}...[/]")
997
1007
  try:
998
1008
  from sentinel import SentinelClient
999
- url = SentinelClient().upgrade(plan)
1009
+ url = SentinelClient(api_key=config["sentinel_api_key"], timeout=10).upgrade(plan)
1000
1010
  console.print(f" [s.cyan]✓ Checkout URL:[/] {url}")
1001
1011
  import webbrowser
1002
1012
  webbrowser.open(url)
@@ -1015,12 +1025,31 @@ def _show_billing():
1015
1025
  if not config.get("sentinel_api_key") and not config.get("ai_key"):
1016
1026
  console.print(" [s.error]✗ Not authenticated[/] — run [bold]sentinel-setup[/] first.\n")
1017
1027
  return
1028
+ # Try to get sentinel_api_key if we only have ai_key
1029
+ if not config.get("sentinel_api_key") and config.get("ai_key"):
1030
+ result = _register_with_gateway(config["ai_key"])
1031
+ if result.get("api_key"):
1032
+ config["sentinel_api_key"] = result["api_key"]
1033
+ config["tier"] = result.get("tier", "free")
1034
+ _save_config(config)
1035
+ if not config.get("sentinel_api_key"):
1036
+ # Show offline billing from local config
1037
+ console.print()
1038
+ tbl = Table(title="[bold cyan]🛡️ Billing Status[/] [s.dim](offline)[/]", title_justify="left",
1039
+ show_header=False, box=box.SIMPLE_HEAVY, border_style="cyan", padding=(0, 2))
1040
+ tbl.add_column("", style="bold white", min_width=18)
1041
+ tbl.add_column("", min_width=40)
1042
+ tbl.add_row("Tier", f"[s.cyan]{t_info['label']}[/] [s.dim]({t_info['price']})[/]")
1043
+ tbl.add_row("Rate Limit", f"[s.cyan]{t_info['rate']}[/]")
1044
+ tbl.add_row("LLM Markup", t_info["llm"])
1045
+ tbl.add_row("Trade Fees", f"maker {t_info['maker']} / taker {t_info['taker']}")
1046
+ console.print(tbl)
1047
+ console.print(" [s.dim]Gateway unavailable — billing data from local config.[/]\n")
1048
+ return
1018
1049
  console.print()
1019
- tier = config.get("tier", "free")
1020
- t_info = TIER_INFO.get(tier, TIER_INFO["free"])
1021
1050
  try:
1022
1051
  from sentinel import SentinelClient
1023
- data = SentinelClient().billing_status()
1052
+ data = SentinelClient(api_key=config["sentinel_api_key"], timeout=10).billing_status()
1024
1053
  tier = data.get("tier", "free")
1025
1054
  t_info = TIER_INFO.get(tier, TIER_INFO["free"])
1026
1055
  tbl = Table(title="[bold cyan]🛡️ Billing Status[/]", title_justify="left",
@@ -1052,10 +1081,20 @@ def _show_tools():
1052
1081
  if not config.get("sentinel_api_key") and not config.get("ai_key"):
1053
1082
  console.print(" [s.error]✗ Not authenticated[/] — run [bold]sentinel-setup[/] first.\n")
1054
1083
  return
1084
+ # Try to get sentinel_api_key if we only have ai_key
1085
+ if not config.get("sentinel_api_key") and config.get("ai_key"):
1086
+ result = _register_with_gateway(config["ai_key"])
1087
+ if result.get("api_key"):
1088
+ config["sentinel_api_key"] = result["api_key"]
1089
+ config["tier"] = result.get("tier", "free")
1090
+ _save_config(config)
1091
+ if not config.get("sentinel_api_key"):
1092
+ console.print(" [s.dim]Gateway unavailable — try again in a moment.[/]\n")
1093
+ return
1055
1094
  console.print()
1056
1095
  try:
1057
1096
  from sentinel import SentinelClient
1058
- tools = SentinelClient().list_tools()
1097
+ tools = SentinelClient(api_key=config["sentinel_api_key"], timeout=10).list_tools()
1059
1098
  tbl = Table(title=f"[bold cyan]🔧 Available Tools ({len(tools)})[/]", title_justify="left",
1060
1099
  show_header=True, box=box.SIMPLE_HEAVY, border_style="cyan", padding=(0, 2))
1061
1100
  tbl.add_column("Tool", style="s.cyan.bold", min_width=28)
File without changes
File without changes
File without changes