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.
- {hyper_sentinel-2.3.3/src/hyper_sentinel.egg-info → hyper_sentinel-2.3.4}/PKG-INFO +1 -1
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/pyproject.toml +1 -1
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4/src/hyper_sentinel.egg-info}/PKG-INFO +1 -1
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/sentinel/__init__.py +1 -1
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/sentinel/cli.py +44 -5
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/LICENSE +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/README.md +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/setup.cfg +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/hyper_sentinel.egg-info/SOURCES.txt +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/hyper_sentinel.egg-info/dependency_links.txt +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/hyper_sentinel.egg-info/entry_points.txt +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/hyper_sentinel.egg-info/requires.txt +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/hyper_sentinel.egg-info/top_level.txt +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/sentinel/client.py +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/sentinel/exceptions.py +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/sentinel/py.typed +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/tests/test_client.py +0 -0
- {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
|
+
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.
|
|
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
|
+
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
|
|
@@ -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
|
|
File without changes
|
{hyper_sentinel-2.3.3 → hyper_sentinel-2.3.4}/src/hyper_sentinel.egg-info/dependency_links.txt
RENAMED
|
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
|