deepctl-cmd-plugin 0.1.12__tar.gz → 0.1.14__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.
@@ -129,7 +129,8 @@ dmypy.json
129
129
 
130
130
  # uv
131
131
  .uv_cache/
132
- uv.lock
132
+ # uv.lock IS committed: it pins the dev/CI environment so every run tests
133
+ # the same versions and dependency drift arrives as a reviewable PR.
133
134
 
134
135
  # IDEs
135
136
  .vscode/
@@ -138,6 +139,9 @@ uv.lock
138
139
  *.swo
139
140
  *~
140
141
 
142
+ # Claude Code local state (worktrees, session files)
143
+ .claude/
144
+
141
145
  # OS
142
146
  .DS_Store
143
147
  .DS_Store?
@@ -0,0 +1,50 @@
1
+ # Changelog
2
+
3
+ ## [0.1.14](https://github.com/deepgram/cli/compare/deepctl-cmd-plugin-v0.1.13...deepctl-cmd-plugin-v0.1.14) (2026-10-09)
4
+
5
+
6
+ ### Features
7
+
8
+ * **skills:** prove and remove deepctl 0.3.x skill files after the new folders land ([f65e0e2](https://github.com/deepgram/cli/commit/f65e0e22868b3d8f7ac4e81d9163045aca3383ec))
9
+ * **skills:** remove the deepctl 0.3.x skill files deepctl can prove it wrote ([#130](https://github.com/deepgram/cli/issues/130)) ([8be5172](https://github.com/deepgram/cli/commit/8be5172fc8d101dbcb60f5b1fb7b36e5f4cfbcff))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * **skills:** install skills from login and plugin through the shared installer ([1d34a22](https://github.com/deepgram/cli/commit/1d34a22c6b6c6ee2d87b3ee83657e7c28998a8fd))
15
+ * **skills:** keep a newer skills ref and a removed tool when a refresh overlaps ([#126](https://github.com/deepgram/cli/issues/126)) ([3c9d1cf](https://github.com/deepgram/cli/commit/3c9d1cf3121a649a67b74ca9992cafdb0f2159ac))
16
+ * **skills:** login and plugin install skills through the shared installer ([#125](https://github.com/deepgram/cli/issues/125)) ([3675f7a](https://github.com/deepgram/cli/commit/3675f7a21a34f59a6d1ab5c1c463149fec66d0e3))
17
+ * **skills:** re-check records in dg skills update and the plugin refresh ([b0b1595](https://github.com/deepgram/cli/commit/b0b15959214085e818a551f1c37cfb1645001c6a))
18
+
19
+ ## [0.1.13](https://github.com/deepgram/cli/compare/deepctl-cmd-plugin-v0.1.12...deepctl-cmd-plugin-v0.1.13) (2026-09-23)
20
+
21
+
22
+ ### Bug Fixes
23
+
24
+ * **plugin:** return exit code 2, rather than success, when plugin removal is cancelled ([0dcfd2c](https://github.com/deepgram/cli/commit/0dcfd2c0d68a6095f4f6651e51ba6995f2b430d3))
25
+ * **plugin:** write the plugin-removal confirmation prompt to stderr so JSON output stays parseable ([0497ac1](https://github.com/deepgram/cli/commit/0497ac1892333c09d2a482f0b10ccd59d1f1dba2))
26
+
27
+ ## [0.1.12](https://github.com/deepgram/cli/compare/deepctl-cmd-plugin-v0.1.11...deepctl-cmd-plugin-v0.1.12) (2026-05-09)
28
+
29
+
30
+ ### Features
31
+
32
+ * **telemetry:** full Sentry observability + per-command usage tags ([#75](https://github.com/deepgram/cli/issues/75)) ([0fe43d2](https://github.com/deepgram/cli/commit/0fe43d2e00c58d8101ef2bd4b5aaf4437db9f0cf))
33
+
34
+ ## [0.1.11](https://github.com/deepgram/cli/compare/deepctl-cmd-plugin-v0.1.10...deepctl-cmd-plugin-v0.1.11) (2026-03-09)
35
+
36
+
37
+ ### Features
38
+
39
+ * Add plugin search command with hardcoded registry ([bd533cb](https://github.com/deepgram/cli/commit/bd533cb4b90b531fc522c4b2fd9a582d05d7861a))
40
+ * Add universal plugin support for all installation methods ([6c6d3c3](https://github.com/deepgram/cli/commit/6c6d3c3f87a3451c9474e8a1bcde6bd0148d4acc))
41
+ * **mcp:** fix auth, switch to streamable-http, and improve READMEs ([8e76d60](https://github.com/deepgram/cli/commit/8e76d6096ec319b5f0c85d57b299a7f05a60b5a8))
42
+ * **plugin:** add install-aware plugin system with venv bridge and strategy pattern ([7dd849b](https://github.com/deepgram/cli/commit/7dd849b6d5cc66fc6a9d54d665aad8909830b5ef))
43
+ * **skills:** add `deepctl skills` command and agent-native CLI metadata ([5654d40](https://github.com/deepgram/cli/commit/5654d40d3a6c2caf790a9de37c17ad60c150e8d3))
44
+
45
+
46
+ ### Bug Fixes
47
+
48
+ * Remove duplicate entries in plugin list ([11a3fe3](https://github.com/deepgram/cli/commit/11a3fe340e320df46c3d6ed872f469205b32163f))
49
+ * resolve all ruff and mypy linting issues ([83eaa7a](https://github.com/deepgram/cli/commit/83eaa7a54093eae72e9f6f08ec021980abc2a9fd))
50
+ * **tooling:** resolve all ruff, mypy, and Makefile issues ([3500379](https://github.com/deepgram/cli/commit/35003791a94ce74b40292dad091e5139299a620e))
@@ -1,10 +1,10 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: deepctl-cmd-plugin
3
- Version: 0.1.12
3
+ Version: 0.1.14
4
4
  Summary: Plugin management command for deepctl
5
5
  Author-email: Deepgram DevRel <devrel@deepgram.com>
6
6
  Requires-Python: >=3.10
7
- Requires-Dist: deepctl-core>=0.1.10
7
+ Requires-Dist: deepctl-core>=0.2.19
8
8
  Requires-Dist: packaging>=21.0
9
9
  Requires-Dist: toml>=0.10.2
10
10
  Description-Content-Type: text/markdown
@@ -2,11 +2,11 @@
2
2
  name = "deepctl-cmd-plugin"
3
3
  description = "Plugin management command for deepctl"
4
4
  readme = "README.md"
5
- version = "0.1.12" # x-release-please-version
5
+ version = "0.1.14" # x-release-please-version
6
6
  requires-python = ">=3.10"
7
7
  authors = [{ name = "Deepgram DevRel", email = "devrel@deepgram.com" }]
8
8
  dependencies = [
9
- "deepctl-core>=0.1.10",
9
+ "deepctl-core>=0.2.19",
10
10
  "packaging>=21.0",
11
11
  "toml>=0.10.2",
12
12
  ]
@@ -2,7 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import importlib.metadata
6
5
  import json
7
6
  import subprocess
8
7
  import sys
@@ -29,6 +28,7 @@ from deepctl_core.plugin_env import (
29
28
  save_plugin_state,
30
29
  )
31
30
  from rich.console import Console
31
+ from rich.markup import escape
32
32
  from rich.table import Table
33
33
 
34
34
  from .models import (
@@ -474,8 +474,17 @@ class PluginCommand(BaseGroupCommand):
474
474
  package = kwargs["package"]
475
475
  yes = kwargs.get("yes", False)
476
476
 
477
- if not yes and not click.confirm(f"Are you sure you want to remove {package}?"):
478
- return
477
+ # err=True: the prompt is interaction, not output. Keeping it off
478
+ # stdout is what lets `dg plugin remove ... -o json` stay parseable,
479
+ # and matches the sibling prompt in deepctl-cmd-keys.
480
+ if not yes and not click.confirm(
481
+ f"Are you sure you want to remove {package}?", err=True
482
+ ):
483
+ # Abort rather than return: this is a group subcommand, so there is
484
+ # no result for BaseCommand.EXIT_CODES to map, and a bare return
485
+ # exits 0 -- indistinguishable from a successful removal. main.py
486
+ # turns Abort into the documented exit 2 for user cancellation.
487
+ raise click.Abort()
479
488
 
480
489
  result = self.remove_plugin(config, auth_manager, client, package)
481
490
 
@@ -1162,37 +1171,31 @@ except:
1162
1171
  return "varies"
1163
1172
 
1164
1173
  def _maybe_update_skills(self) -> None:
1165
- """Regenerate AI CLI skills if installed (best-effort)."""
1166
- try:
1167
- from deepctl_core.skill_generator import (
1168
- _commands_hash,
1169
- collect_command_metadata,
1170
- get_all_generators,
1171
- get_skills_state,
1172
- save_skills_state,
1173
- )
1174
-
1175
- state = get_skills_state()
1176
- if not state.get("installed_skills") or not state.get("auto_update", True):
1177
- return
1174
+ """Refresh the recorded skills the way 'dg skills update' does (B3).
1178
1175
 
1179
- commands = collect_command_metadata()
1180
- version = importlib.metadata.version("deepctl")
1181
- generators = {g.cli_name: g for g in get_all_generators()}
1182
-
1183
- for cli_name, info in state["installed_skills"].items():
1184
- gen = generators.get(cli_name)
1185
- if gen:
1186
- paths = gen.install(commands, version)
1187
- info.update(
1188
- {
1189
- "paths": [str(p) for p in paths],
1190
- "version": version,
1191
- "commands_hash": _commands_hash(commands),
1192
- }
1193
- )
1176
+ Never changes the plugin command's exit code; a failure prints a
1177
+ warning on stderr.
1178
+ """
1179
+ from deepctl_core import skill_generator as sg
1194
1180
 
1195
- save_skills_state(state)
1196
- console.print("[dim]AI assistant skills updated[/dim]")
1197
- except Exception:
1198
- pass # Non-fatal
1181
+ try:
1182
+ state = sg.get_skills_state()
1183
+ names = {*state.get("skill_folders", {}), *state["installed_skills"]}
1184
+ if not state.get("auto_update", True):
1185
+ return
1186
+ plan = [
1187
+ (g, sg._ref_for(g.cli_name, state))
1188
+ for g in sg.get_all_generators()
1189
+ if g.cli_name in names and g.skills_root() is not None
1190
+ ]
1191
+ if not plan: # None recorded, or hint-only only: records untouched.
1192
+ return
1193
+ for _gen, _paths, leftover in sg.install_for(plan, since=state):
1194
+ if leftover:
1195
+ print_warning(escape(sg._msg("E12", staging=leftover)), stderr=True)
1196
+ except Exception as exc: # Non-fatal: the plugin operation succeeded.
1197
+ sg.warn_install_failure(
1198
+ "AI assistant skills were not updated",
1199
+ exc,
1200
+ "run 'dg skills update' to try again",
1201
+ )