skillup 0.7.0__tar.gz → 0.7.2__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.
Files changed (39) hide show
  1. {skillup-0.7.0 → skillup-0.7.2}/PKG-INFO +1 -1
  2. {skillup-0.7.0 → skillup-0.7.2}/pyproject.toml +1 -1
  3. {skillup-0.7.0 → skillup-0.7.2}/skillup/cli.py +15 -4
  4. {skillup-0.7.0 → skillup-0.7.2}/.github/workflows/ci.yml +0 -0
  5. {skillup-0.7.0 → skillup-0.7.2}/.github/workflows/docs.yml +0 -0
  6. {skillup-0.7.0 → skillup-0.7.2}/.github/workflows/publish.yml +0 -0
  7. {skillup-0.7.0 → skillup-0.7.2}/.gitignore +0 -0
  8. {skillup-0.7.0 → skillup-0.7.2}/.python-version +0 -0
  9. {skillup-0.7.0 → skillup-0.7.2}/LICENSE +0 -0
  10. {skillup-0.7.0 → skillup-0.7.2}/README.md +0 -0
  11. {skillup-0.7.0 → skillup-0.7.2}/assets/logo-wordmark.svg +0 -0
  12. {skillup-0.7.0 → skillup-0.7.2}/assets/logo.svg +0 -0
  13. {skillup-0.7.0 → skillup-0.7.2}/docs/assets/extra.css +0 -0
  14. {skillup-0.7.0 → skillup-0.7.2}/docs/assets/logo.svg +0 -0
  15. {skillup-0.7.0 → skillup-0.7.2}/docs/changelog.md +0 -0
  16. {skillup-0.7.0 → skillup-0.7.2}/docs/commands.md +0 -0
  17. {skillup-0.7.0 → skillup-0.7.2}/docs/development.md +0 -0
  18. {skillup-0.7.0 → skillup-0.7.2}/docs/index.md +0 -0
  19. {skillup-0.7.0 → skillup-0.7.2}/docs/lock-file.md +0 -0
  20. {skillup-0.7.0 → skillup-0.7.2}/docs/quickstart.md +0 -0
  21. {skillup-0.7.0 → skillup-0.7.2}/docs/skill-definition.md +0 -0
  22. {skillup-0.7.0 → skillup-0.7.2}/skillup/__init__.py +0 -0
  23. {skillup-0.7.0 → skillup-0.7.2}/skillup/_tree_ui.py +0 -0
  24. {skillup-0.7.0 → skillup-0.7.2}/skillup/azdevops.py +0 -0
  25. {skillup-0.7.0 → skillup-0.7.2}/skillup/github.py +0 -0
  26. {skillup-0.7.0 → skillup-0.7.2}/skillup/http.py +0 -0
  27. {skillup-0.7.0 → skillup-0.7.2}/skillup/install.py +0 -0
  28. {skillup-0.7.0 → skillup-0.7.2}/skillup/local.py +0 -0
  29. {skillup-0.7.0 → skillup-0.7.2}/skillup/lock.py +0 -0
  30. {skillup-0.7.0 → skillup-0.7.2}/skillup/settings.py +0 -0
  31. {skillup-0.7.0 → skillup-0.7.2}/tests/test_azdevops.py +0 -0
  32. {skillup-0.7.0 → skillup-0.7.2}/tests/test_cli.py +0 -0
  33. {skillup-0.7.0 → skillup-0.7.2}/tests/test_e2e.py +0 -0
  34. {skillup-0.7.0 → skillup-0.7.2}/tests/test_github_auth.py +0 -0
  35. {skillup-0.7.0 → skillup-0.7.2}/tests/test_install.py +0 -0
  36. {skillup-0.7.0 → skillup-0.7.2}/tests/test_migrate.py +0 -0
  37. {skillup-0.7.0 → skillup-0.7.2}/tests/test_sync.py +0 -0
  38. {skillup-0.7.0 → skillup-0.7.2}/uv.lock +0 -0
  39. {skillup-0.7.0 → skillup-0.7.2}/zensical.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skillup
3
- Version: 0.7.0
3
+ Version: 0.7.2
4
4
  Summary: A minimal CLI to manage agent skills from GitHub releases.
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.11
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "skillup"
7
- version = "0.7.0"
7
+ version = "0.7.2"
8
8
  description = "A minimal CLI to manage agent skills from GitHub releases."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -117,13 +117,14 @@ def add(
117
117
  skills: Optional[List[str]] = typer.Option(None, "--skill", "-s", help="Specific skill(s) to add (non-interactive)"),
118
118
  branch: Optional[str] = typer.Option(None, "--branch", "-b", help="Branch to install from instead of the latest release"),
119
119
  search: Optional[str] = typer.Option(None, "--search", "-f", help="Filter skills shown in the tree (matches skill name or path, case-insensitive)"),
120
+ all_skills: bool = typer.Option(False, "--all-skills", help="Install all available skills non-interactively"),
120
121
  ):
121
122
  """Add skills from a GitHub repository, Azure DevOps repository, or local path."""
122
123
  lock = load_lock()
123
124
  ensure_dirs()
124
125
 
125
126
  if is_local_path(repo):
126
- _add_local(repo, lock, skills, search)
127
+ _add_local(repo, lock, skills, search, all_skills)
127
128
  return
128
129
 
129
130
  lock_key, short_ref = _parse_repo_input(repo)
@@ -149,7 +150,12 @@ def add(
149
150
  repo_data = normalize_repo_data(lock["repos"].get(lock_key, {"skills": []}))
150
151
  installed_skills = set(repo_data["skills"])
151
152
 
152
- if skills:
153
+ if all_skills:
154
+ selected = [s for s in available_skills if s not in installed_skills]
155
+ if not selected:
156
+ console.print(f"[yellow]No new skills available to add from {short_ref}.[/yellow]")
157
+ return
158
+ elif skills:
153
159
  selected = [s for s in skills if s in available_skills and s not in installed_skills]
154
160
  invalid = [s for s in skills if s not in available_skills]
155
161
  already_installed = [s for s in skills if s in installed_skills]
@@ -193,7 +199,7 @@ def add(
193
199
  console.print(f"[green]Skills from {short_ref} installed successfully![/green]")
194
200
 
195
201
 
196
- def _add_local(repo: str, lock: dict, skills: Optional[List[str]], search: Optional[str]) -> None:
202
+ def _add_local(repo: str, lock: dict, skills: Optional[List[str]], search: Optional[str], all_skills: bool = False) -> None:
197
203
  local_path = resolve_local_path(repo)
198
204
  if not local_path.is_dir():
199
205
  console.print(f"[red]Local path does not exist or is not a directory: {local_path}[/red]")
@@ -206,7 +212,12 @@ def _add_local(repo: str, lock: dict, skills: Optional[List[str]], search: Optio
206
212
  repo_data = lock["repos"].get(lock_key, {"skills": [], "source": "local", "path": str(local_path)})
207
213
  installed_skills = set(repo_data.get("skills", []))
208
214
 
209
- if skills:
215
+ if all_skills:
216
+ selected = [s for s in available_skills if s not in installed_skills]
217
+ if not selected:
218
+ console.print(f"[yellow]No new skills available to add from {display}.[/yellow]")
219
+ return
220
+ elif skills:
210
221
  selected = [s for s in skills if s in available_skills and s not in installed_skills]
211
222
  invalid = [s for s in skills if s not in available_skills]
212
223
  already_installed = [s for s in skills if s in installed_skills]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes