arionxiv 1.0.32__py3-none-any.whl
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.
- arionxiv/__init__.py +40 -0
- arionxiv/__main__.py +10 -0
- arionxiv/arxiv_operations/__init__.py +0 -0
- arionxiv/arxiv_operations/client.py +225 -0
- arionxiv/arxiv_operations/fetcher.py +173 -0
- arionxiv/arxiv_operations/searcher.py +122 -0
- arionxiv/arxiv_operations/utils.py +293 -0
- arionxiv/cli/__init__.py +4 -0
- arionxiv/cli/commands/__init__.py +1 -0
- arionxiv/cli/commands/analyze.py +587 -0
- arionxiv/cli/commands/auth.py +365 -0
- arionxiv/cli/commands/chat.py +714 -0
- arionxiv/cli/commands/daily.py +482 -0
- arionxiv/cli/commands/fetch.py +217 -0
- arionxiv/cli/commands/library.py +295 -0
- arionxiv/cli/commands/preferences.py +426 -0
- arionxiv/cli/commands/search.py +254 -0
- arionxiv/cli/commands/settings_unified.py +1407 -0
- arionxiv/cli/commands/trending.py +41 -0
- arionxiv/cli/commands/welcome.py +168 -0
- arionxiv/cli/main.py +407 -0
- arionxiv/cli/ui/__init__.py +1 -0
- arionxiv/cli/ui/global_theme_manager.py +173 -0
- arionxiv/cli/ui/logo.py +127 -0
- arionxiv/cli/ui/splash.py +89 -0
- arionxiv/cli/ui/theme.py +32 -0
- arionxiv/cli/ui/theme_system.py +391 -0
- arionxiv/cli/utils/__init__.py +54 -0
- arionxiv/cli/utils/animations.py +522 -0
- arionxiv/cli/utils/api_client.py +583 -0
- arionxiv/cli/utils/api_config.py +505 -0
- arionxiv/cli/utils/command_suggestions.py +147 -0
- arionxiv/cli/utils/db_config_manager.py +254 -0
- arionxiv/github_actions_runner.py +206 -0
- arionxiv/main.py +23 -0
- arionxiv/prompts/__init__.py +9 -0
- arionxiv/prompts/prompts.py +247 -0
- arionxiv/rag_techniques/__init__.py +8 -0
- arionxiv/rag_techniques/basic_rag.py +1531 -0
- arionxiv/scheduler_daemon.py +139 -0
- arionxiv/server.py +1000 -0
- arionxiv/server_main.py +24 -0
- arionxiv/services/__init__.py +73 -0
- arionxiv/services/llm_client.py +30 -0
- arionxiv/services/llm_inference/__init__.py +58 -0
- arionxiv/services/llm_inference/groq_client.py +469 -0
- arionxiv/services/llm_inference/llm_utils.py +250 -0
- arionxiv/services/llm_inference/openrouter_client.py +564 -0
- arionxiv/services/unified_analysis_service.py +872 -0
- arionxiv/services/unified_auth_service.py +457 -0
- arionxiv/services/unified_config_service.py +456 -0
- arionxiv/services/unified_daily_dose_service.py +823 -0
- arionxiv/services/unified_database_service.py +1633 -0
- arionxiv/services/unified_llm_service.py +366 -0
- arionxiv/services/unified_paper_service.py +604 -0
- arionxiv/services/unified_pdf_service.py +522 -0
- arionxiv/services/unified_prompt_service.py +344 -0
- arionxiv/services/unified_scheduler_service.py +589 -0
- arionxiv/services/unified_user_service.py +954 -0
- arionxiv/utils/__init__.py +51 -0
- arionxiv/utils/api_helpers.py +200 -0
- arionxiv/utils/file_cleanup.py +150 -0
- arionxiv/utils/ip_helper.py +96 -0
- arionxiv-1.0.32.dist-info/METADATA +336 -0
- arionxiv-1.0.32.dist-info/RECORD +69 -0
- arionxiv-1.0.32.dist-info/WHEEL +5 -0
- arionxiv-1.0.32.dist-info/entry_points.txt +4 -0
- arionxiv-1.0.32.dist-info/licenses/LICENSE +21 -0
- arionxiv-1.0.32.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ArionXiv CLI Theme System - Consolidated theme management and selection
|
|
3
|
+
Combines theme.py and theme_selector.py functionality
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from rich.console import Console
|
|
7
|
+
from rich.table import Table
|
|
8
|
+
from rich.panel import Panel
|
|
9
|
+
from rich.text import Text
|
|
10
|
+
from rich.columns import Columns
|
|
11
|
+
from rich.prompt import Prompt, IntPrompt
|
|
12
|
+
from typing import Dict, Any
|
|
13
|
+
from .logo import display_header
|
|
14
|
+
from .global_theme_manager import global_theme_manager
|
|
15
|
+
|
|
16
|
+
# Import animation utility
|
|
17
|
+
try:
|
|
18
|
+
from ..utils.animations import left_to_right_reveal
|
|
19
|
+
ANIMATIONS_AVAILABLE = True
|
|
20
|
+
except ImportError:
|
|
21
|
+
ANIMATIONS_AVAILABLE = False
|
|
22
|
+
def left_to_right_reveal(console, text, style="", duration=1.0):
|
|
23
|
+
console.print(text, style=style)
|
|
24
|
+
|
|
25
|
+
# Available color themes
|
|
26
|
+
AVAILABLE_THEMES = {
|
|
27
|
+
'red': {
|
|
28
|
+
'name': 'Classic Red',
|
|
29
|
+
'primary': 'bright_red',
|
|
30
|
+
'secondary': 'bright_red',
|
|
31
|
+
'accent': 'bright_red',
|
|
32
|
+
'success': 'bright_green',
|
|
33
|
+
'warning': 'bright_yellow',
|
|
34
|
+
'error': 'bright_red',
|
|
35
|
+
'info': 'bright_red',
|
|
36
|
+
'muted': 'dim white'
|
|
37
|
+
},
|
|
38
|
+
'blue': {
|
|
39
|
+
'name': 'Ocean Blue',
|
|
40
|
+
'primary': 'bright_blue',
|
|
41
|
+
'secondary': 'bright_blue',
|
|
42
|
+
'accent': 'bright_blue',
|
|
43
|
+
'success': 'bright_green',
|
|
44
|
+
'warning': 'bright_yellow',
|
|
45
|
+
'error': 'bright_red',
|
|
46
|
+
'info': 'bright_blue',
|
|
47
|
+
'muted': 'dim white'
|
|
48
|
+
},
|
|
49
|
+
'green': {
|
|
50
|
+
'name': 'Forest Green',
|
|
51
|
+
'primary': 'bright_green',
|
|
52
|
+
'secondary': 'bright_green',
|
|
53
|
+
'accent': 'bright_green',
|
|
54
|
+
'success': 'bright_green',
|
|
55
|
+
'warning': 'yellow',
|
|
56
|
+
'error': 'bright_red',
|
|
57
|
+
'info': 'bright_green',
|
|
58
|
+
'muted': 'dim white'
|
|
59
|
+
},
|
|
60
|
+
'purple': {
|
|
61
|
+
'name': 'Royal Purple',
|
|
62
|
+
'primary': 'magenta',
|
|
63
|
+
'secondary': 'magenta',
|
|
64
|
+
'accent': 'magenta',
|
|
65
|
+
'success': 'bright_green',
|
|
66
|
+
'warning': 'bright_yellow',
|
|
67
|
+
'error': 'bright_red',
|
|
68
|
+
'info': 'magenta',
|
|
69
|
+
'muted': 'dim white'
|
|
70
|
+
},
|
|
71
|
+
'amber': {
|
|
72
|
+
'name': 'Warm Amber',
|
|
73
|
+
'primary': 'bright_yellow',
|
|
74
|
+
'secondary': 'bright_yellow',
|
|
75
|
+
'accent': 'bright_yellow',
|
|
76
|
+
'success': 'bright_green',
|
|
77
|
+
'warning': 'bright_yellow',
|
|
78
|
+
'error': 'bright_red',
|
|
79
|
+
'info': 'bright_yellow',
|
|
80
|
+
'muted': 'dim white'
|
|
81
|
+
},
|
|
82
|
+
'cyan': {
|
|
83
|
+
'name': 'Electric Cyan',
|
|
84
|
+
'primary': 'bright_cyan',
|
|
85
|
+
'secondary': 'bright_cyan',
|
|
86
|
+
'accent': 'bright_cyan',
|
|
87
|
+
'success': 'bright_green',
|
|
88
|
+
'warning': 'bright_yellow',
|
|
89
|
+
'error': 'bright_red',
|
|
90
|
+
'info': 'bright_cyan',
|
|
91
|
+
'muted': 'dim white'
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
# Current theme colors (will be set dynamically)
|
|
96
|
+
THEME_COLORS = AVAILABLE_THEMES['blue'].copy() # Default to blue
|
|
97
|
+
|
|
98
|
+
# ================================
|
|
99
|
+
# CORE THEME FUNCTIONS
|
|
100
|
+
# ================================
|
|
101
|
+
|
|
102
|
+
def get_current_theme_color():
|
|
103
|
+
"""Get the current theme color from global theme manager"""
|
|
104
|
+
return global_theme_manager.get_current_theme()
|
|
105
|
+
|
|
106
|
+
def set_theme_colors(theme_name=None):
|
|
107
|
+
"""Set the global theme colors"""
|
|
108
|
+
global THEME_COLORS
|
|
109
|
+
|
|
110
|
+
# Use current theme from global manager if no theme specified
|
|
111
|
+
if theme_name is None:
|
|
112
|
+
theme_name = global_theme_manager.get_current_theme()
|
|
113
|
+
|
|
114
|
+
if theme_name in AVAILABLE_THEMES:
|
|
115
|
+
THEME_COLORS = AVAILABLE_THEMES[theme_name].copy()
|
|
116
|
+
else:
|
|
117
|
+
# Fallback to blue if theme not found
|
|
118
|
+
THEME_COLORS = AVAILABLE_THEMES['blue'].copy()
|
|
119
|
+
|
|
120
|
+
# Update global theme manager
|
|
121
|
+
global_theme_manager.set_theme(theme_name)
|
|
122
|
+
|
|
123
|
+
def get_theme_colors():
|
|
124
|
+
"""Get current theme colors, loading from config if needed"""
|
|
125
|
+
current_theme = get_current_theme_color()
|
|
126
|
+
set_theme_colors(current_theme)
|
|
127
|
+
return THEME_COLORS
|
|
128
|
+
|
|
129
|
+
# ================================
|
|
130
|
+
# THEME CREATION FUNCTIONS
|
|
131
|
+
# ================================
|
|
132
|
+
|
|
133
|
+
def create_themed_console():
|
|
134
|
+
"""Create a console with current theme"""
|
|
135
|
+
get_theme_colors() # Ensure theme is loaded
|
|
136
|
+
return Console()
|
|
137
|
+
|
|
138
|
+
def create_themed_table(title: str = None, show_header: bool = True):
|
|
139
|
+
"""Create a table with current theme"""
|
|
140
|
+
colors = get_theme_colors()
|
|
141
|
+
table = Table(
|
|
142
|
+
title=title,
|
|
143
|
+
show_header=show_header,
|
|
144
|
+
header_style=f"bold {colors['primary']}",
|
|
145
|
+
border_style=f"bold {colors['primary']}",
|
|
146
|
+
title_style=f"bold {colors['primary']}"
|
|
147
|
+
)
|
|
148
|
+
return table
|
|
149
|
+
|
|
150
|
+
def create_themed_panel(content: str, title: str = None, border_style: str = None):
|
|
151
|
+
"""Create a panel with current theme"""
|
|
152
|
+
colors = get_theme_colors()
|
|
153
|
+
if border_style is None:
|
|
154
|
+
border_style = f"bold {colors['primary']}"
|
|
155
|
+
|
|
156
|
+
return Panel(
|
|
157
|
+
content,
|
|
158
|
+
title=f"[bold {colors['primary']}]{title}[/bold {colors['primary']}]" if title else None,
|
|
159
|
+
border_style=border_style,
|
|
160
|
+
padding=(1, 2)
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
# ================================
|
|
164
|
+
# PRINTING FUNCTIONS
|
|
165
|
+
# ================================
|
|
166
|
+
|
|
167
|
+
def print_header(console: Console, title: str = None):
|
|
168
|
+
"""Print header with mini logo and optional title"""
|
|
169
|
+
colors = get_theme_colors()
|
|
170
|
+
display_header(console)
|
|
171
|
+
if title:
|
|
172
|
+
console.print(f"\n[bold {colors['primary']}]{title}[/bold {colors['primary']}]\n")
|
|
173
|
+
|
|
174
|
+
def print_success(console: Console, message: str):
|
|
175
|
+
"""Print success message with theme and animation"""
|
|
176
|
+
colors = get_theme_colors()
|
|
177
|
+
left_to_right_reveal(console, f"[SUCCESS] {message}", style=f"bold {colors['primary']}", duration=1.0)
|
|
178
|
+
|
|
179
|
+
def print_error(console: Console, message: str):
|
|
180
|
+
"""Print error message with theme and animation"""
|
|
181
|
+
colors = get_theme_colors()
|
|
182
|
+
left_to_right_reveal(console, f"[ERROR] {message}", style=f"bold {colors['error']}", duration=1.0)
|
|
183
|
+
|
|
184
|
+
def print_warning(console: Console, message: str):
|
|
185
|
+
"""Print warning message with theme and animation"""
|
|
186
|
+
colors = get_theme_colors()
|
|
187
|
+
left_to_right_reveal(console, f"[WARNING] {message}", style=f"bold {colors['warning']}", duration=1.0)
|
|
188
|
+
|
|
189
|
+
def print_info(console: Console, message: str):
|
|
190
|
+
"""Print info message with theme and animation"""
|
|
191
|
+
colors = get_theme_colors()
|
|
192
|
+
left_to_right_reveal(console, f"[INFO] {message}", style=f"bold {colors['primary']}", duration=1.0)
|
|
193
|
+
|
|
194
|
+
def style_text(text: str, style: str = 'primary'):
|
|
195
|
+
"""Apply theme styling to text"""
|
|
196
|
+
colors = get_theme_colors()
|
|
197
|
+
color = colors.get(style, style)
|
|
198
|
+
return f"[{color}]{text}[/{color}]"
|
|
199
|
+
|
|
200
|
+
# ================================
|
|
201
|
+
# THEME SELECTION FUNCTIONS
|
|
202
|
+
# ================================
|
|
203
|
+
|
|
204
|
+
def display_theme_preview(console: Console, theme_name: str, theme_data: Dict[str, str]):
|
|
205
|
+
"""Display a clean preview of a theme - just name and color"""
|
|
206
|
+
primary = theme_data['primary']
|
|
207
|
+
|
|
208
|
+
# Clean, minimal preview
|
|
209
|
+
preview = Text()
|
|
210
|
+
preview.append("ARIONXIV", style=f"bold {primary}")
|
|
211
|
+
|
|
212
|
+
return Panel(
|
|
213
|
+
preview,
|
|
214
|
+
title=f"[bold {primary}]{theme_data['name']}[/bold {primary}]",
|
|
215
|
+
border_style=f"bold {primary}",
|
|
216
|
+
padding=(0, 2)
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
def show_all_themes(console: Console):
|
|
220
|
+
"""Display all available themes with clean previews"""
|
|
221
|
+
from ..utils.animations import left_to_right_reveal
|
|
222
|
+
colors = get_theme_colors()
|
|
223
|
+
|
|
224
|
+
left_to_right_reveal(console, "Available Color Themes", style=f"bold {colors['primary']}", duration=0.5)
|
|
225
|
+
console.print()
|
|
226
|
+
|
|
227
|
+
themes_list = list(AVAILABLE_THEMES.items())
|
|
228
|
+
|
|
229
|
+
# Show themes in groups of 3
|
|
230
|
+
for i in range(0, len(themes_list), 3):
|
|
231
|
+
panels = []
|
|
232
|
+
for j in range(3):
|
|
233
|
+
if i + j < len(themes_list):
|
|
234
|
+
theme = themes_list[i + j]
|
|
235
|
+
panels.append(display_theme_preview(console, theme[0], theme[1]))
|
|
236
|
+
|
|
237
|
+
console.print(Columns(panels, equal=True))
|
|
238
|
+
|
|
239
|
+
def show_themes_table(console: Console):
|
|
240
|
+
"""Show themes in a compact list format"""
|
|
241
|
+
from ..utils.animations import left_to_right_reveal
|
|
242
|
+
colors = get_theme_colors()
|
|
243
|
+
|
|
244
|
+
left_to_right_reveal(console, "Available Themes", style=f"bold {colors['primary']}", duration=0.5)
|
|
245
|
+
console.print()
|
|
246
|
+
|
|
247
|
+
for i, (theme_key, theme_data) in enumerate(AVAILABLE_THEMES.items(), 1):
|
|
248
|
+
primary = theme_data['primary']
|
|
249
|
+
left_to_right_reveal(
|
|
250
|
+
console,
|
|
251
|
+
f" {i}. {theme_data['name']}",
|
|
252
|
+
style=f"bold {primary}",
|
|
253
|
+
duration=0.3
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
def get_theme_choice(console: Console, show_previews: bool = True) -> str:
|
|
257
|
+
"""Get user's theme choice with clean interface"""
|
|
258
|
+
from ..utils.animations import left_to_right_reveal
|
|
259
|
+
|
|
260
|
+
# Show themes in cute boxes
|
|
261
|
+
show_all_themes(console)
|
|
262
|
+
|
|
263
|
+
console.print()
|
|
264
|
+
themes_list = list(AVAILABLE_THEMES.keys())
|
|
265
|
+
colors = get_theme_colors()
|
|
266
|
+
|
|
267
|
+
while True:
|
|
268
|
+
try:
|
|
269
|
+
choice = IntPrompt.ask(
|
|
270
|
+
f"[bold {colors['primary']}]Select theme (1-6)[/bold {colors['primary']}]",
|
|
271
|
+
choices=[str(i) for i in range(1, len(themes_list) + 1)],
|
|
272
|
+
show_choices=False
|
|
273
|
+
)
|
|
274
|
+
|
|
275
|
+
selected_theme = themes_list[choice - 1]
|
|
276
|
+
theme_data = AVAILABLE_THEMES[selected_theme]
|
|
277
|
+
selected_color = theme_data['primary']
|
|
278
|
+
|
|
279
|
+
console.print()
|
|
280
|
+
left_to_right_reveal(
|
|
281
|
+
console,
|
|
282
|
+
f"Selected: {theme_data['name']}",
|
|
283
|
+
style=f"bold {selected_color}",
|
|
284
|
+
duration=0.5
|
|
285
|
+
)
|
|
286
|
+
|
|
287
|
+
# Use the selected theme color for the Confirm prompt, show y/n options
|
|
288
|
+
confirm = Prompt.ask(
|
|
289
|
+
f"[bold {selected_color}]Confirm? (y/n)[/bold {selected_color}]",
|
|
290
|
+
choices=["y", "n"],
|
|
291
|
+
default="y",
|
|
292
|
+
show_choices=False
|
|
293
|
+
).lower()
|
|
294
|
+
|
|
295
|
+
if confirm == "y":
|
|
296
|
+
return selected_theme
|
|
297
|
+
else:
|
|
298
|
+
console.print()
|
|
299
|
+
continue
|
|
300
|
+
|
|
301
|
+
except (ValueError, EOFError, KeyboardInterrupt):
|
|
302
|
+
left_to_right_reveal(console, "Cancelled. Using current theme.", style="white", duration=0.5)
|
|
303
|
+
return get_current_theme_color()
|
|
304
|
+
|
|
305
|
+
def run_theme_selection(console: Console, compact: bool = False) -> str:
|
|
306
|
+
"""Run the complete theme selection process - clean and minimal"""
|
|
307
|
+
from ..utils.animations import left_to_right_reveal
|
|
308
|
+
|
|
309
|
+
console.print()
|
|
310
|
+
colors = get_theme_colors()
|
|
311
|
+
left_to_right_reveal(console, "Theme Selection", style=f"bold {colors['primary']}", duration=0.5)
|
|
312
|
+
console.print()
|
|
313
|
+
|
|
314
|
+
# Get user choice
|
|
315
|
+
selected_theme = get_theme_choice(console, show_previews=not compact)
|
|
316
|
+
|
|
317
|
+
# Show clean confirmation
|
|
318
|
+
theme_data = AVAILABLE_THEMES[selected_theme]
|
|
319
|
+
console.print()
|
|
320
|
+
left_to_right_reveal(
|
|
321
|
+
console,
|
|
322
|
+
f"Theme set to {theme_data['name']}",
|
|
323
|
+
style=f"bold {theme_data['primary']}",
|
|
324
|
+
duration=1.0
|
|
325
|
+
)
|
|
326
|
+
console.print()
|
|
327
|
+
|
|
328
|
+
return selected_theme
|
|
329
|
+
|
|
330
|
+
def quick_theme_select(console: Console) -> str:
|
|
331
|
+
"""Quick theme selection without previews"""
|
|
332
|
+
return get_theme_choice(console, show_previews=False)
|
|
333
|
+
|
|
334
|
+
# ================================
|
|
335
|
+
# VALIDATION AND UTILITIES
|
|
336
|
+
# ================================
|
|
337
|
+
|
|
338
|
+
def is_valid_theme(theme_name: str) -> bool:
|
|
339
|
+
"""Check if a theme name is valid"""
|
|
340
|
+
return theme_name in AVAILABLE_THEMES
|
|
341
|
+
|
|
342
|
+
def get_theme_info(theme_name: str) -> Dict[str, Any]:
|
|
343
|
+
"""Get information about a specific theme"""
|
|
344
|
+
if theme_name in AVAILABLE_THEMES:
|
|
345
|
+
return AVAILABLE_THEMES[theme_name].copy()
|
|
346
|
+
return {}
|
|
347
|
+
|
|
348
|
+
def list_available_themes() -> list:
|
|
349
|
+
"""Get list of available theme names"""
|
|
350
|
+
return list(AVAILABLE_THEMES.keys())
|
|
351
|
+
|
|
352
|
+
def get_theme_names_and_descriptions() -> Dict[str, str]:
|
|
353
|
+
"""Get mapping of theme keys to display names"""
|
|
354
|
+
return {key: data['name'] for key, data in AVAILABLE_THEMES.items()}
|
|
355
|
+
|
|
356
|
+
# ================================
|
|
357
|
+
# BACKWARDS COMPATIBILITY
|
|
358
|
+
# ================================
|
|
359
|
+
|
|
360
|
+
# Ensure backwards compatibility with existing imports
|
|
361
|
+
def create_themed_console_legacy():
|
|
362
|
+
"""Legacy function name for backwards compatibility"""
|
|
363
|
+
return create_themed_console()
|
|
364
|
+
|
|
365
|
+
# Export all theme-related functionality
|
|
366
|
+
__all__ = [
|
|
367
|
+
'AVAILABLE_THEMES',
|
|
368
|
+
'THEME_COLORS',
|
|
369
|
+
'get_current_theme_color',
|
|
370
|
+
'set_theme_colors',
|
|
371
|
+
'get_theme_colors',
|
|
372
|
+
'create_themed_console',
|
|
373
|
+
'create_themed_table',
|
|
374
|
+
'create_themed_panel',
|
|
375
|
+
'print_header',
|
|
376
|
+
'print_success',
|
|
377
|
+
'print_error',
|
|
378
|
+
'print_warning',
|
|
379
|
+
'print_info',
|
|
380
|
+
'style_text',
|
|
381
|
+
'display_theme_preview',
|
|
382
|
+
'show_all_themes',
|
|
383
|
+
'show_themes_table',
|
|
384
|
+
'get_theme_choice',
|
|
385
|
+
'run_theme_selection',
|
|
386
|
+
'quick_theme_select',
|
|
387
|
+
'is_valid_theme',
|
|
388
|
+
'get_theme_info',
|
|
389
|
+
'list_available_themes',
|
|
390
|
+
'get_theme_names_and_descriptions'
|
|
391
|
+
]
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""Utils Package"""
|
|
2
|
+
|
|
3
|
+
from .animations import (
|
|
4
|
+
slam_content,
|
|
5
|
+
slam_columns,
|
|
6
|
+
shake_content,
|
|
7
|
+
shake_text,
|
|
8
|
+
shake_columns,
|
|
9
|
+
shake_panel,
|
|
10
|
+
left_to_right_reveal,
|
|
11
|
+
top_to_bottom_reveal,
|
|
12
|
+
typewriter_reveal,
|
|
13
|
+
stream_text_response,
|
|
14
|
+
stream_markdown_response,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
from .command_suggestions import (
|
|
18
|
+
show_command_suggestions,
|
|
19
|
+
show_back_to_home,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
from .api_config import (
|
|
23
|
+
api_config_manager,
|
|
24
|
+
run_first_time_api_setup,
|
|
25
|
+
show_api_status,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
from .api_client import (
|
|
29
|
+
ArionXivAPIClient,
|
|
30
|
+
APIClientError,
|
|
31
|
+
api_client,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
__all__ = [
|
|
35
|
+
'slam_content',
|
|
36
|
+
'slam_columns',
|
|
37
|
+
'shake_content',
|
|
38
|
+
'shake_text',
|
|
39
|
+
'shake_columns',
|
|
40
|
+
'shake_panel',
|
|
41
|
+
'left_to_right_reveal',
|
|
42
|
+
'top_to_bottom_reveal',
|
|
43
|
+
'typewriter_reveal',
|
|
44
|
+
'stream_text_response',
|
|
45
|
+
'stream_markdown_response',
|
|
46
|
+
'show_command_suggestions',
|
|
47
|
+
'show_back_to_home',
|
|
48
|
+
'api_config_manager',
|
|
49
|
+
'run_first_time_api_setup',
|
|
50
|
+
'show_api_status',
|
|
51
|
+
'ArionXivAPIClient',
|
|
52
|
+
'APIClientError',
|
|
53
|
+
'api_client',
|
|
54
|
+
]
|