cliara 0.3.0__tar.gz → 0.3.2__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.
- {cliara-0.3.0 → cliara-0.3.2}/PKG-INFO +1 -1
- {cliara-0.3.0 → cliara-0.3.2}/cliara/__init__.py +1 -1
- {cliara-0.3.0 → cliara-0.3.2}/cliara/config.py +14 -4
- cliara-0.3.2/cliara/install_logo.py +128 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara.egg-info/PKG-INFO +1 -1
- {cliara-0.3.0 → cliara-0.3.2}/cliara.egg-info/SOURCES.txt +1 -0
- {cliara-0.3.0 → cliara-0.3.2}/pyproject.toml +1 -1
- {cliara-0.3.0 → cliara-0.3.2}/README.md +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/__init__.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/commit_and_deploy.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/copilot_explain.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/explain.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/fix.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/history_search.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/history_summary.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/nl_to_commands.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/prompts/commit_message.txt +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/prompts/copilot_explain.txt +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/prompts/deploy.txt +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/prompts/explain.txt +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/prompts/fix.txt +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/prompts/history_search.txt +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/prompts/history_summary.txt +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/agents/prompts/nl_to_commands.txt +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/console.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/copilot_gate.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/cross_platform.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/deploy_detector.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/deploy_store.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/diff_preview.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/execution_graph.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/highlighting.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/macros.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/main.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/nl_handler.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/regression.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/safety.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/semantic_history.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/session_store.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/setup_ollama.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/setup_wizard.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/shell.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/storage/__init__.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/storage/factory.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/storage/json_backend.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/storage/postgres_backend.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/tools/__init__.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara/tools/migrate.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara.egg-info/dependency_links.txt +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara.egg-info/entry_points.txt +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara.egg-info/requires.txt +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/cliara.egg-info/top_level.txt +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/setup.cfg +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/tests/test_basic.py +0 -0
- {cliara-0.3.0 → cliara-0.3.2}/tests/test_copilot_gate.py +0 -0
|
@@ -191,10 +191,20 @@ class Config:
|
|
|
191
191
|
|
|
192
192
|
def setup_first_run(self):
|
|
193
193
|
"""Interactive first-run setup."""
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
194
|
+
try:
|
|
195
|
+
from cliara.install_logo import print_install_logo
|
|
196
|
+
try:
|
|
197
|
+
from importlib.metadata import version as _pkg_version
|
|
198
|
+
_ver = _pkg_version("cliara")
|
|
199
|
+
except Exception:
|
|
200
|
+
_ver = ""
|
|
201
|
+
print_install_logo(version=_ver)
|
|
202
|
+
except Exception:
|
|
203
|
+
print("\n" + "=" * 60)
|
|
204
|
+
print(" Welcome to Cliara!")
|
|
205
|
+
print("=" * 60 + "\n")
|
|
206
|
+
|
|
207
|
+
print(" Let's get you set up...\n")
|
|
198
208
|
|
|
199
209
|
# Detect and confirm shell
|
|
200
210
|
detected_shell = self._detect_shell()
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Cliara installation welcome logo.
|
|
3
|
+
|
|
4
|
+
Displayed exactly once — on the first run after installation.
|
|
5
|
+
Uses pixel-block art (similar to Claude Code's style) rendered via Rich.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
# ---------------------------------------------------------------------------
|
|
11
|
+
# Pixel-block font — each letter is a 5-row × 5-col grid.
|
|
12
|
+
# Each grid cell is 2 terminal characters wide: "██" (filled) or " " (empty).
|
|
13
|
+
# Total per-letter width = 10 chars.
|
|
14
|
+
# ---------------------------------------------------------------------------
|
|
15
|
+
_LETTERS: dict[str, list[str]] = {
|
|
16
|
+
"C": [
|
|
17
|
+
" ██████ ",
|
|
18
|
+
"██ ",
|
|
19
|
+
"██ ",
|
|
20
|
+
"██ ",
|
|
21
|
+
" ██████ ",
|
|
22
|
+
],
|
|
23
|
+
"L": [
|
|
24
|
+
"██ ",
|
|
25
|
+
"██ ",
|
|
26
|
+
"██ ",
|
|
27
|
+
"██ ",
|
|
28
|
+
"██████████",
|
|
29
|
+
],
|
|
30
|
+
"I": [
|
|
31
|
+
"██████████",
|
|
32
|
+
" ██ ",
|
|
33
|
+
" ██ ",
|
|
34
|
+
" ██ ",
|
|
35
|
+
"██████████",
|
|
36
|
+
],
|
|
37
|
+
"A": [
|
|
38
|
+
" ██████ ",
|
|
39
|
+
"██ ██",
|
|
40
|
+
"██████████",
|
|
41
|
+
"██ ██",
|
|
42
|
+
"██ ██",
|
|
43
|
+
],
|
|
44
|
+
"R": [
|
|
45
|
+
"████████ ",
|
|
46
|
+
"██ ██",
|
|
47
|
+
"████████ ",
|
|
48
|
+
"██ ██ ",
|
|
49
|
+
"██ ██",
|
|
50
|
+
],
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
# Gradient colors applied top-to-bottom across the logo rows
|
|
54
|
+
_ROW_COLORS = [
|
|
55
|
+
"#00e5cc", # bright teal
|
|
56
|
+
"#00cfba",
|
|
57
|
+
"#00b8a5",
|
|
58
|
+
"#00cfba",
|
|
59
|
+
"#00e5cc",
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def _build_logo_lines(word: str) -> list[str]:
|
|
64
|
+
"""Return 5 assembled pixel-art rows for *word*."""
|
|
65
|
+
gap = " "
|
|
66
|
+
rows = []
|
|
67
|
+
for row_idx in range(5):
|
|
68
|
+
parts = [_LETTERS[ch][row_idx] for ch in word.upper() if ch in _LETTERS]
|
|
69
|
+
rows.append(gap.join(parts))
|
|
70
|
+
return rows
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def print_install_logo(version: str = "") -> None:
|
|
74
|
+
"""Print the Cliara pixel-art welcome banner to stdout.
|
|
75
|
+
|
|
76
|
+
Falls back gracefully to plain text if Rich is unavailable or the
|
|
77
|
+
terminal cannot render Unicode block characters.
|
|
78
|
+
"""
|
|
79
|
+
try:
|
|
80
|
+
import sys
|
|
81
|
+
|
|
82
|
+
# Ensure stdout uses UTF-8 so block characters render on Windows.
|
|
83
|
+
if hasattr(sys.stdout, "reconfigure"):
|
|
84
|
+
try:
|
|
85
|
+
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
|
|
86
|
+
except Exception:
|
|
87
|
+
pass
|
|
88
|
+
|
|
89
|
+
from rich.console import Console
|
|
90
|
+
from rich.text import Text
|
|
91
|
+
from rich.align import Align
|
|
92
|
+
|
|
93
|
+
console = Console(highlight=False)
|
|
94
|
+
logo_lines = _build_logo_lines("CLIARA")
|
|
95
|
+
|
|
96
|
+
logo_text = Text()
|
|
97
|
+
for i, line in enumerate(logo_lines):
|
|
98
|
+
color = _ROW_COLORS[i % len(_ROW_COLORS)]
|
|
99
|
+
logo_text.append(line, style=f"bold {color}")
|
|
100
|
+
logo_text.append("\n")
|
|
101
|
+
|
|
102
|
+
ver_str = f"v{version} · " if version else ""
|
|
103
|
+
|
|
104
|
+
console.print()
|
|
105
|
+
console.print(Align.center(logo_text))
|
|
106
|
+
console.print(
|
|
107
|
+
Align.center(
|
|
108
|
+
f"[bold #00e5cc]AI-powered shell[/] [dim]·[/] "
|
|
109
|
+
"[dim]natural language[/] [dim]·[/] [dim]macros[/]"
|
|
110
|
+
)
|
|
111
|
+
)
|
|
112
|
+
console.print(
|
|
113
|
+
Align.center(f"[dim]{ver_str}Type [bold]help[/bold] to get started[/dim]")
|
|
114
|
+
)
|
|
115
|
+
console.print()
|
|
116
|
+
|
|
117
|
+
except Exception:
|
|
118
|
+
_plain_fallback(version)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def _plain_fallback(version: str = "") -> None:
|
|
122
|
+
ver = f" v{version}" if version else ""
|
|
123
|
+
print()
|
|
124
|
+
print("=" * 60)
|
|
125
|
+
print(f" Welcome to Cliara{ver}!")
|
|
126
|
+
print(" AI-powered shell · natural language · macros")
|
|
127
|
+
print("=" * 60)
|
|
128
|
+
print()
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|