refactor: streamline API key prompt in setup wizard
- Introduced a new helper function to handle API key prompts, improving code organization and readability. - Enhanced user experience by providing a formatted display for API key input, including tool descriptions and URLs. - Simplified the setup wizard by replacing inline API key handling with the new helper function, ensuring consistent messaging and feedback during configuration.
This commit is contained in:
@@ -232,6 +232,34 @@ def prompt_checklist(title: str, items: list, pre_selected: list = None) -> list
|
||||
return sorted(selected)
|
||||
|
||||
|
||||
def _prompt_api_key(var: dict):
|
||||
"""Display a nicely formatted API key input screen for a single env var."""
|
||||
tools = var.get("tools", [])
|
||||
tools_str = ", ".join(tools[:3])
|
||||
if len(tools) > 3:
|
||||
tools_str += f", +{len(tools) - 3} more"
|
||||
|
||||
print()
|
||||
print(color(f" ─── {var.get('description', var['name'])} ───", Colors.CYAN))
|
||||
print()
|
||||
if tools_str:
|
||||
print_info(f" Enables: {tools_str}")
|
||||
if var.get("url"):
|
||||
print_info(f" Get your key at: {var['url']}")
|
||||
print()
|
||||
|
||||
if var.get("password"):
|
||||
value = prompt(f" {var.get('prompt', var['name'])}", password=True)
|
||||
else:
|
||||
value = prompt(f" {var.get('prompt', var['name'])}")
|
||||
|
||||
if value:
|
||||
save_env_value(var["name"], value)
|
||||
print_success(f" ✓ Saved")
|
||||
else:
|
||||
print_warning(f" Skipped (configure later with 'hermes setup')")
|
||||
|
||||
|
||||
def _print_setup_summary(config: dict, hermes_home):
|
||||
"""Print the setup completion summary."""
|
||||
# Tool availability summary
|
||||
@@ -495,19 +523,7 @@ def run_setup_wizard(args):
|
||||
|
||||
for idx in selected_indices:
|
||||
var = missing_tools[idx]
|
||||
print()
|
||||
print(color(f" {var['name']}", Colors.CYAN))
|
||||
if var.get("url"):
|
||||
print_info(f" Get key at: {var['url']}")
|
||||
|
||||
if var.get("password"):
|
||||
value = prompt(f" {var.get('prompt', var['name'])}", password=True)
|
||||
else:
|
||||
value = prompt(f" {var.get('prompt', var['name'])}")
|
||||
|
||||
if value:
|
||||
save_env_value(var["name"], value)
|
||||
print_success(f" Saved {var['name']}")
|
||||
_prompt_api_key(var)
|
||||
|
||||
# ── Messaging platforms (checklist then prompt for selected) ──
|
||||
if missing_messaging:
|
||||
@@ -546,16 +562,24 @@ def run_setup_wizard(args):
|
||||
for idx in selected_indices:
|
||||
plat = platform_order[idx]
|
||||
vars_list = platforms[plat]
|
||||
emoji = {"Telegram": "📱", "Discord": "💬", "Slack": "💼"}.get(plat, "")
|
||||
print()
|
||||
print(color(f" ─── {emoji} {plat} ───", Colors.CYAN))
|
||||
print()
|
||||
print(color(f" ─── {plat} ───", Colors.CYAN))
|
||||
for var in vars_list:
|
||||
print_info(f" {var.get('description', '')}")
|
||||
if var.get("url"):
|
||||
print_info(f" {var['url']}")
|
||||
if var.get("password"):
|
||||
value = prompt(f" {var.get('prompt', var['name'])}", password=True)
|
||||
value = prompt(f" {var.get('prompt', var['name'])}", password=True)
|
||||
else:
|
||||
value = prompt(f" {var.get('prompt', var['name'])}")
|
||||
value = prompt(f" {var.get('prompt', var['name'])}")
|
||||
if value:
|
||||
save_env_value(var["name"], value)
|
||||
print_success(f" Saved {var['name']}")
|
||||
print_success(f" ✓ Saved")
|
||||
else:
|
||||
print_warning(f" Skipped")
|
||||
print()
|
||||
|
||||
# Handle missing config fields
|
||||
if missing_config:
|
||||
|
||||
Reference in New Issue
Block a user