deepctl 0.3.1__tar.gz → 0.3.3__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepctl
3
- Version: 0.3.1
3
+ Version: 0.3.3
4
4
  Summary: Official Deepgram CLI for speech recognition and audio intelligence
5
5
  Author-email: Deepgram <devrel@deepgram.com>
6
6
  Maintainer-email: Deepgram <devrel@deepgram.com>
@@ -27,26 +27,26 @@ Description-Content-Type: text/markdown
27
27
  License-File: LICENSE
28
28
  Requires-Dist: click>=8.0.0
29
29
  Requires-Dist: deepgram-sdk<8,>=7.7.0
30
- Requires-Dist: deepctl-core>=0.2.17
31
- Requires-Dist: deepctl-cmd-login>=0.1.18
30
+ Requires-Dist: deepctl-core>=0.2.19
31
+ Requires-Dist: deepctl-cmd-login>=0.1.20
32
32
  Requires-Dist: deepctl-cmd-projects>=0.2.0
33
33
  Requires-Dist: deepctl-cmd-transcribe>=0.1.12
34
- Requires-Dist: deepctl-cmd-usage>=0.2.0
34
+ Requires-Dist: deepctl-cmd-usage>=0.2.1
35
35
  Requires-Dist: deepctl-cmd-mcp>=0.1.15
36
36
  Requires-Dist: deepctl-cmd-api>=0.0.2
37
- Requires-Dist: deepctl-cmd-debug>=0.1.12
37
+ Requires-Dist: deepctl-cmd-debug>=0.1.13
38
38
  Requires-Dist: deepctl-cmd-debug-browser>=0.1.12
39
39
  Requires-Dist: deepctl-cmd-debug-network>=0.1.12
40
- Requires-Dist: deepctl-cmd-debug-audio>=0.1.13
40
+ Requires-Dist: deepctl-cmd-debug-audio>=0.1.14
41
41
  Requires-Dist: deepctl-cmd-debug-probe>=0.0.2
42
42
  Requires-Dist: deepctl-cmd-debug-toolkit>=0.1.0
43
- Requires-Dist: deepctl-cmd-ffprobe>=0.0.2
43
+ Requires-Dist: deepctl-cmd-ffprobe>=0.0.3
44
44
  Requires-Dist: deepctl-cmd-update>=0.2.7
45
- Requires-Dist: deepctl-cmd-plugin>=0.1.13
46
- Requires-Dist: deepctl-cmd-skills>=0.0.8
45
+ Requires-Dist: deepctl-cmd-plugin>=0.1.14
46
+ Requires-Dist: deepctl-cmd-skills>=0.0.9
47
47
  Requires-Dist: deepctl-cmd-init>=0.0.4
48
48
  Requires-Dist: deepctl-cmd-models>=0.1.1
49
- Requires-Dist: deepctl-cmd-speak>=0.0.4
49
+ Requires-Dist: deepctl-cmd-speak>=0.0.5
50
50
  Requires-Dist: deepctl-cmd-keys>=0.1.0
51
51
  Requires-Dist: deepctl-cmd-read>=0.1.0
52
52
  Requires-Dist: deepctl-cmd-listen>=0.0.14
@@ -54,8 +54,8 @@ Requires-Dist: deepctl-cmd-requests>=0.1.0
54
54
  Requires-Dist: deepctl-cmd-billing>=0.1.0
55
55
  Requires-Dist: deepctl-cmd-members>=0.1.0
56
56
  Requires-Dist: deepctl-cmd-completion>=0.0.3
57
- Requires-Dist: deepctl-shared-utils>=0.1.12
58
- Requires-Dist: deepctl-telemetry>=0.0.6
57
+ Requires-Dist: deepctl-shared-utils>=0.1.13
58
+ Requires-Dist: deepctl-telemetry>=0.0.7
59
59
  Requires-Dist: pydantic>=2.0.0
60
60
  Requires-Dist: rich>=13.0.0
61
61
  Requires-Dist: httpx>=0.24.0
@@ -268,8 +268,15 @@ container so it is directly playable. Pass an `aura-*` model to use the Speak v1
268
268
  batch REST API instead, which supports containerized formats like MP3.
269
269
 
270
270
  ```bash
271
+ # Quickstart — synthesize and hear it straight away
272
+ dg speak "Hello from Deepgram" --play
273
+
274
+ # Discover voices
275
+ dg speak --list-voices
276
+
271
277
  # Flux TTS (v2, WebSocket streaming) — the default
272
278
  dg speak "Hello from Flux" -o hello.wav
279
+ dg speak "Save it and play it" -o hello.wav --play
273
280
  # Piped audio is a streaming WAV; -loglevel error hides ffmpeg's cosmetic
274
281
  # end-of-stream notice (the audio is complete).
275
282
  dg speak "Hello from Flux" | ffplay -loglevel error -nodisp -autoexit -
@@ -288,6 +295,15 @@ echo "Hello" | dg speak -o greeting.mp3 -m aura-2-asteria-en
288
295
  dg speak "Hola, bienvenido a Deepgram" -o hola.mp3 -m aura-2-selena-es
289
296
  ```
290
297
 
298
+ `--play` uses the first available system player (`ffplay`, `afplay`, `paplay`,
299
+ or `aplay`); install `ffmpeg` if none is present. With the Flux default the
300
+ audio is streamed into the player as it arrives, so playback starts at
301
+ first-audio latency rather than after the whole utterance. Each fallback
302
+ player is checked against the requested format before the API call: `aplay`
303
+ plays PCM/WAV only and `paplay` adds FLAC and Opus but not MP3 or AAC, while
304
+ `ffplay` and `afplay` (macOS) play every format. Playing Aura's default MP3 on
305
+ Linux needs `ffplay` or `--encoding flac`.
306
+
291
307
  ### Text Intelligence
292
308
 
293
309
  Analyze text for sentiment, summaries, topics, and intents.
@@ -359,14 +375,42 @@ Add to your editor's MCP config:
359
375
 
360
376
  ### AI Tool Integration
361
377
 
362
- Automatically detect and configure AI coding assistants with Deepgram skills.
378
+ Install the Deepgram skills as folders in each AI coding assistant's skills folder.
363
379
 
364
380
  ```bash
365
381
  dg skills status # Detect AI tools
366
382
  dg skills setup # Interactive setup wizard
367
383
  dg skills install --all # Install for all detected tools
384
+ dg skills update # Replace the folders deepctl installed
385
+ dg skills remove --all # Delete the folders deepctl installed
368
386
  ```
369
387
 
388
+ | Tool | Skills folder |
389
+ |---|---|
390
+ | Claude Code | `~/.claude/skills` |
391
+ | OpenAI Codex | `~/.agents/skills` |
392
+ | Gemini CLI | `~/.gemini/skills` |
393
+ | Cursor | `~/.cursor/skills` |
394
+ | OpenCode | `~/.config/opencode/skills` |
395
+ | Cline | `~/.cline/skills` |
396
+ | Amazon Q Developer, Aider | none: deepctl prints where to get the skills |
397
+
398
+ deepctl replaces or deletes a folder only if skills.json records it for that tool, it is a real folder directly in that tool's skills folder, it holds deepctl's `.deepctl-skill` marker, and its contents are exactly what deepctl installed. So folders from `npx skills add`, and symlinked skill folders, are left alone.
399
+
400
+ These commands abort if the filesystem cannot provide locking or no-replace directory moves. Installed skill folders and skills.json stay as they were, though the tool's skills folder and `~/.deepctl/skills/skills.json.lock` may already have been created. While another `dg skills`, `dg login` or `dg plugin` command is changing skills, the next one waits up to 30 seconds for it to finish. If another of these commands removes or changes a tool's skills while `dg skills update` or a plugin refresh is running, the refresh leaves that tool as the other command left it and prints a warning. That holds even for the same ref, because a branch such as `main` can move between two downloads. `dg skills update` run with `--ref` still applies its ref to a tool another command updated, but does not reinstall skills another command removed.
401
+
402
+ `dg login` offers to install the skills, and `dg plugin install`, `update` and `remove` refresh the installed ones, through the same path as `dg skills install` and `update`. A skills installation failure prints a warning on stderr and does not change those commands' exit codes. Ctrl-C still cancels the command.
403
+
404
+ If you edit a deepctl folder, or add a file or link to it, deepctl leaves it alone: `update` stops without changing anything and `remove` won't delete it. To get updates again, rename or move your edited copy, or delete it yourself. Opening a skill folder in Finder or Explorer can add `.DS_Store`, `Thumbs.db` or `desktop.ini`, which counts as an edit.
405
+
406
+ #### Upgrading from deepctl 0.2.16 through 0.3.x
407
+
408
+ On macOS and Linux, once `dg skills install` or `update` (or `dg login`, or `dg plugin install`, `update` or `remove`) has installed a tool's skill folders, deepctl removes the files older deepctl wrote for that tool, and prints which ones on stderr: `~/.claude/commands/deepgram/*.md`, `~/.cursor/rules/deepctl.mdc`, `~/.cline/rules/deepctl.md`, and the section between the `<!-- BEGIN deepctl CLI Reference` and `<!-- END deepctl CLI Reference -->` lines in `~/.codex/instructions.md`, `~/.gemini/GEMINI.md` and `~/.opencode/agents.md`. In those three files, everything between the two marker lines is removed, including anything you changed there; the rest of the file is kept, apart from the blank line deepctl added before its section. Deepctl keeps the original file next to it as `.deepctl-kept-v03-*`; compare it for any late write from an open editor, then delete it if you do not need it.
409
+
410
+ deepctl removes a file only if its content is exactly a deepgram/skills version that older deepctl copied, even if you made that copy yourself. It keeps a file you edited, a link, a file in a folder reached through a link (such as a dotfiles `~/.claude`), and a section that is incomplete, repeated or in a read-only or locked file, and warns once about each file 0.3.x recorded. An I/O failure, such as permission denied, is retried on the next install or update, with a warning for files 0.3.x recorded. Amazon Q Developer and Aider files (`~/.amazonq/rules/deepctl.md`, `~/.deepctl/skills/deepctl-conventions.md`) are kept, because those tools have no skill folders; if you delete Aider's, also remove its entry under `read:` in `~/.aider.conf.yml`.
411
+
412
+ On Windows, deepctl leaves this 0.3.x content untouched because a parent folder could become a junction during cleanup; remove it yourself if you do not need it. While deepctl works on a file on macOS or Linux, it moves it to `.deepctl-v03-<name>` in the same folder. If deepctl is interrupted, the next install or update puts the file back and says so. If both the file and its `.deepctl-v03-<name>` are there, as after you saved the file while deepctl was editing it, deepctl changes neither and names both on each run until you compare them and delete the `.deepctl-v03-<name>` copy; it does the same if `.deepctl-v03-<name>` is a link or folder deepctl didn't make. A `.deepctl-v03-*.tmp` file is an unused draft; delete it.
413
+
370
414
  ### Starter Apps
371
415
 
372
416
  Scaffold a new project from Deepgram templates.
@@ -400,8 +444,12 @@ dg keys --list -o csv
400
444
  dg usage --last-week -o yaml
401
445
  ```
402
446
 
403
- When running in a non-TTY environment (pipes, CI, or AI coding tools), the CLI
404
- automatically switches to structured JSON output with plain-text status messages.
447
+ In CI, in AI coding tools, and in any fully non-interactive environment with
448
+ no terminal attached (cron, systemd, `docker run` without `-t`), the CLI
449
+ detects the context and automatically switches to structured JSON output with
450
+ plain-text status messages. A plain pipe on its own does not trigger this —
451
+ `dg projects | jq` from an interactive shell still gets the human-readable
452
+ table, so pass `-o json` explicitly when you are piping by hand.
405
453
 
406
454
  ### Exit codes
407
455
 
@@ -418,8 +466,14 @@ Note that `dg` reports `2` for an interrupt rather than the shell's
418
466
  conventional `130`, so the code is the same whether the cancellation came from
419
467
  Ctrl-C or from declining a prompt.
420
468
 
421
- If a CI step relied on `dg` always exiting `0` (every command did, before
422
- 0.3.0), it will now fail where it previously passed silently.
469
+ Human-readable status and error messages go to stderr, and stdout carries the
470
+ result. With an explicit structured-output mode, authentication-guard failures
471
+ and commands that return an error result write a payload with `"status":
472
+ "error"` to stdout — authentication failures, `dg ffprobe`, and `dg debug
473
+ audio` included. Usage errors and handler-raised exceptions report on stderr
474
+ and can leave stdout empty. Branch on the exit code rather than on whether
475
+ stdout parsed. If a CI step relied on `dg` always exiting `0` (every command
476
+ did, before 0.3.0), it will now fail where it previously passed silently.
423
477
 
424
478
  ### Forcing non-interactive mode
425
479
 
@@ -427,7 +481,7 @@ Three explicit ways to skip every prompt and run with defaults — useful from a
427
481
  real terminal where auto-detection wouldn't otherwise trigger:
428
482
 
429
483
  ```bash
430
- # Global flag (works at any position)
484
+ # Global flag (before any command, or after a leaf command)
431
485
  dg --non-interactive listen recording.wav
432
486
  dg listen --non-interactive recording.wav
433
487
 
@@ -479,10 +533,14 @@ The CLI phones home anonymous error reports to help us catch crashes and regress
479
533
 
480
534
  ### Opt out
481
535
 
482
- Persistent (recommended):
536
+ Persistent (recommended) — add this to your `config.yaml`
537
+ (`~/.config/deepctl/config.yaml` on Linux,
538
+ `~/Library/Application Support/deepctl/config.yaml` on macOS,
539
+ `%LOCALAPPDATA%\deepgram\deepctl\config.yaml` on Windows):
483
540
 
484
- ```bash
485
- dg config set telemetry.enabled false
541
+ ```yaml
542
+ telemetry:
543
+ enabled: false
486
544
  ```
487
545
 
488
546
  One-shot (CI, scripts, single command):
@@ -184,8 +184,15 @@ container so it is directly playable. Pass an `aura-*` model to use the Speak v1
184
184
  batch REST API instead, which supports containerized formats like MP3.
185
185
 
186
186
  ```bash
187
+ # Quickstart — synthesize and hear it straight away
188
+ dg speak "Hello from Deepgram" --play
189
+
190
+ # Discover voices
191
+ dg speak --list-voices
192
+
187
193
  # Flux TTS (v2, WebSocket streaming) — the default
188
194
  dg speak "Hello from Flux" -o hello.wav
195
+ dg speak "Save it and play it" -o hello.wav --play
189
196
  # Piped audio is a streaming WAV; -loglevel error hides ffmpeg's cosmetic
190
197
  # end-of-stream notice (the audio is complete).
191
198
  dg speak "Hello from Flux" | ffplay -loglevel error -nodisp -autoexit -
@@ -204,6 +211,15 @@ echo "Hello" | dg speak -o greeting.mp3 -m aura-2-asteria-en
204
211
  dg speak "Hola, bienvenido a Deepgram" -o hola.mp3 -m aura-2-selena-es
205
212
  ```
206
213
 
214
+ `--play` uses the first available system player (`ffplay`, `afplay`, `paplay`,
215
+ or `aplay`); install `ffmpeg` if none is present. With the Flux default the
216
+ audio is streamed into the player as it arrives, so playback starts at
217
+ first-audio latency rather than after the whole utterance. Each fallback
218
+ player is checked against the requested format before the API call: `aplay`
219
+ plays PCM/WAV only and `paplay` adds FLAC and Opus but not MP3 or AAC, while
220
+ `ffplay` and `afplay` (macOS) play every format. Playing Aura's default MP3 on
221
+ Linux needs `ffplay` or `--encoding flac`.
222
+
207
223
  ### Text Intelligence
208
224
 
209
225
  Analyze text for sentiment, summaries, topics, and intents.
@@ -275,14 +291,42 @@ Add to your editor's MCP config:
275
291
 
276
292
  ### AI Tool Integration
277
293
 
278
- Automatically detect and configure AI coding assistants with Deepgram skills.
294
+ Install the Deepgram skills as folders in each AI coding assistant's skills folder.
279
295
 
280
296
  ```bash
281
297
  dg skills status # Detect AI tools
282
298
  dg skills setup # Interactive setup wizard
283
299
  dg skills install --all # Install for all detected tools
300
+ dg skills update # Replace the folders deepctl installed
301
+ dg skills remove --all # Delete the folders deepctl installed
284
302
  ```
285
303
 
304
+ | Tool | Skills folder |
305
+ |---|---|
306
+ | Claude Code | `~/.claude/skills` |
307
+ | OpenAI Codex | `~/.agents/skills` |
308
+ | Gemini CLI | `~/.gemini/skills` |
309
+ | Cursor | `~/.cursor/skills` |
310
+ | OpenCode | `~/.config/opencode/skills` |
311
+ | Cline | `~/.cline/skills` |
312
+ | Amazon Q Developer, Aider | none: deepctl prints where to get the skills |
313
+
314
+ deepctl replaces or deletes a folder only if skills.json records it for that tool, it is a real folder directly in that tool's skills folder, it holds deepctl's `.deepctl-skill` marker, and its contents are exactly what deepctl installed. So folders from `npx skills add`, and symlinked skill folders, are left alone.
315
+
316
+ These commands abort if the filesystem cannot provide locking or no-replace directory moves. Installed skill folders and skills.json stay as they were, though the tool's skills folder and `~/.deepctl/skills/skills.json.lock` may already have been created. While another `dg skills`, `dg login` or `dg plugin` command is changing skills, the next one waits up to 30 seconds for it to finish. If another of these commands removes or changes a tool's skills while `dg skills update` or a plugin refresh is running, the refresh leaves that tool as the other command left it and prints a warning. That holds even for the same ref, because a branch such as `main` can move between two downloads. `dg skills update` run with `--ref` still applies its ref to a tool another command updated, but does not reinstall skills another command removed.
317
+
318
+ `dg login` offers to install the skills, and `dg plugin install`, `update` and `remove` refresh the installed ones, through the same path as `dg skills install` and `update`. A skills installation failure prints a warning on stderr and does not change those commands' exit codes. Ctrl-C still cancels the command.
319
+
320
+ If you edit a deepctl folder, or add a file or link to it, deepctl leaves it alone: `update` stops without changing anything and `remove` won't delete it. To get updates again, rename or move your edited copy, or delete it yourself. Opening a skill folder in Finder or Explorer can add `.DS_Store`, `Thumbs.db` or `desktop.ini`, which counts as an edit.
321
+
322
+ #### Upgrading from deepctl 0.2.16 through 0.3.x
323
+
324
+ On macOS and Linux, once `dg skills install` or `update` (or `dg login`, or `dg plugin install`, `update` or `remove`) has installed a tool's skill folders, deepctl removes the files older deepctl wrote for that tool, and prints which ones on stderr: `~/.claude/commands/deepgram/*.md`, `~/.cursor/rules/deepctl.mdc`, `~/.cline/rules/deepctl.md`, and the section between the `<!-- BEGIN deepctl CLI Reference` and `<!-- END deepctl CLI Reference -->` lines in `~/.codex/instructions.md`, `~/.gemini/GEMINI.md` and `~/.opencode/agents.md`. In those three files, everything between the two marker lines is removed, including anything you changed there; the rest of the file is kept, apart from the blank line deepctl added before its section. Deepctl keeps the original file next to it as `.deepctl-kept-v03-*`; compare it for any late write from an open editor, then delete it if you do not need it.
325
+
326
+ deepctl removes a file only if its content is exactly a deepgram/skills version that older deepctl copied, even if you made that copy yourself. It keeps a file you edited, a link, a file in a folder reached through a link (such as a dotfiles `~/.claude`), and a section that is incomplete, repeated or in a read-only or locked file, and warns once about each file 0.3.x recorded. An I/O failure, such as permission denied, is retried on the next install or update, with a warning for files 0.3.x recorded. Amazon Q Developer and Aider files (`~/.amazonq/rules/deepctl.md`, `~/.deepctl/skills/deepctl-conventions.md`) are kept, because those tools have no skill folders; if you delete Aider's, also remove its entry under `read:` in `~/.aider.conf.yml`.
327
+
328
+ On Windows, deepctl leaves this 0.3.x content untouched because a parent folder could become a junction during cleanup; remove it yourself if you do not need it. While deepctl works on a file on macOS or Linux, it moves it to `.deepctl-v03-<name>` in the same folder. If deepctl is interrupted, the next install or update puts the file back and says so. If both the file and its `.deepctl-v03-<name>` are there, as after you saved the file while deepctl was editing it, deepctl changes neither and names both on each run until you compare them and delete the `.deepctl-v03-<name>` copy; it does the same if `.deepctl-v03-<name>` is a link or folder deepctl didn't make. A `.deepctl-v03-*.tmp` file is an unused draft; delete it.
329
+
286
330
  ### Starter Apps
287
331
 
288
332
  Scaffold a new project from Deepgram templates.
@@ -316,8 +360,12 @@ dg keys --list -o csv
316
360
  dg usage --last-week -o yaml
317
361
  ```
318
362
 
319
- When running in a non-TTY environment (pipes, CI, or AI coding tools), the CLI
320
- automatically switches to structured JSON output with plain-text status messages.
363
+ In CI, in AI coding tools, and in any fully non-interactive environment with
364
+ no terminal attached (cron, systemd, `docker run` without `-t`), the CLI
365
+ detects the context and automatically switches to structured JSON output with
366
+ plain-text status messages. A plain pipe on its own does not trigger this —
367
+ `dg projects | jq` from an interactive shell still gets the human-readable
368
+ table, so pass `-o json` explicitly when you are piping by hand.
321
369
 
322
370
  ### Exit codes
323
371
 
@@ -334,8 +382,14 @@ Note that `dg` reports `2` for an interrupt rather than the shell's
334
382
  conventional `130`, so the code is the same whether the cancellation came from
335
383
  Ctrl-C or from declining a prompt.
336
384
 
337
- If a CI step relied on `dg` always exiting `0` (every command did, before
338
- 0.3.0), it will now fail where it previously passed silently.
385
+ Human-readable status and error messages go to stderr, and stdout carries the
386
+ result. With an explicit structured-output mode, authentication-guard failures
387
+ and commands that return an error result write a payload with `"status":
388
+ "error"` to stdout — authentication failures, `dg ffprobe`, and `dg debug
389
+ audio` included. Usage errors and handler-raised exceptions report on stderr
390
+ and can leave stdout empty. Branch on the exit code rather than on whether
391
+ stdout parsed. If a CI step relied on `dg` always exiting `0` (every command
392
+ did, before 0.3.0), it will now fail where it previously passed silently.
339
393
 
340
394
  ### Forcing non-interactive mode
341
395
 
@@ -343,7 +397,7 @@ Three explicit ways to skip every prompt and run with defaults — useful from a
343
397
  real terminal where auto-detection wouldn't otherwise trigger:
344
398
 
345
399
  ```bash
346
- # Global flag (works at any position)
400
+ # Global flag (before any command, or after a leaf command)
347
401
  dg --non-interactive listen recording.wav
348
402
  dg listen --non-interactive recording.wav
349
403
 
@@ -395,10 +449,14 @@ The CLI phones home anonymous error reports to help us catch crashes and regress
395
449
 
396
450
  ### Opt out
397
451
 
398
- Persistent (recommended):
452
+ Persistent (recommended) — add this to your `config.yaml`
453
+ (`~/.config/deepctl/config.yaml` on Linux,
454
+ `~/Library/Application Support/deepctl/config.yaml` on macOS,
455
+ `%LOCALAPPDATA%\deepgram\deepctl\config.yaml` on Windows):
399
456
 
400
- ```bash
401
- dg config set telemetry.enabled false
457
+ ```yaml
458
+ telemetry:
459
+ enabled: false
402
460
  ```
403
461
 
404
462
  One-shot (CI, scripts, single command):
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "deepctl"
7
- version = "0.3.1" # x-release-please-version
7
+ version = "0.3.3" # x-release-please-version
8
8
  description = "Official Deepgram CLI for speech recognition and audio intelligence"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -35,26 +35,26 @@ requires-python = ">=3.10"
35
35
  dependencies = [
36
36
  "click>=8.0.0",
37
37
  "deepgram-sdk>=7.7.0,<8",
38
- "deepctl-core>=0.2.17",
39
- "deepctl-cmd-login>=0.1.18",
38
+ "deepctl-core>=0.2.19",
39
+ "deepctl-cmd-login>=0.1.20",
40
40
  "deepctl-cmd-projects>=0.2.0",
41
41
  "deepctl-cmd-transcribe>=0.1.12",
42
- "deepctl-cmd-usage>=0.2.0",
42
+ "deepctl-cmd-usage>=0.2.1",
43
43
  "deepctl-cmd-mcp>=0.1.15",
44
44
  "deepctl-cmd-api>=0.0.2",
45
- "deepctl-cmd-debug>=0.1.12",
45
+ "deepctl-cmd-debug>=0.1.13",
46
46
  "deepctl-cmd-debug-browser>=0.1.12",
47
47
  "deepctl-cmd-debug-network>=0.1.12",
48
- "deepctl-cmd-debug-audio>=0.1.13",
48
+ "deepctl-cmd-debug-audio>=0.1.14",
49
49
  "deepctl-cmd-debug-probe>=0.0.2",
50
50
  "deepctl-cmd-debug-toolkit>=0.1.0",
51
- "deepctl-cmd-ffprobe>=0.0.2",
51
+ "deepctl-cmd-ffprobe>=0.0.3",
52
52
  "deepctl-cmd-update>=0.2.7",
53
- "deepctl-cmd-plugin>=0.1.13",
54
- "deepctl-cmd-skills>=0.0.8",
53
+ "deepctl-cmd-plugin>=0.1.14",
54
+ "deepctl-cmd-skills>=0.0.9",
55
55
  "deepctl-cmd-init>=0.0.4",
56
56
  "deepctl-cmd-models>=0.1.1",
57
- "deepctl-cmd-speak>=0.0.4",
57
+ "deepctl-cmd-speak>=0.0.5",
58
58
  "deepctl-cmd-keys>=0.1.0",
59
59
  "deepctl-cmd-read>=0.1.0",
60
60
  "deepctl-cmd-listen>=0.0.14",
@@ -62,8 +62,8 @@ dependencies = [
62
62
  "deepctl-cmd-billing>=0.1.0",
63
63
  "deepctl-cmd-members>=0.1.0",
64
64
  "deepctl-cmd-completion>=0.0.3",
65
- "deepctl-shared-utils>=0.1.12",
66
- "deepctl-telemetry>=0.0.6",
65
+ "deepctl-shared-utils>=0.1.13",
66
+ "deepctl-telemetry>=0.0.7",
67
67
  "pydantic>=2.0.0",
68
68
  "rich>=13.0.0",
69
69
  "httpx>=0.24.0",
@@ -1,7 +1,7 @@
1
1
  """deepctl - Official command-line interface for Deepgram's speech
2
2
  recognition API."""
3
3
 
4
- __version__ = "0.3.1" # x-release-please-version
4
+ __version__ = "0.3.3" # x-release-please-version
5
5
  __author__ = "Deepgram"
6
6
  __email__ = "devrel@deepgram.com"
7
7
  __license__ = "MIT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepctl
3
- Version: 0.3.1
3
+ Version: 0.3.3
4
4
  Summary: Official Deepgram CLI for speech recognition and audio intelligence
5
5
  Author-email: Deepgram <devrel@deepgram.com>
6
6
  Maintainer-email: Deepgram <devrel@deepgram.com>
@@ -27,26 +27,26 @@ Description-Content-Type: text/markdown
27
27
  License-File: LICENSE
28
28
  Requires-Dist: click>=8.0.0
29
29
  Requires-Dist: deepgram-sdk<8,>=7.7.0
30
- Requires-Dist: deepctl-core>=0.2.17
31
- Requires-Dist: deepctl-cmd-login>=0.1.18
30
+ Requires-Dist: deepctl-core>=0.2.19
31
+ Requires-Dist: deepctl-cmd-login>=0.1.20
32
32
  Requires-Dist: deepctl-cmd-projects>=0.2.0
33
33
  Requires-Dist: deepctl-cmd-transcribe>=0.1.12
34
- Requires-Dist: deepctl-cmd-usage>=0.2.0
34
+ Requires-Dist: deepctl-cmd-usage>=0.2.1
35
35
  Requires-Dist: deepctl-cmd-mcp>=0.1.15
36
36
  Requires-Dist: deepctl-cmd-api>=0.0.2
37
- Requires-Dist: deepctl-cmd-debug>=0.1.12
37
+ Requires-Dist: deepctl-cmd-debug>=0.1.13
38
38
  Requires-Dist: deepctl-cmd-debug-browser>=0.1.12
39
39
  Requires-Dist: deepctl-cmd-debug-network>=0.1.12
40
- Requires-Dist: deepctl-cmd-debug-audio>=0.1.13
40
+ Requires-Dist: deepctl-cmd-debug-audio>=0.1.14
41
41
  Requires-Dist: deepctl-cmd-debug-probe>=0.0.2
42
42
  Requires-Dist: deepctl-cmd-debug-toolkit>=0.1.0
43
- Requires-Dist: deepctl-cmd-ffprobe>=0.0.2
43
+ Requires-Dist: deepctl-cmd-ffprobe>=0.0.3
44
44
  Requires-Dist: deepctl-cmd-update>=0.2.7
45
- Requires-Dist: deepctl-cmd-plugin>=0.1.13
46
- Requires-Dist: deepctl-cmd-skills>=0.0.8
45
+ Requires-Dist: deepctl-cmd-plugin>=0.1.14
46
+ Requires-Dist: deepctl-cmd-skills>=0.0.9
47
47
  Requires-Dist: deepctl-cmd-init>=0.0.4
48
48
  Requires-Dist: deepctl-cmd-models>=0.1.1
49
- Requires-Dist: deepctl-cmd-speak>=0.0.4
49
+ Requires-Dist: deepctl-cmd-speak>=0.0.5
50
50
  Requires-Dist: deepctl-cmd-keys>=0.1.0
51
51
  Requires-Dist: deepctl-cmd-read>=0.1.0
52
52
  Requires-Dist: deepctl-cmd-listen>=0.0.14
@@ -54,8 +54,8 @@ Requires-Dist: deepctl-cmd-requests>=0.1.0
54
54
  Requires-Dist: deepctl-cmd-billing>=0.1.0
55
55
  Requires-Dist: deepctl-cmd-members>=0.1.0
56
56
  Requires-Dist: deepctl-cmd-completion>=0.0.3
57
- Requires-Dist: deepctl-shared-utils>=0.1.12
58
- Requires-Dist: deepctl-telemetry>=0.0.6
57
+ Requires-Dist: deepctl-shared-utils>=0.1.13
58
+ Requires-Dist: deepctl-telemetry>=0.0.7
59
59
  Requires-Dist: pydantic>=2.0.0
60
60
  Requires-Dist: rich>=13.0.0
61
61
  Requires-Dist: httpx>=0.24.0
@@ -268,8 +268,15 @@ container so it is directly playable. Pass an `aura-*` model to use the Speak v1
268
268
  batch REST API instead, which supports containerized formats like MP3.
269
269
 
270
270
  ```bash
271
+ # Quickstart — synthesize and hear it straight away
272
+ dg speak "Hello from Deepgram" --play
273
+
274
+ # Discover voices
275
+ dg speak --list-voices
276
+
271
277
  # Flux TTS (v2, WebSocket streaming) — the default
272
278
  dg speak "Hello from Flux" -o hello.wav
279
+ dg speak "Save it and play it" -o hello.wav --play
273
280
  # Piped audio is a streaming WAV; -loglevel error hides ffmpeg's cosmetic
274
281
  # end-of-stream notice (the audio is complete).
275
282
  dg speak "Hello from Flux" | ffplay -loglevel error -nodisp -autoexit -
@@ -288,6 +295,15 @@ echo "Hello" | dg speak -o greeting.mp3 -m aura-2-asteria-en
288
295
  dg speak "Hola, bienvenido a Deepgram" -o hola.mp3 -m aura-2-selena-es
289
296
  ```
290
297
 
298
+ `--play` uses the first available system player (`ffplay`, `afplay`, `paplay`,
299
+ or `aplay`); install `ffmpeg` if none is present. With the Flux default the
300
+ audio is streamed into the player as it arrives, so playback starts at
301
+ first-audio latency rather than after the whole utterance. Each fallback
302
+ player is checked against the requested format before the API call: `aplay`
303
+ plays PCM/WAV only and `paplay` adds FLAC and Opus but not MP3 or AAC, while
304
+ `ffplay` and `afplay` (macOS) play every format. Playing Aura's default MP3 on
305
+ Linux needs `ffplay` or `--encoding flac`.
306
+
291
307
  ### Text Intelligence
292
308
 
293
309
  Analyze text for sentiment, summaries, topics, and intents.
@@ -359,14 +375,42 @@ Add to your editor's MCP config:
359
375
 
360
376
  ### AI Tool Integration
361
377
 
362
- Automatically detect and configure AI coding assistants with Deepgram skills.
378
+ Install the Deepgram skills as folders in each AI coding assistant's skills folder.
363
379
 
364
380
  ```bash
365
381
  dg skills status # Detect AI tools
366
382
  dg skills setup # Interactive setup wizard
367
383
  dg skills install --all # Install for all detected tools
384
+ dg skills update # Replace the folders deepctl installed
385
+ dg skills remove --all # Delete the folders deepctl installed
368
386
  ```
369
387
 
388
+ | Tool | Skills folder |
389
+ |---|---|
390
+ | Claude Code | `~/.claude/skills` |
391
+ | OpenAI Codex | `~/.agents/skills` |
392
+ | Gemini CLI | `~/.gemini/skills` |
393
+ | Cursor | `~/.cursor/skills` |
394
+ | OpenCode | `~/.config/opencode/skills` |
395
+ | Cline | `~/.cline/skills` |
396
+ | Amazon Q Developer, Aider | none: deepctl prints where to get the skills |
397
+
398
+ deepctl replaces or deletes a folder only if skills.json records it for that tool, it is a real folder directly in that tool's skills folder, it holds deepctl's `.deepctl-skill` marker, and its contents are exactly what deepctl installed. So folders from `npx skills add`, and symlinked skill folders, are left alone.
399
+
400
+ These commands abort if the filesystem cannot provide locking or no-replace directory moves. Installed skill folders and skills.json stay as they were, though the tool's skills folder and `~/.deepctl/skills/skills.json.lock` may already have been created. While another `dg skills`, `dg login` or `dg plugin` command is changing skills, the next one waits up to 30 seconds for it to finish. If another of these commands removes or changes a tool's skills while `dg skills update` or a plugin refresh is running, the refresh leaves that tool as the other command left it and prints a warning. That holds even for the same ref, because a branch such as `main` can move between two downloads. `dg skills update` run with `--ref` still applies its ref to a tool another command updated, but does not reinstall skills another command removed.
401
+
402
+ `dg login` offers to install the skills, and `dg plugin install`, `update` and `remove` refresh the installed ones, through the same path as `dg skills install` and `update`. A skills installation failure prints a warning on stderr and does not change those commands' exit codes. Ctrl-C still cancels the command.
403
+
404
+ If you edit a deepctl folder, or add a file or link to it, deepctl leaves it alone: `update` stops without changing anything and `remove` won't delete it. To get updates again, rename or move your edited copy, or delete it yourself. Opening a skill folder in Finder or Explorer can add `.DS_Store`, `Thumbs.db` or `desktop.ini`, which counts as an edit.
405
+
406
+ #### Upgrading from deepctl 0.2.16 through 0.3.x
407
+
408
+ On macOS and Linux, once `dg skills install` or `update` (or `dg login`, or `dg plugin install`, `update` or `remove`) has installed a tool's skill folders, deepctl removes the files older deepctl wrote for that tool, and prints which ones on stderr: `~/.claude/commands/deepgram/*.md`, `~/.cursor/rules/deepctl.mdc`, `~/.cline/rules/deepctl.md`, and the section between the `<!-- BEGIN deepctl CLI Reference` and `<!-- END deepctl CLI Reference -->` lines in `~/.codex/instructions.md`, `~/.gemini/GEMINI.md` and `~/.opencode/agents.md`. In those three files, everything between the two marker lines is removed, including anything you changed there; the rest of the file is kept, apart from the blank line deepctl added before its section. Deepctl keeps the original file next to it as `.deepctl-kept-v03-*`; compare it for any late write from an open editor, then delete it if you do not need it.
409
+
410
+ deepctl removes a file only if its content is exactly a deepgram/skills version that older deepctl copied, even if you made that copy yourself. It keeps a file you edited, a link, a file in a folder reached through a link (such as a dotfiles `~/.claude`), and a section that is incomplete, repeated or in a read-only or locked file, and warns once about each file 0.3.x recorded. An I/O failure, such as permission denied, is retried on the next install or update, with a warning for files 0.3.x recorded. Amazon Q Developer and Aider files (`~/.amazonq/rules/deepctl.md`, `~/.deepctl/skills/deepctl-conventions.md`) are kept, because those tools have no skill folders; if you delete Aider's, also remove its entry under `read:` in `~/.aider.conf.yml`.
411
+
412
+ On Windows, deepctl leaves this 0.3.x content untouched because a parent folder could become a junction during cleanup; remove it yourself if you do not need it. While deepctl works on a file on macOS or Linux, it moves it to `.deepctl-v03-<name>` in the same folder. If deepctl is interrupted, the next install or update puts the file back and says so. If both the file and its `.deepctl-v03-<name>` are there, as after you saved the file while deepctl was editing it, deepctl changes neither and names both on each run until you compare them and delete the `.deepctl-v03-<name>` copy; it does the same if `.deepctl-v03-<name>` is a link or folder deepctl didn't make. A `.deepctl-v03-*.tmp` file is an unused draft; delete it.
413
+
370
414
  ### Starter Apps
371
415
 
372
416
  Scaffold a new project from Deepgram templates.
@@ -400,8 +444,12 @@ dg keys --list -o csv
400
444
  dg usage --last-week -o yaml
401
445
  ```
402
446
 
403
- When running in a non-TTY environment (pipes, CI, or AI coding tools), the CLI
404
- automatically switches to structured JSON output with plain-text status messages.
447
+ In CI, in AI coding tools, and in any fully non-interactive environment with
448
+ no terminal attached (cron, systemd, `docker run` without `-t`), the CLI
449
+ detects the context and automatically switches to structured JSON output with
450
+ plain-text status messages. A plain pipe on its own does not trigger this —
451
+ `dg projects | jq` from an interactive shell still gets the human-readable
452
+ table, so pass `-o json` explicitly when you are piping by hand.
405
453
 
406
454
  ### Exit codes
407
455
 
@@ -418,8 +466,14 @@ Note that `dg` reports `2` for an interrupt rather than the shell's
418
466
  conventional `130`, so the code is the same whether the cancellation came from
419
467
  Ctrl-C or from declining a prompt.
420
468
 
421
- If a CI step relied on `dg` always exiting `0` (every command did, before
422
- 0.3.0), it will now fail where it previously passed silently.
469
+ Human-readable status and error messages go to stderr, and stdout carries the
470
+ result. With an explicit structured-output mode, authentication-guard failures
471
+ and commands that return an error result write a payload with `"status":
472
+ "error"` to stdout — authentication failures, `dg ffprobe`, and `dg debug
473
+ audio` included. Usage errors and handler-raised exceptions report on stderr
474
+ and can leave stdout empty. Branch on the exit code rather than on whether
475
+ stdout parsed. If a CI step relied on `dg` always exiting `0` (every command
476
+ did, before 0.3.0), it will now fail where it previously passed silently.
423
477
 
424
478
  ### Forcing non-interactive mode
425
479
 
@@ -427,7 +481,7 @@ Three explicit ways to skip every prompt and run with defaults — useful from a
427
481
  real terminal where auto-detection wouldn't otherwise trigger:
428
482
 
429
483
  ```bash
430
- # Global flag (works at any position)
484
+ # Global flag (before any command, or after a leaf command)
431
485
  dg --non-interactive listen recording.wav
432
486
  dg listen --non-interactive recording.wav
433
487
 
@@ -479,10 +533,14 @@ The CLI phones home anonymous error reports to help us catch crashes and regress
479
533
 
480
534
  ### Opt out
481
535
 
482
- Persistent (recommended):
536
+ Persistent (recommended) — add this to your `config.yaml`
537
+ (`~/.config/deepctl/config.yaml` on Linux,
538
+ `~/Library/Application Support/deepctl/config.yaml` on macOS,
539
+ `%LOCALAPPDATA%\deepgram\deepctl\config.yaml` on Windows):
483
540
 
484
- ```bash
485
- dg config set telemetry.enabled false
541
+ ```yaml
542
+ telemetry:
543
+ enabled: false
486
544
  ```
487
545
 
488
546
  One-shot (CI, scripts, single command):
@@ -1,25 +1,25 @@
1
1
  click>=8.0.0
2
2
  deepgram-sdk<8,>=7.7.0
3
- deepctl-core>=0.2.17
4
- deepctl-cmd-login>=0.1.18
3
+ deepctl-core>=0.2.19
4
+ deepctl-cmd-login>=0.1.20
5
5
  deepctl-cmd-projects>=0.2.0
6
6
  deepctl-cmd-transcribe>=0.1.12
7
- deepctl-cmd-usage>=0.2.0
7
+ deepctl-cmd-usage>=0.2.1
8
8
  deepctl-cmd-mcp>=0.1.15
9
9
  deepctl-cmd-api>=0.0.2
10
- deepctl-cmd-debug>=0.1.12
10
+ deepctl-cmd-debug>=0.1.13
11
11
  deepctl-cmd-debug-browser>=0.1.12
12
12
  deepctl-cmd-debug-network>=0.1.12
13
- deepctl-cmd-debug-audio>=0.1.13
13
+ deepctl-cmd-debug-audio>=0.1.14
14
14
  deepctl-cmd-debug-probe>=0.0.2
15
15
  deepctl-cmd-debug-toolkit>=0.1.0
16
- deepctl-cmd-ffprobe>=0.0.2
16
+ deepctl-cmd-ffprobe>=0.0.3
17
17
  deepctl-cmd-update>=0.2.7
18
- deepctl-cmd-plugin>=0.1.13
19
- deepctl-cmd-skills>=0.0.8
18
+ deepctl-cmd-plugin>=0.1.14
19
+ deepctl-cmd-skills>=0.0.9
20
20
  deepctl-cmd-init>=0.0.4
21
21
  deepctl-cmd-models>=0.1.1
22
- deepctl-cmd-speak>=0.0.4
22
+ deepctl-cmd-speak>=0.0.5
23
23
  deepctl-cmd-keys>=0.1.0
24
24
  deepctl-cmd-read>=0.1.0
25
25
  deepctl-cmd-listen>=0.0.14
@@ -27,8 +27,8 @@ deepctl-cmd-requests>=0.1.0
27
27
  deepctl-cmd-billing>=0.1.0
28
28
  deepctl-cmd-members>=0.1.0
29
29
  deepctl-cmd-completion>=0.0.3
30
- deepctl-shared-utils>=0.1.12
31
- deepctl-telemetry>=0.0.6
30
+ deepctl-shared-utils>=0.1.13
31
+ deepctl-telemetry>=0.0.7
32
32
  pydantic>=2.0.0
33
33
  rich>=13.0.0
34
34
  httpx>=0.24.0
File without changes
File without changes
File without changes