agent-cli 0.66.2__py3-none-any.whl → 0.67.1__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.
Files changed (39) hide show
  1. agent_cli/_extras.json +13 -0
  2. agent_cli/_requirements/audio.txt +71 -0
  3. agent_cli/_requirements/{whisper.txt → faster-whisper.txt} +5 -113
  4. agent_cli/_requirements/{tts-kokoro.txt → kokoro.txt} +5 -108
  5. agent_cli/_requirements/llm.txt +176 -0
  6. agent_cli/_requirements/memory.txt +7 -98
  7. agent_cli/_requirements/{whisper-mlx.txt → mlx-whisper.txt} +62 -125
  8. agent_cli/_requirements/{tts.txt → piper.txt} +6 -124
  9. agent_cli/_requirements/rag.txt +10 -97
  10. agent_cli/_requirements/server.txt +4 -122
  11. agent_cli/_requirements/speed.txt +7 -131
  12. agent_cli/_requirements/vad.txt +6 -130
  13. agent_cli/agents/assistant.py +2 -0
  14. agent_cli/agents/autocorrect.py +2 -0
  15. agent_cli/agents/chat.py +2 -0
  16. agent_cli/agents/memory/add.py +2 -0
  17. agent_cli/agents/memory/proxy.py +2 -0
  18. agent_cli/agents/rag_proxy.py +2 -0
  19. agent_cli/agents/speak.py +2 -0
  20. agent_cli/agents/transcribe.py +2 -0
  21. agent_cli/agents/transcribe_daemon.py +2 -0
  22. agent_cli/agents/voice_edit.py +2 -0
  23. agent_cli/core/deps.py +130 -14
  24. agent_cli/dev/skill/SKILL.md +2 -2
  25. agent_cli/docs_gen.py +0 -42
  26. agent_cli/install/extras.py +6 -14
  27. agent_cli/memory/__init__.py +1 -18
  28. agent_cli/rag/__init__.py +0 -19
  29. agent_cli/scripts/sync_extras.py +138 -0
  30. agent_cli/server/cli.py +4 -0
  31. agent_cli/services/_wyoming_utils.py +4 -2
  32. agent_cli/services/asr.py +13 -3
  33. agent_cli/services/tts.py +5 -2
  34. agent_cli/services/wake_word.py +6 -3
  35. {agent_cli-0.66.2.dist-info → agent_cli-0.67.1.dist-info}/METADATA +35 -30
  36. {agent_cli-0.66.2.dist-info → agent_cli-0.67.1.dist-info}/RECORD +39 -35
  37. {agent_cli-0.66.2.dist-info → agent_cli-0.67.1.dist-info}/WHEEL +0 -0
  38. {agent_cli-0.66.2.dist-info → agent_cli-0.67.1.dist-info}/entry_points.txt +0 -0
  39. {agent_cli-0.66.2.dist-info → agent_cli-0.67.1.dist-info}/licenses/LICENSE +0 -0
@@ -3,191 +3,67 @@
3
3
  annotated-types==0.7.0
4
4
  # via pydantic
5
5
  anyio==4.12.1
6
- # via
7
- # google-genai
8
- # httpx
9
- # openai
6
+ # via httpx
10
7
  audiostretchy==1.3.5
11
8
  # via agent-cli
12
- brotli==1.2.0 ; platform_python_implementation == 'CPython'
13
- # via httpx
14
- brotlicffi==1.2.0.0 ; platform_python_implementation != 'CPython'
15
- # via httpx
16
9
  certifi==2026.1.4
17
10
  # via
18
11
  # httpcore
19
12
  # httpx
20
- # requests
21
- cffi==2.0.0
22
- # via
23
- # brotlicffi
24
- # sounddevice
25
- charset-normalizer==3.4.4
26
- # via requests
27
13
  click==8.3.1
28
- # via
29
- # ddgs
30
- # typer
31
- colorama==0.4.6
32
- # via
33
- # click
34
- # griffe
35
- # tqdm
36
- ddgs==9.10.0
37
- # via pydantic-ai-slim
38
- distro==1.9.0
39
- # via
40
- # google-genai
41
- # openai
14
+ # via typer
15
+ colorama==0.4.6 ; sys_platform == 'win32'
16
+ # via click
42
17
  dotenv==0.9.9
43
18
  # via agent-cli
44
- fake-useragent==2.2.0
45
- # via ddgs
46
19
  fire==0.7.1
47
20
  # via audiostretchy
48
- genai-prices==0.0.51
49
- # via pydantic-ai-slim
50
- google-auth==2.47.0
51
- # via
52
- # google-genai
53
- # pydantic-ai-slim
54
- google-genai==1.58.0
55
- # via agent-cli
56
- griffe==1.15.0
57
- # via pydantic-ai-slim
58
21
  h11==0.16.0
59
22
  # via httpcore
60
- h2==4.3.0
61
- # via httpx
62
- hpack==4.1.0
63
- # via h2
64
23
  httpcore==1.0.9
65
24
  # via httpx
66
25
  httpx==0.28.1
67
- # via
68
- # agent-cli
69
- # ddgs
70
- # genai-prices
71
- # google-genai
72
- # openai
73
- # pydantic-ai-slim
74
- # pydantic-graph
75
- hyperframe==6.1.0
76
- # via h2
26
+ # via agent-cli
77
27
  idna==3.11
78
28
  # via
79
29
  # anyio
80
30
  # httpx
81
- # requests
82
- importlib-metadata==8.7.1
83
- # via opentelemetry-api
84
- jiter==0.12.0
85
- # via openai
86
- logfire-api==4.18.0
87
- # via pydantic-graph
88
- lxml==6.0.2
89
- # via ddgs
90
31
  markdown-it-py==4.0.0
91
32
  # via rich
92
33
  mdurl==0.1.2
93
34
  # via markdown-it-py
94
35
  numpy==2.3.5
95
- # via
96
- # agent-cli
97
- # audiostretchy
98
- openai==2.15.0
99
- # via
100
- # agent-cli
101
- # pydantic-ai-slim
102
- opentelemetry-api==1.39.1
103
- # via pydantic-ai-slim
104
- primp==0.15.0
105
- # via ddgs
36
+ # via audiostretchy
106
37
  psutil==7.2.1 ; sys_platform == 'win32'
107
38
  # via agent-cli
108
- pyasn1==0.6.1
109
- # via
110
- # pyasn1-modules
111
- # rsa
112
- pyasn1-modules==0.4.2
113
- # via google-auth
114
- pycparser==2.23 ; implementation_name != 'PyPy'
115
- # via cffi
116
39
  pydantic==2.12.5
117
- # via
118
- # genai-prices
119
- # google-genai
120
- # openai
121
- # pydantic-ai-slim
122
- # pydantic-graph
123
- pydantic-ai-slim==1.42.0
124
40
  # via agent-cli
125
41
  pydantic-core==2.41.5
126
42
  # via pydantic
127
- pydantic-graph==1.42.0
128
- # via pydantic-ai-slim
129
43
  pygments==2.19.2
130
44
  # via rich
131
45
  pyperclip==1.11.0
132
46
  # via agent-cli
133
47
  python-dotenv==1.2.1
134
48
  # via dotenv
135
- regex==2026.1.15
136
- # via tiktoken
137
- requests==2.32.5
138
- # via
139
- # google-auth
140
- # google-genai
141
- # pydantic-ai-slim
142
- # tiktoken
143
49
  rich==14.2.0
144
50
  # via
145
51
  # agent-cli
146
52
  # typer
147
- rsa==4.9.1
148
- # via google-auth
149
53
  setproctitle==1.3.7
150
54
  # via agent-cli
151
55
  shellingham==1.5.4
152
56
  # via typer
153
- sniffio==1.3.1
154
- # via
155
- # google-genai
156
- # openai
157
- socksio==1.0.0
158
- # via httpx
159
- sounddevice==0.5.3
160
- # via agent-cli
161
- tenacity==9.1.2
162
- # via google-genai
163
57
  termcolor==3.3.0
164
58
  # via fire
165
- tiktoken==0.12.0
166
- # via pydantic-ai-slim
167
- tqdm==4.67.1
168
- # via openai
169
59
  typer==0.21.1
170
60
  # via agent-cli
171
61
  typing-extensions==4.15.0
172
62
  # via
173
63
  # anyio
174
- # google-genai
175
- # openai
176
- # opentelemetry-api
177
64
  # pydantic
178
65
  # pydantic-core
179
66
  # typer
180
67
  # typing-inspection
181
68
  typing-inspection==0.4.2
182
- # via
183
- # pydantic
184
- # pydantic-ai-slim
185
- # pydantic-graph
186
- urllib3==2.3.0
187
- # via requests
188
- websockets==15.0.1
189
- # via google-genai
190
- wyoming==1.8.0
191
- # via agent-cli
192
- zipp==3.23.0
193
- # via importlib-metadata
69
+ # via pydantic
@@ -3,98 +3,39 @@
3
3
  annotated-types==0.7.0
4
4
  # via pydantic
5
5
  anyio==4.12.1
6
- # via
7
- # google-genai
8
- # httpx
9
- # openai
10
- brotli==1.2.0 ; platform_python_implementation == 'CPython'
11
- # via httpx
12
- brotlicffi==1.2.0.0 ; platform_python_implementation != 'CPython'
13
6
  # via httpx
14
7
  certifi==2026.1.4
15
8
  # via
16
9
  # httpcore
17
10
  # httpx
18
- # requests
19
- cffi==2.0.0
20
- # via
21
- # brotlicffi
22
- # sounddevice
23
- charset-normalizer==3.4.4
24
- # via requests
25
11
  click==8.3.1
26
- # via
27
- # ddgs
28
- # typer
29
- colorama==0.4.6
30
- # via
31
- # click
32
- # griffe
33
- # tqdm
12
+ # via typer
13
+ colorama==0.4.6 ; sys_platform == 'win32'
14
+ # via click
34
15
  coloredlogs==15.0.1
35
16
  # via onnxruntime
36
- ddgs==9.10.0
37
- # via pydantic-ai-slim
38
- distro==1.9.0
39
- # via
40
- # google-genai
41
- # openai
42
17
  dotenv==0.9.9
43
18
  # via agent-cli
44
- fake-useragent==2.2.0
45
- # via ddgs
46
19
  filelock==3.20.3
47
20
  # via torch
48
21
  flatbuffers==25.12.19
49
22
  # via onnxruntime
50
23
  fsspec==2026.1.0
51
24
  # via torch
52
- genai-prices==0.0.51
53
- # via pydantic-ai-slim
54
- google-auth==2.47.0
55
- # via
56
- # google-genai
57
- # pydantic-ai-slim
58
- google-genai==1.58.0
59
- # via agent-cli
60
- griffe==1.15.0
61
- # via pydantic-ai-slim
62
25
  h11==0.16.0
63
26
  # via httpcore
64
- h2==4.3.0
65
- # via httpx
66
- hpack==4.1.0
67
- # via h2
68
27
  httpcore==1.0.9
69
28
  # via httpx
70
29
  httpx==0.28.1
71
- # via
72
- # agent-cli
73
- # ddgs
74
- # genai-prices
75
- # google-genai
76
- # openai
77
- # pydantic-ai-slim
78
- # pydantic-graph
30
+ # via agent-cli
79
31
  humanfriendly==10.0
80
32
  # via coloredlogs
81
- hyperframe==6.1.0
82
- # via h2
83
33
  idna==3.11
84
34
  # via
85
35
  # anyio
86
36
  # httpx
87
- # requests
88
- importlib-metadata==8.7.1
89
- # via opentelemetry-api
90
37
  jinja2==3.1.6
91
38
  # via torch
92
- jiter==0.12.0
93
- # via openai
94
- logfire-api==4.18.0
95
- # via pydantic-graph
96
- lxml==6.0.2
97
- # via ddgs
98
39
  markdown-it-py==4.0.0
99
40
  # via rich
100
41
  markupsafe==3.0.3
@@ -106,9 +47,7 @@ mpmath==1.3.0
106
47
  networkx==3.6.1
107
48
  # via torch
108
49
  numpy==2.3.5
109
- # via
110
- # agent-cli
111
- # onnxruntime
50
+ # via onnxruntime
112
51
  nvidia-cublas-cu12==12.8.4.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'
113
52
  # via
114
53
  # nvidia-cudnn-cu12
@@ -150,43 +89,18 @@ nvidia-nvtx-cu12==12.8.90 ; platform_machine == 'x86_64' and sys_platform == 'li
150
89
  # via torch
151
90
  onnxruntime==1.20.1
152
91
  # via silero-vad
153
- openai==2.15.0
154
- # via
155
- # agent-cli
156
- # pydantic-ai-slim
157
- opentelemetry-api==1.39.1
158
- # via pydantic-ai-slim
159
92
  packaging==25.0
160
93
  # via
161
94
  # onnxruntime
162
95
  # silero-vad
163
- primp==0.15.0
164
- # via ddgs
165
96
  protobuf==6.33.4
166
97
  # via onnxruntime
167
98
  psutil==7.2.1 ; sys_platform == 'win32'
168
99
  # via agent-cli
169
- pyasn1==0.6.1
170
- # via
171
- # pyasn1-modules
172
- # rsa
173
- pyasn1-modules==0.4.2
174
- # via google-auth
175
- pycparser==2.23 ; implementation_name != 'PyPy'
176
- # via cffi
177
100
  pydantic==2.12.5
178
- # via
179
- # genai-prices
180
- # google-genai
181
- # openai
182
- # pydantic-ai-slim
183
- # pydantic-graph
184
- pydantic-ai-slim==1.42.0
185
101
  # via agent-cli
186
102
  pydantic-core==2.41.5
187
103
  # via pydantic
188
- pydantic-graph==1.42.0
189
- # via pydantic-ai-slim
190
104
  pygments==2.19.2
191
105
  # via rich
192
106
  pyperclip==1.11.0
@@ -195,20 +109,10 @@ pyreadline3==3.5.4 ; sys_platform == 'win32'
195
109
  # via humanfriendly
196
110
  python-dotenv==1.2.1
197
111
  # via dotenv
198
- regex==2026.1.15
199
- # via tiktoken
200
- requests==2.32.5
201
- # via
202
- # google-auth
203
- # google-genai
204
- # pydantic-ai-slim
205
- # tiktoken
206
112
  rich==14.2.0
207
113
  # via
208
114
  # agent-cli
209
115
  # typer
210
- rsa==4.9.1
211
- # via google-auth
212
116
  setproctitle==1.3.7
213
117
  # via agent-cli
214
118
  setuptools==80.9.0 ; python_full_version >= '3.12'
@@ -217,30 +121,16 @@ shellingham==1.5.4
217
121
  # via typer
218
122
  silero-vad==6.2.0
219
123
  # via agent-cli
220
- sniffio==1.3.1
221
- # via
222
- # google-genai
223
- # openai
224
- socksio==1.0.0
225
- # via httpx
226
- sounddevice==0.5.3
227
- # via agent-cli
228
124
  sympy==1.14.0
229
125
  # via
230
126
  # onnxruntime
231
127
  # torch
232
- tenacity==9.1.2
233
- # via google-genai
234
- tiktoken==0.12.0
235
- # via pydantic-ai-slim
236
128
  torch==2.9.1
237
129
  # via
238
130
  # silero-vad
239
131
  # torchaudio
240
132
  torchaudio==2.9.1
241
133
  # via silero-vad
242
- tqdm==4.67.1
243
- # via openai
244
134
  triton==3.5.1 ; platform_machine == 'x86_64' and sys_platform == 'linux'
245
135
  # via torch
246
136
  typer==0.21.1
@@ -248,24 +138,10 @@ typer==0.21.1
248
138
  typing-extensions==4.15.0
249
139
  # via
250
140
  # anyio
251
- # google-genai
252
- # openai
253
- # opentelemetry-api
254
141
  # pydantic
255
142
  # pydantic-core
256
143
  # torch
257
144
  # typer
258
145
  # typing-inspection
259
146
  typing-inspection==0.4.2
260
- # via
261
- # pydantic
262
- # pydantic-ai-slim
263
- # pydantic-graph
264
- urllib3==2.3.0
265
- # via requests
266
- websockets==15.0.1
267
- # via google-genai
268
- wyoming==1.8.0
269
- # via agent-cli
270
- zipp==3.23.0
271
- # via importlib-metadata
147
+ # via pydantic
@@ -41,6 +41,7 @@ from agent_cli.agents._voice_agent_common import (
41
41
  from agent_cli.cli import app
42
42
  from agent_cli.core import audio, process
43
43
  from agent_cli.core.audio import setup_devices
44
+ from agent_cli.core.deps import requires_extras
44
45
  from agent_cli.core.utils import (
45
46
  InteractiveStopEvent,
46
47
  maybe_live,
@@ -254,6 +255,7 @@ async def _async_main(
254
255
 
255
256
 
256
257
  @app.command("assistant", rich_help_panel="Voice Commands")
258
+ @requires_extras("audio", "llm")
257
259
  def assistant(
258
260
  *,
259
261
  # --- Provider Selection ---
@@ -14,6 +14,7 @@ import typer
14
14
 
15
15
  from agent_cli import config, opts
16
16
  from agent_cli.cli import app
17
+ from agent_cli.core.deps import requires_extras
17
18
  from agent_cli.core.utils import (
18
19
  console,
19
20
  create_status,
@@ -209,6 +210,7 @@ async def _async_autocorrect(
209
210
 
210
211
 
211
212
  @app.command("autocorrect", rich_help_panel="Text Commands")
213
+ @requires_extras("llm")
212
214
  def autocorrect(
213
215
  *,
214
216
  text: str | None = typer.Argument(
agent_cli/agents/chat.py CHANGED
@@ -29,6 +29,7 @@ from agent_cli._tools import tools
29
29
  from agent_cli.cli import app
30
30
  from agent_cli.core import process
31
31
  from agent_cli.core.audio import setup_devices
32
+ from agent_cli.core.deps import requires_extras
32
33
  from agent_cli.core.utils import (
33
34
  InteractiveStopEvent,
34
35
  console,
@@ -374,6 +375,7 @@ async def _async_main(
374
375
 
375
376
 
376
377
  @app.command("chat", rich_help_panel="Voice Commands")
378
+ @requires_extras("audio", "llm")
377
379
  def chat(
378
380
  *,
379
381
  # --- Provider Selection ---
@@ -13,6 +13,7 @@ import typer
13
13
 
14
14
  from agent_cli import opts
15
15
  from agent_cli.agents.memory import memory_app
16
+ from agent_cli.core.deps import requires_extras
16
17
  from agent_cli.core.utils import console, print_command_line_args
17
18
 
18
19
  if TYPE_CHECKING:
@@ -110,6 +111,7 @@ def _write_memories(
110
111
 
111
112
 
112
113
  @memory_app.command("add")
114
+ @requires_extras("memory")
113
115
  def add(
114
116
  memories: list[str] = typer.Argument( # noqa: B008
115
117
  None,
@@ -10,10 +10,12 @@ from rich.logging import RichHandler
10
10
 
11
11
  from agent_cli import constants, opts
12
12
  from agent_cli.agents.memory import memory_app
13
+ from agent_cli.core.deps import requires_extras
13
14
  from agent_cli.core.utils import console, print_command_line_args, print_error_message
14
15
 
15
16
 
16
17
  @memory_app.command("proxy")
18
+ @requires_extras("memory")
17
19
  def proxy(
18
20
  memory_path: Path = typer.Option( # noqa: B008
19
21
  "./memory_db",
@@ -10,6 +10,7 @@ from rich.logging import RichHandler
10
10
 
11
11
  from agent_cli import constants, opts
12
12
  from agent_cli.cli import app
13
+ from agent_cli.core.deps import requires_extras
13
14
  from agent_cli.core.utils import (
14
15
  console,
15
16
  print_command_line_args,
@@ -18,6 +19,7 @@ from agent_cli.core.utils import (
18
19
 
19
20
 
20
21
  @app.command("rag-proxy", rich_help_panel="Servers")
22
+ @requires_extras("rag")
21
23
  def rag_proxy(
22
24
  docs_folder: Path = typer.Option( # noqa: B008
23
25
  "./rag_docs",
agent_cli/agents/speak.py CHANGED
@@ -14,6 +14,7 @@ from agent_cli import config, opts
14
14
  from agent_cli.cli import app
15
15
  from agent_cli.core import process
16
16
  from agent_cli.core.audio import setup_devices
17
+ from agent_cli.core.deps import requires_extras
17
18
  from agent_cli.core.utils import (
18
19
  enable_json_mode,
19
20
  get_clipboard_text,
@@ -80,6 +81,7 @@ async def _async_main(
80
81
 
81
82
 
82
83
  @app.command("speak", rich_help_panel="Text Commands")
84
+ @requires_extras("audio")
83
85
  def speak(
84
86
  *,
85
87
  text: str | None = typer.Argument(
@@ -19,6 +19,7 @@ from agent_cli import config, opts
19
19
  from agent_cli.cli import app
20
20
  from agent_cli.core import process
21
21
  from agent_cli.core.audio import setup_devices
22
+ from agent_cli.core.deps import requires_extras
22
23
  from agent_cli.core.utils import (
23
24
  enable_json_mode,
24
25
  format_short_timedelta,
@@ -461,6 +462,7 @@ async def _async_main( # noqa: PLR0912, PLR0915, C901
461
462
 
462
463
 
463
464
  @app.command("transcribe", rich_help_panel="Voice Commands")
465
+ @requires_extras("audio", "llm")
464
466
  def transcribe( # noqa: PLR0912
465
467
  *,
466
468
  extra_instructions: str | None = typer.Option(
@@ -25,6 +25,7 @@ from agent_cli.cli import app
25
25
  from agent_cli.core import process
26
26
  from agent_cli.core.audio import open_audio_stream, setup_devices, setup_input_stream
27
27
  from agent_cli.core.audio_format import check_ffmpeg_available, save_audio_as_mp3
28
+ from agent_cli.core.deps import requires_extras
28
29
  from agent_cli.core.utils import (
29
30
  console,
30
31
  print_command_line_args,
@@ -287,6 +288,7 @@ async def _daemon_loop(cfg: DaemonConfig) -> None: # noqa: PLR0912, PLR0915
287
288
 
288
289
 
289
290
  @app.command("transcribe-daemon", rich_help_panel="Voice Commands")
291
+ @requires_extras("audio", "vad", "llm")
290
292
  def transcribe_daemon( # noqa: PLR0912
291
293
  *,
292
294
  # Daemon-specific options
@@ -47,6 +47,7 @@ from agent_cli.agents._voice_agent_common import (
47
47
  from agent_cli.cli import app
48
48
  from agent_cli.core import process
49
49
  from agent_cli.core.audio import setup_devices
50
+ from agent_cli.core.deps import requires_extras
50
51
  from agent_cli.core.utils import (
51
52
  enable_json_mode,
52
53
  get_clipboard_text,
@@ -173,6 +174,7 @@ async def _async_main(
173
174
 
174
175
 
175
176
  @app.command("voice-edit", rich_help_panel="Voice Commands")
177
+ @requires_extras("audio", "llm")
176
178
  def voice_edit(
177
179
  *,
178
180
  # --- Provider Selection ---