agent-cli 0.66.1__py3-none-any.whl → 0.67.0__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 +60 -0
  3. agent_cli/_requirements/{whisper.txt → faster-whisper.txt} +4 -112
  4. agent_cli/_requirements/{tts-kokoro.txt → kokoro.txt} +4 -107
  5. agent_cli/_requirements/llm.txt +177 -0
  6. agent_cli/_requirements/memory.txt +6 -97
  7. agent_cli/_requirements/{whisper-mlx.txt → mlx-whisper.txt} +61 -124
  8. agent_cli/_requirements/{tts.txt → piper.txt} +4 -121
  9. agent_cli/_requirements/rag.txt +9 -96
  10. agent_cli/_requirements/server.txt +3 -120
  11. agent_cli/_requirements/speed.txt +5 -138
  12. agent_cli/_requirements/vad.txt +4 -137
  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 +45 -12
  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.1.dist-info → agent_cli-0.67.0.dist-info}/METADATA +33 -29
  36. {agent_cli-0.66.1.dist-info → agent_cli-0.67.0.dist-info}/RECORD +39 -35
  37. {agent_cli-0.66.1.dist-info → agent_cli-0.67.0.dist-info}/WHEEL +0 -0
  38. {agent_cli-0.66.1.dist-info → agent_cli-0.67.0.dist-info}/entry_points.txt +0 -0
  39. {agent_cli-0.66.1.dist-info → agent_cli-0.67.0.dist-info}/licenses/LICENSE +0 -0
@@ -2,23 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from agent_cli.core.deps import ensure_optional_dependencies
6
-
7
- _REQUIRED_DEPS = {
8
- "chromadb": "chromadb",
9
- "fastapi": "fastapi",
10
- "uvicorn": "uvicorn",
11
- "onnxruntime": "onnxruntime",
12
- "huggingface_hub": "huggingface-hub",
13
- "transformers": "transformers",
14
- }
15
-
16
- ensure_optional_dependencies(
17
- _REQUIRED_DEPS,
18
- extra_name="memory",
19
- install_hint="`pip install agent-cli[memory]` or `uv sync --extra memory`",
20
- )
21
-
22
- from agent_cli.memory.client import MemoryClient # noqa: E402
5
+ from agent_cli.memory.client import MemoryClient
23
6
 
24
7
  __all__ = ["MemoryClient"]
agent_cli/rag/__init__.py CHANGED
@@ -1,22 +1,3 @@
1
1
  """RAG module."""
2
2
 
3
3
  from __future__ import annotations
4
-
5
- from agent_cli.core.deps import ensure_optional_dependencies
6
-
7
- _REQUIRED_DEPS = {
8
- "chromadb": "chromadb",
9
- "watchfiles": "watchfiles",
10
- "markitdown": "markitdown",
11
- "fastapi": "fastapi",
12
- "uvicorn": "uvicorn",
13
- "onnxruntime": "onnxruntime",
14
- "huggingface_hub": "huggingface-hub",
15
- "transformers": "transformers",
16
- }
17
-
18
- ensure_optional_dependencies(
19
- _REQUIRED_DEPS,
20
- extra_name="rag",
21
- install_hint="`pip install agent-cli[rag]` or `uv sync --extra rag`",
22
- )
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/env python3
2
+ """Generate _extras.json from pyproject.toml.
3
+
4
+ This script parses the optional-dependencies in pyproject.toml and generates
5
+ the agent_cli/_extras.json file with package-to-import mappings.
6
+
7
+ Usage:
8
+ python scripts/sync_extras.py
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import json
14
+ import re
15
+ import sys
16
+ import tomllib
17
+ from pathlib import Path
18
+
19
+ REPO_ROOT = Path(__file__).parent.parent
20
+ PYPROJECT = REPO_ROOT / "pyproject.toml"
21
+ EXTRAS_FILE = REPO_ROOT / "agent_cli" / "_extras.json"
22
+
23
+ # Extras to skip (dev/test dependencies, not runtime installable)
24
+ SKIP_EXTRAS = {"dev", "test"}
25
+
26
+ # Manual mapping of extra name -> (description, list of import names)
27
+ # Import names should be the Python module name (how you import it)
28
+ # Bundle extras (voice, cloud, full) have empty import lists since they just install other extras
29
+ EXTRA_METADATA: dict[str, tuple[str, list[str]]] = {
30
+ # Provider extras (base dependencies now optional)
31
+ "audio": ("Audio recording/playback", ["sounddevice"]),
32
+ "wyoming": ("Wyoming protocol support", ["wyoming"]),
33
+ "openai": ("OpenAI API provider", ["openai"]),
34
+ "gemini": ("Google Gemini provider", ["google.genai"]),
35
+ "llm": ("LLM framework (pydantic-ai)", ["pydantic_ai"]),
36
+ # Feature extras
37
+ "rag": ("RAG proxy (ChromaDB, embeddings)", ["chromadb"]),
38
+ "memory": ("Long-term memory proxy", ["chromadb", "yaml"]),
39
+ "vad": ("Voice Activity Detection (silero-vad)", ["silero_vad"]),
40
+ "whisper": ("Local Whisper ASR (faster-whisper)", ["faster_whisper"]),
41
+ "whisper-mlx": ("MLX Whisper for Apple Silicon", ["mlx_whisper"]),
42
+ "tts": ("Local Piper TTS", ["piper"]),
43
+ "tts-kokoro": ("Kokoro neural TTS", ["kokoro"]),
44
+ "server": ("FastAPI server components", ["fastapi"]),
45
+ "speed": ("Audio speed adjustment (audiostretchy)", ["audiostretchy"]),
46
+ }
47
+
48
+
49
+ def get_extras_from_pyproject() -> set[str]:
50
+ """Parse optional-dependencies from pyproject.toml."""
51
+ with PYPROJECT.open("rb") as f:
52
+ data = tomllib.load(f)
53
+ all_extras = set(data.get("project", {}).get("optional-dependencies", {}).keys())
54
+ return all_extras - SKIP_EXTRAS
55
+
56
+
57
+ def extract_package_name(dep: str) -> str:
58
+ """Extract the package name from a dependency specification.
59
+
60
+ Examples:
61
+ "chromadb>=0.4.22" -> "chromadb"
62
+ "pydantic-ai-slim[openai,duckduckgo]" -> "pydantic-ai-slim"
63
+ 'mlx-whisper>=0.4.0; sys_platform == "darwin"' -> "mlx-whisper"
64
+
65
+ """
66
+ # Remove markers (;...) and extras ([...])
67
+ dep = re.split(r"[;\[]", dep)[0]
68
+ # Remove version specifiers
69
+ dep = re.split(r"[<>=!~]", dep)[0]
70
+ return dep.strip()
71
+
72
+
73
+ def package_to_import_name(package: str) -> str:
74
+ """Convert a package name to its Python import name.
75
+
76
+ Examples:
77
+ "google-genai" -> "google.genai"
78
+ "pydantic-ai-slim" -> "pydantic_ai"
79
+ "silero-vad" -> "silero_vad"
80
+ "faster-whisper" -> "faster_whisper"
81
+
82
+ """
83
+ # Special cases where the import name differs significantly
84
+ special_cases = {
85
+ "google-genai": "google.genai",
86
+ "pydantic-ai-slim": "pydantic_ai",
87
+ "silero-vad": "silero_vad",
88
+ "faster-whisper": "faster_whisper",
89
+ "mlx-whisper": "mlx_whisper",
90
+ "piper-tts": "piper",
91
+ "huggingface-hub": "huggingface_hub",
92
+ "fastapi": "fastapi",
93
+ "audiostretchy": "audiostretchy",
94
+ }
95
+ if package in special_cases:
96
+ return special_cases[package]
97
+ # Default: replace hyphens with underscores
98
+ return package.replace("-", "_")
99
+
100
+
101
+ def generate_extras_json(extras: set[str]) -> dict[str, list]:
102
+ """Generate the content for _extras.json."""
103
+ result = {}
104
+ for extra in sorted(extras):
105
+ if extra in EXTRA_METADATA:
106
+ desc, imports = EXTRA_METADATA[extra]
107
+ result[extra] = [desc, imports]
108
+ else:
109
+ # Unknown extra - add a placeholder
110
+ result[extra] = ["TODO: add description", []]
111
+ return result
112
+
113
+
114
+ def check_missing_metadata(extras: set[str]) -> list[str]:
115
+ """Check for extras that don't have metadata defined."""
116
+ return [e for e in extras if e not in EXTRA_METADATA]
117
+
118
+
119
+ def main() -> int:
120
+ """Generate _extras.json from pyproject.toml."""
121
+ extras = get_extras_from_pyproject()
122
+
123
+ # Check for missing metadata
124
+ missing = check_missing_metadata(extras)
125
+ if missing:
126
+ print(f"Warning: The following extras need metadata in EXTRA_METADATA: {missing}")
127
+ print("Please update EXTRA_METADATA in scripts/sync_extras.py")
128
+
129
+ # Generate the file
130
+ content = generate_extras_json(extras)
131
+ EXTRAS_FILE.write_text(json.dumps(content, indent=2) + "\n")
132
+ print(f"Generated {EXTRAS_FILE}")
133
+
134
+ return 0
135
+
136
+
137
+ if __name__ == "__main__":
138
+ sys.exit(main())
agent_cli/server/cli.py CHANGED
@@ -12,6 +12,7 @@ import typer
12
12
  from rich.console import Console
13
13
 
14
14
  from agent_cli.cli import app as main_app
15
+ from agent_cli.core.deps import requires_extras
15
16
  from agent_cli.core.process import set_process_title
16
17
  from agent_cli.server.common import setup_rich_logging
17
18
 
@@ -163,6 +164,7 @@ def _check_whisper_deps(backend: str, *, download_only: bool = False) -> None:
163
164
 
164
165
 
165
166
  @app.command("whisper")
167
+ @requires_extras("server", "faster-whisper|mlx-whisper")
166
168
  def whisper_cmd( # noqa: PLR0912, PLR0915
167
169
  model: Annotated[
168
170
  list[str] | None,
@@ -422,6 +424,7 @@ def whisper_cmd( # noqa: PLR0912, PLR0915
422
424
 
423
425
 
424
426
  @app.command("transcription-proxy")
427
+ @requires_extras("server")
425
428
  def transcription_proxy_cmd(
426
429
  host: Annotated[
427
430
  str,
@@ -475,6 +478,7 @@ def transcription_proxy_cmd(
475
478
 
476
479
 
477
480
  @app.command("tts")
481
+ @requires_extras("server", "piper|kokoro")
478
482
  def tts_cmd( # noqa: PLR0915
479
483
  model: Annotated[
480
484
  list[str] | None,
@@ -5,14 +5,14 @@ from __future__ import annotations
5
5
  from contextlib import asynccontextmanager
6
6
  from typing import TYPE_CHECKING
7
7
 
8
- from wyoming.client import AsyncClient
9
-
10
8
  from agent_cli.core.utils import print_error_message
11
9
 
12
10
  if TYPE_CHECKING:
13
11
  import logging
14
12
  from collections.abc import AsyncGenerator
15
13
 
14
+ from wyoming.client import AsyncClient
15
+
16
16
 
17
17
  @asynccontextmanager
18
18
  async def wyoming_client_context(
@@ -40,6 +40,8 @@ async def wyoming_client_context(
40
40
  Exception: For other connection errors
41
41
 
42
42
  """
43
+ from wyoming.client import AsyncClient # noqa: PLC0415
44
+
43
45
  uri = f"tcp://{server_ip}:{server_port}"
44
46
  logger.info("Connecting to Wyoming %s server at %s", server_type, uri)
45
47
 
agent_cli/services/asr.py CHANGED
@@ -10,9 +10,6 @@ from functools import partial
10
10
  from pathlib import Path
11
11
  from typing import TYPE_CHECKING
12
12
 
13
- from wyoming.asr import Transcribe, Transcript, TranscriptChunk, TranscriptStart, TranscriptStop
14
- from wyoming.audio import AudioChunk, AudioStart, AudioStop
15
-
16
13
  from agent_cli import constants
17
14
  from agent_cli.core.audio import (
18
15
  open_audio_stream,
@@ -225,6 +222,9 @@ async def _send_audio(
225
222
  initial_prompt: str | None = None,
226
223
  ) -> None:
227
224
  """Read from mic and send to Wyoming server."""
225
+ from wyoming.asr import Transcribe # noqa: PLC0415
226
+ from wyoming.audio import AudioChunk, AudioStart, AudioStop # noqa: PLC0415
227
+
228
228
  # Build context with initial_prompt if provided
229
229
  context = {"initial_prompt": initial_prompt} if initial_prompt else None
230
230
  await client.write_event(Transcribe(context=context).event())
@@ -282,6 +282,13 @@ async def _receive_transcript(
282
282
  final_callback: Callable[[str], None] | None = None,
283
283
  ) -> str:
284
284
  """Receive transcription events and return the final transcript."""
285
+ from wyoming.asr import ( # noqa: PLC0415
286
+ Transcript,
287
+ TranscriptChunk,
288
+ TranscriptStart,
289
+ TranscriptStop,
290
+ )
291
+
285
292
  transcript_text = ""
286
293
  while True:
287
294
  event = await client.read_event()
@@ -370,6 +377,9 @@ async def _transcribe_recorded_audio_wyoming(
370
377
  **_kwargs: object,
371
378
  ) -> str:
372
379
  """Process pre-recorded audio data with Wyoming ASR server."""
380
+ from wyoming.asr import Transcribe # noqa: PLC0415
381
+ from wyoming.audio import AudioChunk, AudioStart, AudioStop # noqa: PLC0415
382
+
373
383
  try:
374
384
  async with wyoming_client_context(
375
385
  wyoming_asr_cfg.asr_wyoming_ip,
agent_cli/services/tts.py CHANGED
@@ -10,8 +10,6 @@ from pathlib import Path
10
10
  from typing import TYPE_CHECKING
11
11
 
12
12
  from rich.live import Live
13
- from wyoming.audio import AudioChunk, AudioStart, AudioStop
14
- from wyoming.tts import Synthesize, SynthesizeVoice
15
13
 
16
14
  from agent_cli import config, constants
17
15
  from agent_cli.core.audio import open_audio_stream, setup_output_stream
@@ -32,6 +30,7 @@ if TYPE_CHECKING:
32
30
 
33
31
  from rich.live import Live
34
32
  from wyoming.client import AsyncClient
33
+ from wyoming.tts import Synthesize
35
34
 
36
35
 
37
36
  has_audiostretchy = importlib.util.find_spec("audiostretchy") is not None
@@ -134,6 +133,8 @@ def _create_synthesis_request(
134
133
  speaker: str | None = None,
135
134
  ) -> Synthesize:
136
135
  """Create a synthesis request with optional voice parameters."""
136
+ from wyoming.tts import Synthesize, SynthesizeVoice # noqa: PLC0415
137
+
137
138
  synthesize_event = Synthesize(text=text)
138
139
 
139
140
  # Add voice parameters if specified
@@ -152,6 +153,8 @@ async def _process_audio_events(
152
153
  logger: logging.Logger,
153
154
  ) -> tuple[bytes, int | None, int | None, int | None]:
154
155
  """Process audio events from TTS server and return audio data with metadata."""
156
+ from wyoming.audio import AudioChunk, AudioStart, AudioStop # noqa: PLC0415
157
+
155
158
  audio_data = io.BytesIO()
156
159
  sample_rate = None
157
160
  sample_width = None
@@ -6,9 +6,6 @@ import asyncio
6
6
  from functools import partial
7
7
  from typing import TYPE_CHECKING
8
8
 
9
- from wyoming.audio import AudioChunk, AudioStart, AudioStop
10
- from wyoming.wake import Detect, Detection, NotDetected
11
-
12
9
  from agent_cli import config, constants
13
10
  from agent_cli.core.audio import read_from_queue
14
11
  from agent_cli.core.utils import manage_send_receive_tasks
@@ -38,6 +35,8 @@ async def _send_audio_from_queue_for_wake_detection(
38
35
  progress_message: str,
39
36
  ) -> None:
40
37
  """Read from a queue and send to Wyoming wake word server."""
38
+ from wyoming.audio import AudioChunk, AudioStart, AudioStop # noqa: PLC0415
39
+
41
40
  await client.write_event(AudioStart(**constants.WYOMING_AUDIO_CONFIG).event())
42
41
  seconds_streamed = 0.0
43
42
 
@@ -76,6 +75,8 @@ async def _receive_wake_detection(
76
75
  Name of detected wake word or None if no detection
77
76
 
78
77
  """
78
+ from wyoming.wake import Detection, NotDetected # noqa: PLC0415
79
+
79
80
  while True:
80
81
  event = await client.read_event()
81
82
  if event is None:
@@ -108,6 +109,8 @@ async def _detect_wake_word_from_queue(
108
109
  progress_message: str = "Listening for wake word",
109
110
  ) -> str | None:
110
111
  """Detect wake word from an audio queue."""
112
+ from wyoming.wake import Detect # noqa: PLC0415
113
+
111
114
  try:
112
115
  async with wyoming_client_context(
113
116
  wake_word_cfg.wake_server_ip,
@@ -1,26 +1,24 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-cli
3
- Version: 0.66.1
3
+ Version: 0.67.0
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>
7
7
  License-File: LICENSE
8
8
  Requires-Python: <3.14,>=3.11
9
9
  Requires-Dist: dotenv
10
- Requires-Dist: google-genai>=1.25.0
11
10
  Requires-Dist: httpx
12
11
  Requires-Dist: numpy
13
- Requires-Dist: openai
14
12
  Requires-Dist: psutil; sys_platform == 'win32'
15
- Requires-Dist: pydantic-ai-slim[duckduckgo,openai,vertexai]
16
13
  Requires-Dist: pyperclip
17
14
  Requires-Dist: rich
18
15
  Requires-Dist: setproctitle
19
- Requires-Dist: sounddevice
20
16
  Requires-Dist: typer
21
- Requires-Dist: wyoming
17
+ Provides-Extra: audio
18
+ Requires-Dist: sounddevice>=0.4.6; extra == 'audio'
19
+ Requires-Dist: wyoming>=1.5.2; extra == 'audio'
22
20
  Provides-Extra: dev
23
- Requires-Dist: markdown-code-runner; extra == 'dev'
21
+ Requires-Dist: markdown-code-runner>=2.7.0; extra == 'dev'
24
22
  Requires-Dist: notebook; extra == 'dev'
25
23
  Requires-Dist: pre-commit>=3.0.0; extra == 'dev'
26
24
  Requires-Dist: pydantic-ai-slim[openai]; extra == 'dev'
@@ -32,6 +30,18 @@ Requires-Dist: pytest-timeout; extra == 'dev'
32
30
  Requires-Dist: pytest>=7.0.0; extra == 'dev'
33
31
  Requires-Dist: ruff; extra == 'dev'
34
32
  Requires-Dist: versioningit; extra == 'dev'
33
+ Provides-Extra: faster-whisper
34
+ Requires-Dist: fastapi[standard]; extra == 'faster-whisper'
35
+ Requires-Dist: faster-whisper>=1.0.0; extra == 'faster-whisper'
36
+ Provides-Extra: kokoro
37
+ Requires-Dist: fastapi[standard]; extra == 'kokoro'
38
+ Requires-Dist: huggingface-hub>=0.20.0; extra == 'kokoro'
39
+ Requires-Dist: kokoro>=0.9.0; extra == 'kokoro'
40
+ Requires-Dist: pip; extra == 'kokoro'
41
+ Requires-Dist: soundfile>=0.12.0; extra == 'kokoro'
42
+ Requires-Dist: transformers>=4.40.0; extra == 'kokoro'
43
+ Provides-Extra: llm
44
+ Requires-Dist: pydantic-ai-slim[duckduckgo,google,openai,vertexai]>=0.1.1; extra == 'llm'
35
45
  Provides-Extra: memory
36
46
  Requires-Dist: chromadb>=0.4.22; extra == 'memory'
37
47
  Requires-Dist: fastapi[standard]; extra == 'memory'
@@ -40,6 +50,12 @@ Requires-Dist: onnxruntime>=1.17.0; extra == 'memory'
40
50
  Requires-Dist: pyyaml>=6.0.0; extra == 'memory'
41
51
  Requires-Dist: transformers>=4.30.0; extra == 'memory'
42
52
  Requires-Dist: watchfiles>=0.21.0; extra == 'memory'
53
+ Provides-Extra: mlx-whisper
54
+ Requires-Dist: fastapi[standard]; extra == 'mlx-whisper'
55
+ Requires-Dist: mlx-whisper>=0.4.0; extra == 'mlx-whisper'
56
+ Provides-Extra: piper
57
+ Requires-Dist: fastapi[standard]; extra == 'piper'
58
+ Requires-Dist: piper-tts>=1.2.0; extra == 'piper'
43
59
  Provides-Extra: rag
44
60
  Requires-Dist: chromadb>=0.4.22; extra == 'rag'
45
61
  Requires-Dist: fastapi[standard]; extra == 'rag'
@@ -59,24 +75,8 @@ Requires-Dist: pytest-cov>=4.0.0; extra == 'test'
59
75
  Requires-Dist: pytest-mock; extra == 'test'
60
76
  Requires-Dist: pytest-timeout; extra == 'test'
61
77
  Requires-Dist: pytest>=7.0.0; extra == 'test'
62
- Provides-Extra: tts
63
- Requires-Dist: fastapi[standard]; extra == 'tts'
64
- Requires-Dist: piper-tts>=1.2.0; extra == 'tts'
65
- Provides-Extra: tts-kokoro
66
- Requires-Dist: fastapi[standard]; extra == 'tts-kokoro'
67
- Requires-Dist: huggingface-hub>=0.20.0; extra == 'tts-kokoro'
68
- Requires-Dist: kokoro>=0.9.0; extra == 'tts-kokoro'
69
- Requires-Dist: pip; extra == 'tts-kokoro'
70
- Requires-Dist: soundfile>=0.12.0; extra == 'tts-kokoro'
71
- Requires-Dist: transformers>=4.40.0; extra == 'tts-kokoro'
72
78
  Provides-Extra: vad
73
79
  Requires-Dist: silero-vad>=5.1; extra == 'vad'
74
- Provides-Extra: whisper
75
- Requires-Dist: fastapi[standard]; extra == 'whisper'
76
- Requires-Dist: faster-whisper>=1.0.0; extra == 'whisper'
77
- Provides-Extra: whisper-mlx
78
- Requires-Dist: fastapi[standard]; extra == 'whisper-mlx'
79
- Requires-Dist: mlx-whisper>=0.4.0; (sys_platform == 'darwin' and platform_machine == 'arm64') and extra == 'whisper-mlx'
80
80
  Description-Content-Type: text/markdown
81
81
 
82
82
  # Agent CLI
@@ -130,7 +130,7 @@ Since then I have expanded the tool with many more features, all focused on loca
130
130
  - **[`rag-proxy`](docs/commands/rag-proxy.md)**: RAG proxy server for chatting with your documents.
131
131
  - **[`dev`](docs/commands/dev.md)**: Parallel development with git worktrees and AI coding agents.
132
132
  - **[`server`](docs/commands/server/index.md)**: Local ASR and TTS servers with dual-protocol (Wyoming & OpenAI), TTL-based memory management, and multi-platform acceleration. Whisper uses MLX on Apple Silicon or Faster Whisper on Linux/CUDA. TTS supports Kokoro (GPU) or Piper (CPU).
133
- - **[`transcribe-daemon`](docs/commands/transcribe-daemon.md)**: Continuous background transcription with VAD. Install with `uv tool install "agent-cli[vad]"`.
133
+ - **[`transcribe-daemon`](docs/commands/transcribe-daemon.md)**: Continuous background transcription with VAD. Install with `uv tool install "agent-cli[vad]" -p 3.13`.
134
134
 
135
135
  ## Quick Start
136
136
 
@@ -140,12 +140,16 @@ If you already have AI services running (or plan to use OpenAI), simply install:
140
140
 
141
141
  ```bash
142
142
  # Using uv (recommended)
143
- uv tool install agent-cli
143
+ uv tool install agent-cli -p 3.13
144
144
 
145
145
  # Using pip
146
146
  pip install agent-cli
147
147
  ```
148
148
 
149
+ > [!NOTE]
150
+ > The `-p 3.13` flag is required because some dependencies (like `onnxruntime`) don't support Python 3.14 yet.
151
+ > See [uv issue #8206](https://github.com/astral-sh/uv/issues/8206) for details.
152
+
149
153
  Then use it:
150
154
  ```bash
151
155
  agent-cli autocorrect "this has an eror"
@@ -179,12 +183,12 @@ agent-cli autocorrect "this has an eror"
179
183
 
180
184
  > [!NOTE]
181
185
  > `agent-cli` uses `sounddevice` for real-time microphone/voice features.
182
- > On Linux only, you need to install the system-level PortAudio library (`sudo apt install portaudio19-dev` / your distro's equivalent on Linux) **before** you run `uv tool install agent-cli`.
186
+ > On Linux only, you need to install the system-level PortAudio library (`sudo apt install portaudio19-dev` / your distro's equivalent on Linux) **before** you run `uv tool install agent-cli -p 3.13`.
183
187
  > On Windows and macOS, this is handled automatically.
184
188
 
185
189
  ```bash
186
190
  # 1. Install agent-cli
187
- uv tool install agent-cli
191
+ uv tool install agent-cli -p 3.13
188
192
 
189
193
  # 2. Install all required services
190
194
  agent-cli install-services
@@ -265,7 +269,7 @@ If you already have AI services set up or plan to use cloud services (OpenAI/Gem
265
269
 
266
270
  ```bash
267
271
  # Using uv (recommended)
268
- uv tool install agent-cli
272
+ uv tool install agent-cli -p 3.13
269
273
 
270
274
  # Using pip
271
275
  pip install agent-cli
@@ -829,7 +833,7 @@ the `[defaults]` section of your configuration file.
829
833
 
830
834
  **Installation:** Requires the `vad` extra:
831
835
  ```bash
832
- uv tool install "agent-cli[vad]"
836
+ uv tool install "agent-cli[vad]" -p 3.13
833
837
  ```
834
838
 
835
839
  **How to Use It:**
@@ -1,43 +1,46 @@
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
4
  agent_cli/_tools.py,sha256=u9Ww-k-sbwFnMTW8sreFGd71nJP6o5hKcM0Zd_D9GZk,12136
4
5
  agent_cli/api.py,sha256=FQ_HATc7DaedbEFQ275Z18wV90tkDByD_9x_K0wdSLQ,456
5
6
  agent_cli/cli.py,sha256=zCk7sVVZstTU3GHFXAavcXd8Kactav4x0PyVY_rX4SI,2739
6
7
  agent_cli/config.py,sha256=dgwDV6chrQzGnVZIJ0OOg26jFKLCGIInC4Q9oXcj3rM,15413
7
8
  agent_cli/config_cmd.py,sha256=Fb-KBjtveft3x3_xjqlqobBwZqtI6Umrd8YzlwTAnZ4,9554
8
9
  agent_cli/constants.py,sha256=-Q17N6qKIGqPDsu3FxpIKP33G0Cs0RUJlHwYNHxVxek,843
9
- agent_cli/docs_gen.py,sha256=n6QMPFZK0prpz2cGgo2yXX_I29p-l0jPGEbHZDZ-NUc,14809
10
+ agent_cli/docs_gen.py,sha256=j6mBHwoPcQzMdgIWi_bB2A6yOyhvmW_cntRfwUg_8p8,13374
10
11
  agent_cli/example-config.toml,sha256=xd9BXeOqdYx4xFJt58VBs2I49ESy6dF4-mWF_g8sM9o,7552
11
12
  agent_cli/opts.py,sha256=qMK_mLxzGAbX7C2IYuCFvOkLgaxCCMO66I9ps8AdrYo,12114
12
13
  agent_cli/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
14
  agent_cli/_requirements/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- agent_cli/_requirements/memory.txt,sha256=LmX0uKxnKuLTcZg5TESJ4n7AWrar7iMspONskvyiDTY,8860
15
- agent_cli/_requirements/rag.txt,sha256=e45zy2Xn6csCd0qJuuHYkMgNQXPgNHk6SElz8LtezC0,9656
16
- agent_cli/_requirements/server.txt,sha256=DbgthcQ2CufWaaFu-spq9Ow14rqdT5XO05licQNoeMA,5127
17
- agent_cli/_requirements/speed.txt,sha256=U1sdmglUJxhg_ZmxPc-iaJ38dpt5xP6sLG8CVnSDeyY,3642
18
- agent_cli/_requirements/tts-kokoro.txt,sha256=3BooGvCXgub0y2olZuoeOkoL-xyvU9WzYw9CaWRmZGE,10848
19
- agent_cli/_requirements/tts.txt,sha256=wqefgl9Amh3xsVLJHJPbtgJUpPZqf6lr9zuC6jjTEU8,5569
20
- agent_cli/_requirements/vad.txt,sha256=-nyWylzzLYyC0fBONsZf6HUhqkXxb2WsKpZlueFmwyg,6195
21
- agent_cli/_requirements/whisper-mlx.txt,sha256=sE229FmA91RACIEMG2cMNiWcsawbXvbglit8I395f_Q,7096
22
- agent_cli/_requirements/whisper.txt,sha256=CKgk5iOjB4MMKor4eCcrhTDkDJbYMbQXU-TfZHeVWKA,6283
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
23
26
  agent_cli/agents/__init__.py,sha256=c1rnncDW5pBvP6BiLzFVpLWDNZzFRaUA7-a97avFVAs,321
24
27
  agent_cli/agents/_voice_agent_common.py,sha256=PUAztW84Xf9U7d0C_K5cL7I8OANIE1H6M8dFD_cRqps,4360
25
- agent_cli/agents/assistant.py,sha256=BMF693kUZxM7u7mcI0nVua0EpqFcGlby2cMMZeLT7hY,13965
26
- agent_cli/agents/autocorrect.py,sha256=R1ZftWDBXbdWCpJUz5JZnUx0u-9ceAJsOxx-yZWW2Ew,8892
27
- agent_cli/agents/chat.py,sha256=UVuCCb0vTOgKayDUeOfffRw_UeNykXpcQYa3WuWG64s,17176
28
- agent_cli/agents/rag_proxy.py,sha256=GuoPiQy3A6mgpYud-Ym5XQLRjA5d4cbvGCnnqxF968A,4627
29
- agent_cli/agents/speak.py,sha256=xTpY1hmAo4Z_5T1fZIJPTZz7tUbkQG12EYAMX_XsaRg,7027
30
- agent_cli/agents/transcribe.py,sha256=S-nO7hVRsDDO2P-WAIDXvqhdQT9lNKfw3nHjgZmhGxk,24492
31
- agent_cli/agents/transcribe_daemon.py,sha256=_xlOvNj7FACN9Yq6w-oXmnh5Iciv7ZiZcd-EamhwlWc,17580
32
- agent_cli/agents/voice_edit.py,sha256=Tcb5vRLIMs26vGBpTOhcg0lbCVUGfxwz1CS0o299_LM,11056
28
+ agent_cli/agents/assistant.py,sha256=dXExb-UrWdMiEcI1c6bXvMhii1iGg49Zw4On6-inQUE,14046
29
+ agent_cli/agents/autocorrect.py,sha256=kIkQNo6ldRre8y1KYMqBxlDLyyoc2l6Wa632CoYkZOQ,8964
30
+ agent_cli/agents/chat.py,sha256=7qwDBXFQvhqtlRA4IFXJS24hZ9PN6lb0g9boxwHUS1c,17257
31
+ agent_cli/agents/rag_proxy.py,sha256=GNhBoFp0C5kIGxfI6382SBlAQEgIWUahBHuZHS32DF4,4699
32
+ agent_cli/agents/speak.py,sha256=xG2ppthpdmpzsYkNeUynwDmWe8JTpJYhdKs3L1jR6eY,7101
33
+ agent_cli/agents/transcribe.py,sha256=0A1lt0kiDpzp8tfG11vxwzDzoXcDi7-nVmMbKbETYcU,24573
34
+ agent_cli/agents/transcribe_daemon.py,sha256=FPqcAfGNK_PyxfgQw1b-xph4JrFeCvKy8e9b1HIhRUU,17668
35
+ agent_cli/agents/voice_edit.py,sha256=bOZzeRici5GFq9qPUwHTQiW1TFhHcm_AcLG-EdKxwgk,11137
33
36
  agent_cli/agents/memory/__init__.py,sha256=gW-0NGksjxTKkSjk4PzlXZIiAoF0sS2mFrRdeGVITf8,780
34
- agent_cli/agents/memory/add.py,sha256=VkNd8es2llqTl4TdSAvXXz2G3BmIbWWvhXPwU5JrNnk,6135
35
- agent_cli/agents/memory/proxy.py,sha256=SC4aTv8EYM2e6UOnoU-9DFMUwiIK7PapLQc0IIcETbE,6550
37
+ agent_cli/agents/memory/add.py,sha256=lk6q2SmuwNNFAoDnfOQxPpNHbbHjekGCyKaWUgC9x-8,6210
38
+ agent_cli/agents/memory/proxy.py,sha256=BRKMn1kxNnxGcy-zQnlhmDR6hs41Qec4125NCy5a3O8,6625
36
39
  agent_cli/core/__init__.py,sha256=c_knH7u9QgjsfMIil9NP4bVizHawLUMYoQWU4H9vMlQ,46
37
40
  agent_cli/core/audio.py,sha256=43FpYe2Wu_BYK9xJ_55V4xHjHJeFwQ5aM-CQzlTryt8,15168
38
41
  agent_cli/core/audio_format.py,sha256=zk3qlYMAlKYPz1enrjihQQspl_C218v1Rbcm7Uktlew,8773
39
42
  agent_cli/core/chroma.py,sha256=Vb_ny7SzAIL9SCEGlYgYOqsdG9BgusFGMj0RUzb6W90,2728
40
- agent_cli/core/deps.py,sha256=Btky1mknzhQ9nFjkIWW_dWBL8jxfhfg4WwDMrp7xzIc,704
43
+ agent_cli/core/deps.py,sha256=duZEIAJwx_faJr0E2yGn-UJDb8t1uEBcx6MEYNK7TDc,4587
41
44
  agent_cli/core/openai_proxy.py,sha256=f2kqxk6bAOeN7gOzU0JnyS-RYtXUcK5Gbsa_pBmlCv0,4470
42
45
  agent_cli/core/process.py,sha256=Zay6beX4JUbkBHr6xbJxwVBjVFDABmRHQCXVPQH93r8,5916
43
46
  agent_cli/core/reranker.py,sha256=Qv5ASGUdseLzI6eQRfNeQY-Lvv4SOgLOu56CpwmszDM,3779
@@ -74,7 +77,7 @@ agent_cli/dev/editors/sublime.py,sha256=owEfRSMuArSeFKqk-LE2JOXaZy5QlQfHQ-l0I4k2
74
77
  agent_cli/dev/editors/vim.py,sha256=Fo-IQMPVbIiwBdOfmkFxR37f96QW6xc5LV3Pvr3u-b0,1378
75
78
  agent_cli/dev/editors/vscode.py,sha256=GOrl4FwVdDyuSn7t4lglgnVt_T6NtpjLVh1OWBxDMwE,318
76
79
  agent_cli/dev/editors/zed.py,sha256=lRMhdN_SKmHBA1ulx8x-p7Th_0EGSIv6ppAE84xobU4,515
77
- agent_cli/dev/skill/SKILL.md,sha256=r_QoJR5VLrsI7h-oopfJ8o89oWM43EHgy8IYYa52q9c,4421
80
+ agent_cli/dev/skill/SKILL.md,sha256=SLDavirkkPVAHxf1JmRxvJz4EUQI81Dv0fdvjDs7VJ8,4443
78
81
  agent_cli/dev/skill/examples.md,sha256=ZzCyfudBk4lMR-sz8ER9l5vi6hI3HTeUlvQorRFVol4,16405
79
82
  agent_cli/dev/terminals/__init__.py,sha256=yUTNtvs1Do2hvhx56XxyfI-5HA5mjiv0IbJuuaL9TeE,371
80
83
  agent_cli/dev/terminals/apple_terminal.py,sha256=s7GdxXPgbpSLKK1DUwjNpshQpjR5Nt1QbL_cKPefIRI,2595
@@ -88,10 +91,10 @@ agent_cli/dev/terminals/warp.py,sha256=j-Jvz_BbWYC3QfLrvl4CbDh03c9OGRFmuCzjyB2ud
88
91
  agent_cli/dev/terminals/zellij.py,sha256=GnQnopimb9XH67CZGHjnbVWpVSWhaLCATGJizCT5TkY,2321
89
92
  agent_cli/install/__init__.py,sha256=JQPrOrtdNd1Y1NmQDkb3Nmm1qdyn3kPjhQwy9D8ryjI,124
90
93
  agent_cli/install/common.py,sha256=WvnmcjnFTW0d1HZrKVGzj5Tg3q8Txk_ZOdc4a1MBFWI,3121
91
- agent_cli/install/extras.py,sha256=qdj3NjdzJrgA5gE0MzQUEdxBve0L1I5dxTmC2-527YI,3755
94
+ agent_cli/install/extras.py,sha256=ZknvNHXQDlg4K9Wn1Bs7tYQxx5T5wyQKi_Kea-aB1gU,5161
92
95
  agent_cli/install/hotkeys.py,sha256=bwGoPeEKK6VI-IrKU8Q0RLMW9smkDNU7CdqD3Nbsd-w,1626
93
96
  agent_cli/install/services.py,sha256=2s_7ThxaElKCuomBYTn4Z36TF_o_arNeyJ4f8Wh4jEI,2912
94
- agent_cli/memory/__init__.py,sha256=Q9lomqabThXFx-j_Yu3xKDyKLN4Odck92J6WDP53yUI,610
97
+ agent_cli/memory/__init__.py,sha256=8XNpVzP-qjF8o49A_eXsH_Rbp_FmxTIcknnvxq7vHms,162
95
98
  agent_cli/memory/_files.py,sha256=Za4YeSK5f2NKVZf1zDZXo4Sf-gERaProeSAXlLt8e0c,7598
96
99
  agent_cli/memory/_filters.py,sha256=VzuFyWTGqWKY0JYctfxF1JZFVYfVecW7mLDAM019mzU,2044
97
100
  agent_cli/memory/_git.py,sha256=qWOJkwUrWE6TkVYdUW1vVA6VB5w00w0LKDfqHUwQrBY,4738
@@ -108,7 +111,7 @@ agent_cli/memory/client.py,sha256=XomHhP-hPSoosORkBKSY1dW3gjheFEVqAac0b-tAULo,99
108
111
  agent_cli/memory/engine.py,sha256=rABVC86b5wU1QxY3BM43RhvfDOxoRT7Ddm98BN_qCL4,11656
109
112
  agent_cli/memory/entities.py,sha256=_8wyJz--tNa66CEtSpl2TUN_zeHQvMzm42htnDaOr6g,1219
110
113
  agent_cli/memory/models.py,sha256=KK0wToEf-tXssYVL0hYaJlcADlJ3G2lcSXwo1UmA0VU,2352
111
- agent_cli/rag/__init__.py,sha256=suQDSGBUlt4_KNxz2CyVqrJw58e64T3ltfmmg2F8iQY,543
114
+ agent_cli/rag/__init__.py,sha256=nWNh4_zFTiweNQAiUzNVt1jq7myJxaeB5kXv1063GUM,54
112
115
  agent_cli/rag/_indexer.py,sha256=tzce07xvCbfH2jA0F_sldPRe7VLDXVQ3PGZFRsAJN10,1998
113
116
  agent_cli/rag/_indexing.py,sha256=z2z5BWtQVuviPOjUiu151gJ9MzJxaqRYKrSi4Jj06mA,7605
114
117
  agent_cli/rag/_prompt.py,sha256=d8_jOhZGafMmjO7BlCl4H125bj4m-dNFWDOLz5_OPrw,954
@@ -136,6 +139,7 @@ agent_cli/scripts/setup-macos.sh,sha256=iKWhhONLGDTqYawSDqutnl0mfQomSVPPAsx09-0E
136
139
  agent_cli/scripts/setup-windows.ps1,sha256=NhyxOuwCjjSw24q2QOqggATos_n06DDbfvMQWuAB3tM,2938
137
140
  agent_cli/scripts/start-all-services-windows.ps1,sha256=uOODaPFzniEU7asDgMyf5MEOWcEFsGg_mCLLlDgKoa8,2643
138
141
  agent_cli/scripts/start-all-services.sh,sha256=c6pjXoyoQkeF-cYpldeMMo38XxRMmS43FHG5w3ElLxg,7756
142
+ agent_cli/scripts/sync_extras.py,sha256=VpuhNg7iP3YT3l1jqoSBeWbzDEkeUEGGba7_lGUxBjA,4737
139
143
  agent_cli/scripts/.runtime/.gitkeep,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
144
  agent_cli/scripts/linux-hotkeys/README.md,sha256=OW48Xyv096XkUosSJkzED_nnEEncSzhl87FNgEfq8wg,2037
141
145
  agent_cli/scripts/linux-hotkeys/toggle-autocorrect.sh,sha256=sme-dil3EU4nkdRwxSvARr-hBN9UjrU1IFabLCrvwl8,1251
@@ -152,7 +156,7 @@ agent_cli/scripts/nvidia-asr-server/server.py,sha256=kPNQIVF3exblvqMtIVk38Y6sZy2
152
156
  agent_cli/scripts/nvidia-asr-server/shell.nix,sha256=IT20j5YNj_wc7MdXi7ndogGodDNSGwyq8G0bNoZEpmg,1003
153
157
  agent_cli/scripts/nvidia-asr-server/uv.lock,sha256=5WWaqWOuV_moMPC-LIZK-A-Y5oaHr1tUn_vbR-IupzY,728608
154
158
  agent_cli/server/__init__.py,sha256=NZuJHlLHck9KWrepNZHrJONptYCQI9P-uTqknSFI5Ds,71
155
- agent_cli/server/cli.py,sha256=Oi-Ca54YusJijOp7TSl4a_9pOeIOKrgZE3Ex833ehis,22846
159
+ agent_cli/server/cli.py,sha256=ZpsDmf9Z18jk2N1bdJILN2urPXb8iLYzrlHF9sCxmuY,23021
156
160
  agent_cli/server/common.py,sha256=fD2AZdM716TXcz1T4ZDPpPaKynVOEjbVC1LDDloDmDo,6463
157
161
  agent_cli/server/model_manager.py,sha256=93l_eeZeqnPALyDIK24or61tvded9TbM8tnde0okVjY,9225
158
162
  agent_cli/server/model_registry.py,sha256=KrRV1XxbFYuXu5rJlHFh6PTl_2BKiWnWsaNrf-0c6wQ,6988
@@ -179,13 +183,13 @@ agent_cli/server/whisper/backends/base.py,sha256=gQi5EyMCFS464mKXGIKbh1vgtBm99eN
179
183
  agent_cli/server/whisper/backends/faster_whisper.py,sha256=-BogM_-_rhlXKUZuW1qUN8zw2gD0ut1bJozPDP19knA,6717
180
184
  agent_cli/server/whisper/backends/mlx.py,sha256=wSkD9wL3K8PvQToJ5qkTj_HZQJD9Brs_bjNz-X0Sku8,9328
181
185
  agent_cli/services/__init__.py,sha256=8REdXC5eXfhAJJ6j85tgCinbj89PLwv8A50dysA8VUc,10004
182
- agent_cli/services/_wyoming_utils.py,sha256=h6Oq1PmyhHGWQxywrC8a58lQRZDMCITSLOUR9ZFUBgk,1906
183
- agent_cli/services/asr.py,sha256=V6SV-USnMhK-0aE-pneiktU4HpmLqenmMb-jZ-_74zU,16992
186
+ agent_cli/services/_wyoming_utils.py,sha256=pKPa4fOSdqcG3-kNHJOHHsMnZ1yZJZi6XohVwjAwabo,1971
187
+ agent_cli/services/asr.py,sha256=aRaCLVCygsJ15qyQEPECOZsdSrnlLPbyY4RwAqY0qIw,17258
184
188
  agent_cli/services/llm.py,sha256=Kwdo6pbMYI9oykF-RBe1iaL3KsYrNWTLdRSioewmsGQ,7199
185
- agent_cli/services/tts.py,sha256=exKo-55_670mx8dQOzVSZkv6aWYLv04SVmBcjOlD458,14772
186
- agent_cli/services/wake_word.py,sha256=j6Z8rsGq_vAdRevy9fkXIgLZd9UWfrIsefmTreNmM0c,4575
187
- agent_cli-0.66.1.dist-info/METADATA,sha256=WvTItFU9nOIQicSgJ_t2HbbCOuYfb6tJ3ONIk3l7VHg,155374
188
- agent_cli-0.66.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
189
- agent_cli-0.66.1.dist-info/entry_points.txt,sha256=FUv-fB2atLsPUk_RT4zqnZl1coz4_XHFwRALOKOF38s,97
190
- agent_cli-0.66.1.dist-info/licenses/LICENSE,sha256=majJU6S9kC8R8bW39NVBHyv32Dq50FL6TDxECG2WVts,1068
191
- agent_cli-0.66.1.dist-info/RECORD,,
189
+ agent_cli/services/tts.py,sha256=NX5Qnq7ddLI3mwm3nzhbR3zB1Os4Ip4sSVSjDZDTBcI,14855
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,,