agent-cli 0.67.0__py3-none-any.whl → 0.67.2__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.
agent_cli/_extras.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "audio": ["Audio recording/playback with Wyoming protocol", ["sounddevice", "wyoming"]],
2
+ "audio": ["Audio recording/playback with Wyoming protocol", ["numpy", "sounddevice", "wyoming"]],
3
3
  "llm": ["LLM framework (pydantic-ai)", ["pydantic_ai"]],
4
4
  "memory": ["Long-term memory proxy", ["chromadb", "yaml"]],
5
5
  "rag": ["RAG proxy (ChromaDB, embeddings)", ["chromadb"]],
@@ -1,5 +1,7 @@
1
1
  # This file was autogenerated by uv via the following command:
2
2
  # uv export --extra audio --no-dev --no-emit-project --no-hashes
3
+ annotated-types==0.7.0
4
+ # via pydantic
3
5
  anyio==4.12.1
4
6
  # via httpx
5
7
  certifi==2026.1.4
@@ -34,6 +36,10 @@ psutil==7.2.1 ; sys_platform == 'win32'
34
36
  # via agent-cli
35
37
  pycparser==2.23 ; implementation_name != 'PyPy'
36
38
  # via cffi
39
+ pydantic==2.12.5
40
+ # via agent-cli
41
+ pydantic-core==2.41.5
42
+ # via pydantic
37
43
  pygments==2.19.2
38
44
  # via rich
39
45
  pyperclip==1.11.0
@@ -55,6 +61,11 @@ typer==0.21.1
55
61
  typing-extensions==4.15.0
56
62
  # via
57
63
  # anyio
64
+ # pydantic
65
+ # pydantic-core
58
66
  # typer
67
+ # typing-inspection
68
+ typing-inspection==0.4.2
69
+ # via pydantic
59
70
  wyoming==1.8.0
60
71
  # via agent-cli
@@ -96,7 +96,6 @@ mpmath==1.3.0
96
96
  # via sympy
97
97
  numpy==2.3.5
98
98
  # via
99
- # agent-cli
100
99
  # ctranslate2
101
100
  # onnxruntime
102
101
  onnxruntime==1.20.1
@@ -111,6 +110,7 @@ psutil==7.2.1 ; sys_platform == 'win32'
111
110
  # via agent-cli
112
111
  pydantic==2.12.5
113
112
  # via
113
+ # agent-cli
114
114
  # fastapi
115
115
  # fastapi-cloud-cli
116
116
  # pydantic-extra-types
@@ -164,7 +164,6 @@ num2words==0.5.14
164
164
  # via misaki
165
165
  numpy==2.3.5
166
166
  # via
167
- # agent-cli
168
167
  # blis
169
168
  # kokoro
170
169
  # soundfile
@@ -231,6 +230,7 @@ pycparser==2.23 ; implementation_name != 'PyPy'
231
230
  # via cffi
232
231
  pydantic==2.12.5
233
232
  # via
233
+ # agent-cli
234
234
  # confection
235
235
  # fastapi
236
236
  # fastapi-cloud-cli
@@ -85,8 +85,6 @@ markdown-it-py==4.0.0
85
85
  # via rich
86
86
  mdurl==0.1.2
87
87
  # via markdown-it-py
88
- numpy==2.3.5
89
- # via agent-cli
90
88
  openai==2.15.0
91
89
  # via pydantic-ai-slim
92
90
  opentelemetry-api==1.39.1
@@ -105,6 +103,7 @@ pycparser==2.23 ; implementation_name != 'PyPy' and platform_python_implementati
105
103
  # via cffi
106
104
  pydantic==2.12.5
107
105
  # via
106
+ # agent-cli
108
107
  # genai-prices
109
108
  # google-genai
110
109
  # openai
@@ -132,7 +132,6 @@ mpmath==1.3.0
132
132
  # via sympy
133
133
  numpy==2.3.5
134
134
  # via
135
- # agent-cli
136
135
  # chromadb
137
136
  # onnxruntime
138
137
  # transformers
@@ -191,6 +190,7 @@ pybase64==1.4.3
191
190
  # via chromadb
192
191
  pydantic==2.12.5
193
192
  # via
193
+ # agent-cli
194
194
  # chromadb
195
195
  # fastapi
196
196
  # fastapi-cloud-cli
@@ -1,6 +1,6 @@
1
1
  # This file was autogenerated by uv via the following command:
2
2
  # uv export --extra mlx-whisper --no-dev --no-emit-project --no-hashes
3
- annotated-doc==0.0.4
3
+ annotated-doc==0.0.4 ; platform_machine == 'arm64' and sys_platform == 'darwin'
4
4
  # via fastapi
5
5
  annotated-types==0.7.0
6
6
  # via pydantic
@@ -15,7 +15,7 @@ certifi==2026.1.4
15
15
  # httpx
16
16
  # requests
17
17
  # sentry-sdk
18
- charset-normalizer==3.4.4
18
+ charset-normalizer==3.4.4 ; platform_machine == 'arm64' and sys_platform == 'darwin'
19
19
  # via requests
20
20
  click==8.3.1
21
21
  # via
@@ -35,19 +35,19 @@ email-validator==2.3.0
35
35
  # via
36
36
  # fastapi
37
37
  # pydantic
38
- fastapi==0.128.0
38
+ fastapi==0.128.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
39
39
  # via agent-cli
40
- fastapi-cli==0.0.20
40
+ fastapi-cli==0.0.20 ; platform_machine == 'arm64' and sys_platform == 'darwin'
41
41
  # via fastapi
42
- fastapi-cloud-cli==0.10.1
42
+ fastapi-cloud-cli==0.10.1 ; platform_machine == 'arm64' and sys_platform == 'darwin'
43
43
  # via fastapi-cli
44
- fastar==0.8.0
44
+ fastar==0.8.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
45
45
  # via fastapi-cloud-cli
46
- filelock==3.20.3
46
+ filelock==3.20.3 ; platform_machine == 'arm64' and sys_platform == 'darwin'
47
47
  # via
48
48
  # huggingface-hub
49
49
  # torch
50
- fsspec==2026.1.0
50
+ fsspec==2026.1.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
51
51
  # via
52
52
  # huggingface-hub
53
53
  # torch
@@ -55,18 +55,18 @@ h11==0.16.0
55
55
  # via
56
56
  # httpcore
57
57
  # uvicorn
58
- hf-xet==1.2.0 ; platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'
58
+ hf-xet==1.2.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
59
59
  # via huggingface-hub
60
60
  httpcore==1.0.9
61
61
  # via httpx
62
- httptools==0.7.1
62
+ httptools==0.7.1 ; platform_machine == 'arm64' and sys_platform == 'darwin'
63
63
  # via uvicorn
64
64
  httpx==0.28.1
65
65
  # via
66
66
  # agent-cli
67
67
  # fastapi
68
68
  # fastapi-cloud-cli
69
- huggingface-hub==0.36.0
69
+ huggingface-hub==0.36.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
70
70
  # via mlx-whisper
71
71
  idna==3.11
72
72
  # via
@@ -74,92 +74,53 @@ idna==3.11
74
74
  # email-validator
75
75
  # httpx
76
76
  # requests
77
- jinja2==3.1.6
77
+ jinja2==3.1.6 ; platform_machine == 'arm64' and sys_platform == 'darwin'
78
78
  # via
79
79
  # fastapi
80
80
  # torch
81
- llvmlite==0.46.0
81
+ llvmlite==0.46.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
82
82
  # via numba
83
83
  markdown-it-py==4.0.0
84
84
  # via rich
85
- markupsafe==3.0.3
85
+ markupsafe==3.0.3 ; platform_machine == 'arm64' and sys_platform == 'darwin'
86
86
  # via jinja2
87
87
  mdurl==0.1.2
88
88
  # via markdown-it-py
89
- mlx==0.30.3
89
+ mlx==0.30.3 ; platform_machine == 'arm64' and sys_platform == 'darwin'
90
90
  # via mlx-whisper
91
- mlx-metal==0.30.3 ; sys_platform == 'darwin'
91
+ mlx-metal==0.30.3 ; platform_machine == 'arm64' and sys_platform == 'darwin'
92
92
  # via mlx
93
- mlx-whisper==0.4.3
93
+ mlx-whisper==0.4.3 ; platform_machine == 'arm64' and sys_platform == 'darwin'
94
94
  # via agent-cli
95
- more-itertools==10.8.0
95
+ more-itertools==10.8.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
96
96
  # via mlx-whisper
97
- mpmath==1.3.0
97
+ mpmath==1.3.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
98
98
  # via sympy
99
- networkx==3.6.1
99
+ networkx==3.6.1 ; platform_machine == 'arm64' and sys_platform == 'darwin'
100
100
  # via torch
101
- numba==0.63.1
101
+ numba==0.63.1 ; platform_machine == 'arm64' and sys_platform == 'darwin'
102
102
  # via mlx-whisper
103
- numpy==2.3.5
103
+ numpy==2.3.5 ; platform_machine == 'arm64' and sys_platform == 'darwin'
104
104
  # via
105
- # agent-cli
106
105
  # mlx-whisper
107
106
  # numba
108
107
  # scipy
109
- nvidia-cublas-cu12==12.8.4.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'
110
- # via
111
- # nvidia-cudnn-cu12
112
- # nvidia-cusolver-cu12
113
- # torch
114
- nvidia-cuda-cupti-cu12==12.8.90 ; platform_machine == 'x86_64' and sys_platform == 'linux'
115
- # via torch
116
- nvidia-cuda-nvrtc-cu12==12.8.93 ; platform_machine == 'x86_64' and sys_platform == 'linux'
117
- # via torch
118
- nvidia-cuda-runtime-cu12==12.8.90 ; platform_machine == 'x86_64' and sys_platform == 'linux'
119
- # via torch
120
- nvidia-cudnn-cu12==9.10.2.21 ; platform_machine == 'x86_64' and sys_platform == 'linux'
121
- # via torch
122
- nvidia-cufft-cu12==11.3.3.83 ; platform_machine == 'x86_64' and sys_platform == 'linux'
123
- # via torch
124
- nvidia-cufile-cu12==1.13.1.3 ; platform_machine == 'x86_64' and sys_platform == 'linux'
125
- # via torch
126
- nvidia-curand-cu12==10.3.9.90 ; platform_machine == 'x86_64' and sys_platform == 'linux'
127
- # via torch
128
- nvidia-cusolver-cu12==11.7.3.90 ; platform_machine == 'x86_64' and sys_platform == 'linux'
129
- # via torch
130
- nvidia-cusparse-cu12==12.5.8.93 ; platform_machine == 'x86_64' and sys_platform == 'linux'
131
- # via
132
- # nvidia-cusolver-cu12
133
- # torch
134
- nvidia-cusparselt-cu12==0.7.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'
135
- # via torch
136
- nvidia-nccl-cu12==2.27.5 ; platform_machine == 'x86_64' and sys_platform == 'linux'
137
- # via torch
138
- nvidia-nvjitlink-cu12==12.8.93 ; platform_machine == 'x86_64' and sys_platform == 'linux'
139
- # via
140
- # nvidia-cufft-cu12
141
- # nvidia-cusolver-cu12
142
- # nvidia-cusparse-cu12
143
- # torch
144
- nvidia-nvshmem-cu12==3.3.20 ; platform_machine == 'x86_64' and sys_platform == 'linux'
145
- # via torch
146
- nvidia-nvtx-cu12==12.8.90 ; platform_machine == 'x86_64' and sys_platform == 'linux'
147
- # via torch
148
- packaging==25.0
108
+ packaging==25.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
149
109
  # via huggingface-hub
150
110
  psutil==7.2.1 ; sys_platform == 'win32'
151
111
  # via agent-cli
152
112
  pydantic==2.12.5
153
113
  # via
114
+ # agent-cli
154
115
  # fastapi
155
116
  # fastapi-cloud-cli
156
117
  # pydantic-extra-types
157
118
  # pydantic-settings
158
119
  pydantic-core==2.41.5
159
120
  # via pydantic
160
- pydantic-extra-types==2.11.0
121
+ pydantic-extra-types==2.11.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
161
122
  # via fastapi
162
- pydantic-settings==2.12.0
123
+ pydantic-settings==2.12.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
163
124
  # via fastapi
164
125
  pygments==2.19.2
165
126
  # via rich
@@ -170,15 +131,15 @@ python-dotenv==1.2.1
170
131
  # dotenv
171
132
  # pydantic-settings
172
133
  # uvicorn
173
- python-multipart==0.0.21
134
+ python-multipart==0.0.21 ; platform_machine == 'arm64' and sys_platform == 'darwin'
174
135
  # via fastapi
175
- pyyaml==6.0.3
136
+ pyyaml==6.0.3 ; platform_machine == 'arm64' and sys_platform == 'darwin'
176
137
  # via
177
138
  # huggingface-hub
178
139
  # uvicorn
179
- regex==2026.1.15
140
+ regex==2026.1.15 ; platform_machine == 'arm64' and sys_platform == 'darwin'
180
141
  # via tiktoken
181
- requests==2.32.5
142
+ requests==2.32.5 ; platform_machine == 'arm64' and sys_platform == 'darwin'
182
143
  # via
183
144
  # huggingface-hub
184
145
  # tiktoken
@@ -187,36 +148,34 @@ rich==14.2.0
187
148
  # agent-cli
188
149
  # rich-toolkit
189
150
  # typer
190
- rich-toolkit==0.17.1
151
+ rich-toolkit==0.17.1 ; platform_machine == 'arm64' and sys_platform == 'darwin'
191
152
  # via
192
153
  # fastapi-cli
193
154
  # fastapi-cloud-cli
194
- rignore==0.7.6
155
+ rignore==0.7.6 ; platform_machine == 'arm64' and sys_platform == 'darwin'
195
156
  # via fastapi-cloud-cli
196
- scipy==1.17.0
157
+ scipy==1.17.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
197
158
  # via mlx-whisper
198
- sentry-sdk==2.49.0
159
+ sentry-sdk==2.49.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
199
160
  # via fastapi-cloud-cli
200
161
  setproctitle==1.3.7
201
162
  # via agent-cli
202
- setuptools==80.9.0 ; python_full_version >= '3.12'
163
+ setuptools==80.9.0 ; python_full_version >= '3.12' and platform_machine == 'arm64' and sys_platform == 'darwin'
203
164
  # via torch
204
165
  shellingham==1.5.4
205
166
  # via typer
206
- starlette==0.50.0
167
+ starlette==0.50.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
207
168
  # via fastapi
208
- sympy==1.14.0
169
+ sympy==1.14.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
209
170
  # via torch
210
- tiktoken==0.12.0
171
+ tiktoken==0.12.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
211
172
  # via mlx-whisper
212
- torch==2.9.1
173
+ torch==2.9.1 ; platform_machine == 'arm64' and sys_platform == 'darwin'
213
174
  # via mlx-whisper
214
- tqdm==4.67.1
175
+ tqdm==4.67.1 ; platform_machine == 'arm64' and sys_platform == 'darwin'
215
176
  # via
216
177
  # huggingface-hub
217
178
  # mlx-whisper
218
- triton==3.5.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'
219
- # via torch
220
179
  typer==0.21.1
221
180
  # via
222
181
  # agent-cli
@@ -239,18 +198,18 @@ typing-inspection==0.4.2
239
198
  # via
240
199
  # pydantic
241
200
  # pydantic-settings
242
- urllib3==2.3.0
201
+ urllib3==2.3.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
243
202
  # via
244
203
  # requests
245
204
  # sentry-sdk
246
- uvicorn==0.40.0
205
+ uvicorn==0.40.0 ; platform_machine == 'arm64' and sys_platform == 'darwin'
247
206
  # via
248
207
  # fastapi
249
208
  # fastapi-cli
250
209
  # fastapi-cloud-cli
251
- uvloop==0.22.1 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'
210
+ uvloop==0.22.1 ; platform_machine == 'arm64' and platform_python_implementation != 'PyPy' and sys_platform == 'darwin'
252
211
  # via uvicorn
253
- watchfiles==1.1.1
212
+ watchfiles==1.1.1 ; platform_machine == 'arm64' and sys_platform == 'darwin'
254
213
  # via uvicorn
255
- websockets==15.0.1
214
+ websockets==15.0.1 ; platform_machine == 'arm64' and sys_platform == 'darwin'
256
215
  # via uvicorn
@@ -74,9 +74,7 @@ mdurl==0.1.2
74
74
  mpmath==1.3.0
75
75
  # via sympy
76
76
  numpy==2.3.5
77
- # via
78
- # agent-cli
79
- # onnxruntime
77
+ # via onnxruntime
80
78
  onnxruntime==1.20.1
81
79
  # via piper-tts
82
80
  packaging==25.0
@@ -89,6 +87,7 @@ psutil==7.2.1 ; sys_platform == 'win32'
89
87
  # via agent-cli
90
88
  pydantic==2.12.5
91
89
  # via
90
+ # agent-cli
92
91
  # fastapi
93
92
  # fastapi-cloud-cli
94
93
  # pydantic-extra-types
@@ -160,7 +160,6 @@ mpmath==1.3.0
160
160
  # via sympy
161
161
  numpy==2.3.5
162
162
  # via
163
- # agent-cli
164
163
  # chromadb
165
164
  # magika
166
165
  # onnxruntime
@@ -228,6 +227,7 @@ pycparser==2.23 ; implementation_name != 'PyPy' and platform_python_implementati
228
227
  # via cffi
229
228
  pydantic==2.12.5
230
229
  # via
230
+ # agent-cli
231
231
  # chromadb
232
232
  # fastapi
233
233
  # fastapi-cloud-cli
@@ -65,12 +65,11 @@ markupsafe==3.0.3
65
65
  # via jinja2
66
66
  mdurl==0.1.2
67
67
  # via markdown-it-py
68
- numpy==2.3.5
69
- # via agent-cli
70
68
  psutil==7.2.1 ; sys_platform == 'win32'
71
69
  # via agent-cli
72
70
  pydantic==2.12.5
73
71
  # via
72
+ # agent-cli
74
73
  # fastapi
75
74
  # fastapi-cloud-cli
76
75
  # pydantic-extra-types
@@ -1,5 +1,7 @@
1
1
  # This file was autogenerated by uv via the following command:
2
2
  # uv export --extra speed --no-dev --no-emit-project --no-hashes
3
+ annotated-types==0.7.0
4
+ # via pydantic
3
5
  anyio==4.12.1
4
6
  # via httpx
5
7
  audiostretchy==1.3.5
@@ -31,11 +33,13 @@ markdown-it-py==4.0.0
31
33
  mdurl==0.1.2
32
34
  # via markdown-it-py
33
35
  numpy==2.3.5
34
- # via
35
- # agent-cli
36
- # audiostretchy
36
+ # via audiostretchy
37
37
  psutil==7.2.1 ; sys_platform == 'win32'
38
38
  # via agent-cli
39
+ pydantic==2.12.5
40
+ # via agent-cli
41
+ pydantic-core==2.41.5
42
+ # via pydantic
39
43
  pygments==2.19.2
40
44
  # via rich
41
45
  pyperclip==1.11.0
@@ -57,4 +61,9 @@ typer==0.21.1
57
61
  typing-extensions==4.15.0
58
62
  # via
59
63
  # anyio
64
+ # pydantic
65
+ # pydantic-core
60
66
  # typer
67
+ # typing-inspection
68
+ typing-inspection==0.4.2
69
+ # via pydantic
@@ -1,5 +1,7 @@
1
1
  # This file was autogenerated by uv via the following command:
2
2
  # uv export --extra vad --no-dev --no-emit-project --no-hashes
3
+ annotated-types==0.7.0
4
+ # via pydantic
3
5
  anyio==4.12.1
4
6
  # via httpx
5
7
  certifi==2026.1.4
@@ -45,9 +47,7 @@ mpmath==1.3.0
45
47
  networkx==3.6.1
46
48
  # via torch
47
49
  numpy==2.3.5
48
- # via
49
- # agent-cli
50
- # onnxruntime
50
+ # via onnxruntime
51
51
  nvidia-cublas-cu12==12.8.4.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'
52
52
  # via
53
53
  # nvidia-cudnn-cu12
@@ -97,6 +97,10 @@ protobuf==6.33.4
97
97
  # via onnxruntime
98
98
  psutil==7.2.1 ; sys_platform == 'win32'
99
99
  # via agent-cli
100
+ pydantic==2.12.5
101
+ # via agent-cli
102
+ pydantic-core==2.41.5
103
+ # via pydantic
100
104
  pygments==2.19.2
101
105
  # via rich
102
106
  pyperclip==1.11.0
@@ -134,5 +138,10 @@ typer==0.21.1
134
138
  typing-extensions==4.15.0
135
139
  # via
136
140
  # anyio
141
+ # pydantic
142
+ # pydantic-core
137
143
  # torch
138
144
  # typer
145
+ # typing-inspection
146
+ typing-inspection==0.4.2
147
+ # via pydantic
agent_cli/core/deps.py CHANGED
@@ -51,46 +51,68 @@ def check_extra_installed(extra: str) -> bool:
51
51
  return all(_check_package_installed(pkg) for pkg in packages)
52
52
 
53
53
 
54
+ def _format_extra_item(extra: str) -> str:
55
+ """Format a single extra as a list item with description."""
56
+ desc, _ = EXTRAS.get(extra, ("", []))
57
+ if desc:
58
+ return f" - '{extra}' ({desc})"
59
+ return f" - '{extra}'"
60
+
61
+
62
+ def _format_install_commands(extras: list[str]) -> list[str]:
63
+ """Format install commands for one or more extras."""
64
+ combined = ",".join(extras)
65
+ extras_args = " ".join(extras)
66
+ return [
67
+ "Install with:",
68
+ f' [bold cyan]uv tool install -p 3.13 "agent-cli\\[{combined}]"[/bold cyan]',
69
+ " # or",
70
+ f" [bold cyan]agent-cli install-extras {extras_args}[/bold cyan]",
71
+ ]
72
+
73
+
54
74
  def get_install_hint(extra: str) -> str:
55
- """Get install command hint for an extra.
75
+ """Get install command hint for a single extra.
56
76
 
57
77
  Supports `|` syntax for alternatives: "piper|kokoro" shows both options.
58
78
  """
59
79
  # Handle "extra1|extra2" syntax - show all options
60
80
  if "|" in extra:
61
81
  alternatives = extra.split("|")
62
- options = []
63
- for alt in alternatives:
64
- desc, _ = EXTRAS.get(alt, ("", []))
65
- options.append((alt, desc))
66
-
67
82
  lines = ["This command requires one of:"]
68
- for alt, desc in options:
69
- if desc:
70
- lines.append(f" - '{alt}' ({desc})")
71
- else:
72
- lines.append(f" - '{alt}'")
83
+ lines.extend(_format_extra_item(alt) for alt in alternatives)
73
84
  lines.append("")
74
85
  lines.append("Install one with:")
75
- for alt, _ in options:
76
- lines.append(f' uv tool install "agent-cli[{alt}]" -p 3.13')
86
+ lines.extend(
87
+ f' [bold cyan]uv tool install -p 3.13 "agent-cli\\[{alt}]"[/bold cyan]'
88
+ for alt in alternatives
89
+ )
77
90
  lines.append(" # or")
78
- for alt, _ in options:
79
- lines.append(f" agent-cli install-extras {alt}")
91
+ lines.extend(
92
+ f" [bold cyan]agent-cli install-extras {alt}[/bold cyan]" for alt in alternatives
93
+ )
80
94
  return "\n".join(lines)
81
95
 
82
96
  desc, _ = EXTRAS.get(extra, ("", []))
83
- lines = [
84
- f"This command requires the '{extra}' extra",
85
- ]
97
+ header = f"This command requires the '{extra}' extra"
86
98
  if desc:
87
- lines[0] += f" ({desc})"
88
- lines[0] += "."
99
+ header += f" ({desc})"
100
+ header += "."
101
+
102
+ lines = [header, ""]
103
+ lines.extend(_format_install_commands([extra]))
104
+ return "\n".join(lines)
105
+
106
+
107
+ def get_combined_install_hint(extras: list[str]) -> str:
108
+ """Get a combined install hint for multiple missing extras."""
109
+ if len(extras) == 1:
110
+ return get_install_hint(extras[0])
111
+
112
+ lines = ["This command requires the following extras:"]
113
+ lines.extend(_format_extra_item(extra) for extra in extras)
89
114
  lines.append("")
90
- lines.append("Install with:")
91
- lines.append(f' uv tool install "agent-cli[{extra}]" -p 3.13')
92
- lines.append(" # or")
93
- lines.append(f" agent-cli install-extras {extra}")
115
+ lines.extend(_format_install_commands(extras))
94
116
  return "\n".join(lines)
95
117
 
96
118
 
@@ -127,8 +149,7 @@ def requires_extras(*extras: str) -> Callable[[F], F]:
127
149
 
128
150
  missing = [e for e in extras if not check_extra_installed(e)]
129
151
  if missing:
130
- for extra in missing:
131
- print_error_message(get_install_hint(extra))
152
+ print_error_message(get_combined_install_hint(missing))
132
153
  raise typer.Exit(1)
133
154
  return func(*args, **kwargs)
134
155
 
agent_cli/core/utils.py CHANGED
@@ -211,8 +211,8 @@ def print_output_panel(
211
211
 
212
212
 
213
213
  def print_error_message(message: str, suggestion: str | None = None) -> None:
214
- """Prints an error message in a panel."""
215
- error_text = Text(message)
214
+ """Prints an error message in a panel with rich markup support."""
215
+ error_text = Text.from_markup(message)
216
216
  if suggestion:
217
217
  error_text.append("\n\n")
218
218
  error_text.append(suggestion)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-cli
3
- Version: 0.67.0
3
+ Version: 0.67.2
4
4
  Summary: A suite of AI-powered command-line tools for text correction, audio transcription, and voice assistance.
5
5
  Project-URL: Homepage, https://github.com/basnijholt/agent-cli
6
6
  Author-email: Bas Nijholt <bas@nijho.lt>
@@ -8,13 +8,14 @@ License-File: LICENSE
8
8
  Requires-Python: <3.14,>=3.11
9
9
  Requires-Dist: dotenv
10
10
  Requires-Dist: httpx
11
- Requires-Dist: numpy
12
11
  Requires-Dist: psutil; sys_platform == 'win32'
12
+ Requires-Dist: pydantic
13
13
  Requires-Dist: pyperclip
14
14
  Requires-Dist: rich
15
15
  Requires-Dist: setproctitle
16
16
  Requires-Dist: typer
17
17
  Provides-Extra: audio
18
+ Requires-Dist: numpy; extra == 'audio'
18
19
  Requires-Dist: sounddevice>=0.4.6; extra == 'audio'
19
20
  Requires-Dist: wyoming>=1.5.2; extra == 'audio'
20
21
  Provides-Extra: dev
@@ -51,8 +52,8 @@ Requires-Dist: pyyaml>=6.0.0; extra == 'memory'
51
52
  Requires-Dist: transformers>=4.30.0; extra == 'memory'
52
53
  Requires-Dist: watchfiles>=0.21.0; extra == 'memory'
53
54
  Provides-Extra: mlx-whisper
54
- Requires-Dist: fastapi[standard]; extra == 'mlx-whisper'
55
- Requires-Dist: mlx-whisper>=0.4.0; extra == 'mlx-whisper'
55
+ Requires-Dist: fastapi[standard]; (sys_platform == 'darwin' and platform_machine == 'arm64') and extra == 'mlx-whisper'
56
+ Requires-Dist: mlx-whisper>=0.4.0; (sys_platform == 'darwin' and platform_machine == 'arm64') and extra == 'mlx-whisper'
56
57
  Provides-Extra: piper
57
58
  Requires-Dist: fastapi[standard]; extra == 'piper'
58
59
  Requires-Dist: piper-tts>=1.2.0; extra == 'piper'
@@ -1,6 +1,6 @@
1
1
  agent_cli/__init__.py,sha256=-bo57j_5TsCug2tGHh7wClAGDhzN239639K40pgVh4g,187
2
2
  agent_cli/__main__.py,sha256=2wx_SxA8KRdejM-hBFLN8JTR2rIgtwnDH03MPAbJH5U,106
3
- agent_cli/_extras.json,sha256=CckrkVfTGKftzFSasCwnkqy9u6EJ1nmCTQYdB7pYW7U,699
3
+ agent_cli/_extras.json,sha256=PCeXMr8zX04n_fcLrticn4lRpisZTfBkT2oqdImVzEY,708
4
4
  agent_cli/_tools.py,sha256=u9Ww-k-sbwFnMTW8sreFGd71nJP6o5hKcM0Zd_D9GZk,12136
5
5
  agent_cli/api.py,sha256=FQ_HATc7DaedbEFQ275Z18wV90tkDByD_9x_K0wdSLQ,456
6
6
  agent_cli/cli.py,sha256=zCk7sVVZstTU3GHFXAavcXd8Kactav4x0PyVY_rX4SI,2739
@@ -12,17 +12,17 @@ agent_cli/example-config.toml,sha256=xd9BXeOqdYx4xFJt58VBs2I49ESy6dF4-mWF_g8sM9o
12
12
  agent_cli/opts.py,sha256=qMK_mLxzGAbX7C2IYuCFvOkLgaxCCMO66I9ps8AdrYo,12114
13
13
  agent_cli/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  agent_cli/_requirements/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- agent_cli/_requirements/audio.txt,sha256=IruUORYlMgsZp7VwgTsPMH280_om8wN8Ifs77gOFxCo,1162
16
- agent_cli/_requirements/faster-whisper.txt,sha256=jq-_ZPb_MMf4F3XbavRF4lgtEij46BunMan4rRNW7Fc,4210
17
- agent_cli/_requirements/kokoro.txt,sha256=cMPQvidD4bnK8aGl8V4ZYFqEu_VYX1l67YFqpfcvOhw,8868
18
- agent_cli/_requirements/llm.txt,sha256=gpv8Y_iJxoY2aCTmZpWThi0rvERN30MtGGcETsCriOE,3474
19
- agent_cli/_requirements/memory.txt,sha256=6Cybqu8UGcgtWXEYmKU0sxAtiIOW33g4DqoDe-pFQBg,7152
20
- agent_cli/_requirements/mlx-whisper.txt,sha256=85RNbfuCwOknROjr6rCan-FlNwNbIsjhB6Aqmmn1SmQ,6090
21
- agent_cli/_requirements/piper.txt,sha256=YBgPSTlbXW-r5VLd1gQ5LDxF6h-owHOdgjFcoTaU8w0,3340
22
- agent_cli/_requirements/rag.txt,sha256=Zd5mgG7u8L4iptKj8yuywuHEgMZqE2qyijXtH2DGERE,8127
23
- agent_cli/_requirements/server.txt,sha256=w79d1h7Ve5qgUlATMjGIcxcUYxKFFaYe2oL0aWsXLzw,2896
24
- agent_cli/_requirements/speed.txt,sha256=0avanClTgurU-J-KRkJLTDmERePR80lJIydEkdEEx4k,1130
25
- agent_cli/_requirements/vad.txt,sha256=X24VHAweTcn5QcHgyY7HFametXLWHUxx0Y2oOi2nntg,3683
15
+ agent_cli/_requirements/audio.txt,sha256=VymefAqXKNQDg_hlNiO3-Pz8zApp1IqbtWjUv07fSL0,1391
16
+ agent_cli/_requirements/faster-whisper.txt,sha256=QP8akE33gcjpHmim1zcbuPOvcOAxBGh-tiOpRXfX3KI,4210
17
+ agent_cli/_requirements/kokoro.txt,sha256=XzvT9FvzWvMQK_ClanO0DJoyo7kqcfoCeenTT_KA3R0,8868
18
+ agent_cli/_requirements/llm.txt,sha256=06gG3fOiye0R7bDNj2h4YmAt6WuOi1HUtuW_BBjcKMY,3459
19
+ agent_cli/_requirements/memory.txt,sha256=RmUGuRKJvXXL1nVCZCGOKy6zvbqyzUikx5zHymk1fok,7152
20
+ agent_cli/_requirements/mlx-whisper.txt,sha256=EsCSvS0ydvCJO6FzffROhjkieNNqaGHDI2iUSCTSN_o,6626
21
+ agent_cli/_requirements/piper.txt,sha256=LGm1gQopXgpDbgjTyWJpWYwEjjHSb86DDn48qoHnZgU,3332
22
+ agent_cli/_requirements/rag.txt,sha256=5zDS0BtxcB0Ig8zw8IXWTMzgTmSTNj0MMzR9G9olrIc,8127
23
+ agent_cli/_requirements/server.txt,sha256=k4ALhN4oR2e4amz4_1lQ2_hxB6MXg5LaGtlfn5EOc-s,2881
24
+ agent_cli/_requirements/speed.txt,sha256=0jxqHWKJBsUGOmr5J1hc_BHE7I4kyBpmB3dhk7O6btU,1333
25
+ agent_cli/_requirements/vad.txt,sha256=shMttjopUeOhpYrb3dqu9XoWbeaqkqNBw9cjEoAfRIc,3886
26
26
  agent_cli/agents/__init__.py,sha256=c1rnncDW5pBvP6BiLzFVpLWDNZzFRaUA7-a97avFVAs,321
27
27
  agent_cli/agents/_voice_agent_common.py,sha256=PUAztW84Xf9U7d0C_K5cL7I8OANIE1H6M8dFD_cRqps,4360
28
28
  agent_cli/agents/assistant.py,sha256=dXExb-UrWdMiEcI1c6bXvMhii1iGg49Zw4On6-inQUE,14046
@@ -40,13 +40,13 @@ agent_cli/core/__init__.py,sha256=c_knH7u9QgjsfMIil9NP4bVizHawLUMYoQWU4H9vMlQ,46
40
40
  agent_cli/core/audio.py,sha256=43FpYe2Wu_BYK9xJ_55V4xHjHJeFwQ5aM-CQzlTryt8,15168
41
41
  agent_cli/core/audio_format.py,sha256=zk3qlYMAlKYPz1enrjihQQspl_C218v1Rbcm7Uktlew,8773
42
42
  agent_cli/core/chroma.py,sha256=Vb_ny7SzAIL9SCEGlYgYOqsdG9BgusFGMj0RUzb6W90,2728
43
- agent_cli/core/deps.py,sha256=duZEIAJwx_faJr0E2yGn-UJDb8t1uEBcx6MEYNK7TDc,4587
43
+ agent_cli/core/deps.py,sha256=roYg8KHqFAxuyRqVauKssr6gHNqSZ2_kJYD50O95bnM,5318
44
44
  agent_cli/core/openai_proxy.py,sha256=f2kqxk6bAOeN7gOzU0JnyS-RYtXUcK5Gbsa_pBmlCv0,4470
45
45
  agent_cli/core/process.py,sha256=Zay6beX4JUbkBHr6xbJxwVBjVFDABmRHQCXVPQH93r8,5916
46
46
  agent_cli/core/reranker.py,sha256=Qv5ASGUdseLzI6eQRfNeQY-Lvv4SOgLOu56CpwmszDM,3779
47
47
  agent_cli/core/sse.py,sha256=SddiWjHh7DENb1wmvf3wDvX-OhbaC61EceFwQxmDUEo,2232
48
48
  agent_cli/core/transcription_logger.py,sha256=PVVfQK0leoB9JwUu5jYAhyRDBVq9exiPC0_KNXV8ggY,2057
49
- agent_cli/core/utils.py,sha256=MHttXeGiM9qGUNxK0s6vAHthh033TDjaruqocdtMMFY,16802
49
+ agent_cli/core/utils.py,sha256=CrydXrpnD3nRX8zfN5i_17Qu2OhZxfor33mtptfRwho,16839
50
50
  agent_cli/core/vad.py,sha256=67-EBjY-pTOf61VhrjVdDXgaNIBwWFFFccYth_1rQmg,6569
51
51
  agent_cli/core/watch.py,sha256=MKgGxxMe0yLlu78-XXqO4ferCpu_ljNr4MAzOMDsuuo,1951
52
52
  agent_cli/dev/__init__.py,sha256=doTYiUFEBpnOxsQA69HQP9AA4QHBN0DjuHSTGRq5Xbg,551
@@ -188,8 +188,8 @@ agent_cli/services/asr.py,sha256=aRaCLVCygsJ15qyQEPECOZsdSrnlLPbyY4RwAqY0qIw,172
188
188
  agent_cli/services/llm.py,sha256=Kwdo6pbMYI9oykF-RBe1iaL3KsYrNWTLdRSioewmsGQ,7199
189
189
  agent_cli/services/tts.py,sha256=NX5Qnq7ddLI3mwm3nzhbR3zB1Os4Ip4sSVSjDZDTBcI,14855
190
190
  agent_cli/services/wake_word.py,sha256=JFJ1SA22H4yko9DXiQ1t7fcoxeALLAe3iBrLs0z8rX4,4664
191
- agent_cli-0.67.0.dist-info/METADATA,sha256=jgGyC23IhQdPxDeTSqmWDE7H_1UXvH5rK5nP9v1jkK8,155632
192
- agent_cli-0.67.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
193
- agent_cli-0.67.0.dist-info/entry_points.txt,sha256=FUv-fB2atLsPUk_RT4zqnZl1coz4_XHFwRALOKOF38s,97
194
- agent_cli-0.67.0.dist-info/licenses/LICENSE,sha256=majJU6S9kC8R8bW39NVBHyv32Dq50FL6TDxECG2WVts,1068
195
- agent_cli-0.67.0.dist-info/RECORD,,
191
+ agent_cli-0.67.2.dist-info/METADATA,sha256=z4zcDhqiGt7d92suAsXn_-vLpzmYJEInek6WC5t0ar4,155800
192
+ agent_cli-0.67.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
193
+ agent_cli-0.67.2.dist-info/entry_points.txt,sha256=FUv-fB2atLsPUk_RT4zqnZl1coz4_XHFwRALOKOF38s,97
194
+ agent_cli-0.67.2.dist-info/licenses/LICENSE,sha256=majJU6S9kC8R8bW39NVBHyv32Dq50FL6TDxECG2WVts,1068
195
+ agent_cli-0.67.2.dist-info/RECORD,,