hyper-sentinel 2.3.3__tar.gz → 2.3.5__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.5}/PKG-INFO +1 -1
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/pyproject.toml +1 -1
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5/src/hyper_sentinel.egg-info}/PKG-INFO +1 -1
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/src/sentinel/__init__.py +1 -1
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/src/sentinel/cli.py +46 -5
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/LICENSE +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/README.md +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/setup.cfg +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/src/hyper_sentinel.egg-info/SOURCES.txt +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/src/hyper_sentinel.egg-info/dependency_links.txt +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/src/hyper_sentinel.egg-info/entry_points.txt +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/src/hyper_sentinel.egg-info/requires.txt +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/src/hyper_sentinel.egg-info/top_level.txt +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/src/sentinel/client.py +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/src/sentinel/exceptions.py +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/src/sentinel/py.typed +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/tests/test_client.py +0 -0
- {hyper_sentinel-2.3.3 → hyper_sentinel-2.3.5}/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.5
|
|
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.5"
|
|
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.5
|
|
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)
|
|
@@ -1012,15 +1022,36 @@ def _handle_upgrade(plan: str = "pro"):
|
|
|
1012
1022
|
def _show_billing():
|
|
1013
1023
|
"""Show billing status from the gateway."""
|
|
1014
1024
|
config = _load_config()
|
|
1025
|
+
tier = config.get("tier", "free")
|
|
1026
|
+
t_info = TIER_INFO.get(tier, TIER_INFO["free"])
|
|
1015
1027
|
if not config.get("sentinel_api_key") and not config.get("ai_key"):
|
|
1016
1028
|
console.print(" [s.error]✗ Not authenticated[/] — run [bold]sentinel-setup[/] first.\n")
|
|
1017
1029
|
return
|
|
1030
|
+
# Try to get sentinel_api_key if we only have ai_key
|
|
1031
|
+
if not config.get("sentinel_api_key") and config.get("ai_key"):
|
|
1032
|
+
result = _register_with_gateway(config["ai_key"])
|
|
1033
|
+
if result.get("api_key"):
|
|
1034
|
+
config["sentinel_api_key"] = result["api_key"]
|
|
1035
|
+
config["tier"] = result.get("tier", "free")
|
|
1036
|
+
_save_config(config)
|
|
1037
|
+
if not config.get("sentinel_api_key"):
|
|
1038
|
+
# Show offline billing from local config
|
|
1039
|
+
console.print()
|
|
1040
|
+
tbl = Table(title="[bold cyan]🛡️ Billing Status[/] [s.dim](offline)[/]", title_justify="left",
|
|
1041
|
+
show_header=False, box=box.SIMPLE_HEAVY, border_style="cyan", padding=(0, 2))
|
|
1042
|
+
tbl.add_column("", style="bold white", min_width=18)
|
|
1043
|
+
tbl.add_column("", min_width=40)
|
|
1044
|
+
tbl.add_row("Tier", f"[s.cyan]{t_info['label']}[/] [s.dim]({t_info['price']})[/]")
|
|
1045
|
+
tbl.add_row("Rate Limit", f"[s.cyan]{t_info['rate']}[/]")
|
|
1046
|
+
tbl.add_row("LLM Markup", t_info["llm"])
|
|
1047
|
+
tbl.add_row("Trade Fees", f"maker {t_info['maker']} / taker {t_info['taker']}")
|
|
1048
|
+
console.print(tbl)
|
|
1049
|
+
console.print(" [s.dim]Gateway unavailable — billing data from local config.[/]\n")
|
|
1050
|
+
return
|
|
1018
1051
|
console.print()
|
|
1019
|
-
tier = config.get("tier", "free")
|
|
1020
|
-
t_info = TIER_INFO.get(tier, TIER_INFO["free"])
|
|
1021
1052
|
try:
|
|
1022
1053
|
from sentinel import SentinelClient
|
|
1023
|
-
data = SentinelClient().billing_status()
|
|
1054
|
+
data = SentinelClient(api_key=config["sentinel_api_key"], timeout=10).billing_status()
|
|
1024
1055
|
tier = data.get("tier", "free")
|
|
1025
1056
|
t_info = TIER_INFO.get(tier, TIER_INFO["free"])
|
|
1026
1057
|
tbl = Table(title="[bold cyan]🛡️ Billing Status[/]", title_justify="left",
|
|
@@ -1052,10 +1083,20 @@ def _show_tools():
|
|
|
1052
1083
|
if not config.get("sentinel_api_key") and not config.get("ai_key"):
|
|
1053
1084
|
console.print(" [s.error]✗ Not authenticated[/] — run [bold]sentinel-setup[/] first.\n")
|
|
1054
1085
|
return
|
|
1086
|
+
# Try to get sentinel_api_key if we only have ai_key
|
|
1087
|
+
if not config.get("sentinel_api_key") and config.get("ai_key"):
|
|
1088
|
+
result = _register_with_gateway(config["ai_key"])
|
|
1089
|
+
if result.get("api_key"):
|
|
1090
|
+
config["sentinel_api_key"] = result["api_key"]
|
|
1091
|
+
config["tier"] = result.get("tier", "free")
|
|
1092
|
+
_save_config(config)
|
|
1093
|
+
if not config.get("sentinel_api_key"):
|
|
1094
|
+
console.print(" [s.dim]Gateway unavailable — try again in a moment.[/]\n")
|
|
1095
|
+
return
|
|
1055
1096
|
console.print()
|
|
1056
1097
|
try:
|
|
1057
1098
|
from sentinel import SentinelClient
|
|
1058
|
-
tools = SentinelClient().list_tools()
|
|
1099
|
+
tools = SentinelClient(api_key=config["sentinel_api_key"], timeout=10).list_tools()
|
|
1059
1100
|
tbl = Table(title=f"[bold cyan]🔧 Available Tools ({len(tools)})[/]", title_justify="left",
|
|
1060
1101
|
show_header=True, box=box.SIMPLE_HEAVY, border_style="cyan", padding=(0, 2))
|
|
1061
1102
|
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.5}/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
|