mirror of
https://github.com/magnus919/agent-skills.git
synced 2026-09-11 19:47:12 +03:00
refactor(skills): drop -cli suffix from six consumer-API skills
Rename ghost-cli, jira-cli, jellyfin-cli, openlibrary-cli, tmdb-cli, and tempest-cli to ghost, jira, jellyfin, openlibrary, tmdb, and tempest via git mv. Rewrite frontmatter name fields to match new directories, rename bundled scripts preserving executable bits, update internal invocation strings and README quick-start examples, and relocate the jellyfin pytest suite to jellyfin/scripts/ with its SCRIPT constant now resolving to the renamed sibling script. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
parent
e10508b034
commit
dd97e846ec
@@ -16,7 +16,7 @@ When your agent loads this skill, it can **manage your Ghost CMS content** witho
|
||||
| Directory | Purpose |
|
||||
|-----------|---------|
|
||||
| `SKILL.md` | Complete command reference with setup and examples |
|
||||
| `scripts/ghost-cli` | CLI tool for Ghost Admin API operations |
|
||||
| `scripts/ghost` | CLI tool for Ghost Admin API operations |
|
||||
|
||||
## Quick Start
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
name: ghost-cli
|
||||
name: ghost
|
||||
description: Manage Ghost CMS content from the terminal — create and list posts, pages,
|
||||
and tags, and fetch site info via the Ghost Admin API (v5/v6). Use when the user
|
||||
asks about ghost, cms, blog, blogging, posts, pages, tags, publishing, or site configuration.
|
||||
@@ -12,7 +12,7 @@ metadata:
|
||||
sources: https://ghost.org/docs/admin-api/, https://ghost.org/docs/
|
||||
---
|
||||
|
||||
# ghost-cli — Ghost CMS from the Terminal
|
||||
# ghost — Ghost CMS from the Terminal
|
||||
|
||||
Manage content on a Ghost CMS site: view site info, list and create posts and pages, manage tags — all via the Ghost Admin API (v5/v6).
|
||||
|
||||
@@ -33,9 +33,9 @@ export GHOST_ADMIN_KEY="your-id:your-secret" # from Ghost Admin → Integ
|
||||
### site — Get site information
|
||||
|
||||
```bash
|
||||
ghost-cli site # show site title, URL, description
|
||||
ghost-cli --json site # machine-readable JSON
|
||||
ghost-cli --dry-run site # preview without API call
|
||||
ghost site # show site title, URL, description
|
||||
ghost --json site # machine-readable JSON
|
||||
ghost --dry-run site # preview without API call
|
||||
```
|
||||
|
||||
Shows: site title, URL, description.
|
||||
@@ -43,12 +43,12 @@ Shows: site title, URL, description.
|
||||
### posts — List blog posts
|
||||
|
||||
```bash
|
||||
ghost-cli posts # 20 most recent posts
|
||||
ghost-cli posts --limit 50 # more results
|
||||
ghost-cli posts --status published # only published posts
|
||||
ghost-cli posts --status draft # only draft posts
|
||||
ghost-cli posts --status scheduled # only scheduled posts
|
||||
ghost-cli posts --limit 10 --json # 10 most recent as JSON
|
||||
ghost posts # 20 most recent posts
|
||||
ghost posts --limit 50 # more results
|
||||
ghost posts --status published # only published posts
|
||||
ghost posts --status draft # only draft posts
|
||||
ghost posts --status scheduled # only scheduled posts
|
||||
ghost posts --limit 10 --json # 10 most recent as JSON
|
||||
```
|
||||
|
||||
Shows: title, status, slug, and last-updated date for each post.
|
||||
@@ -56,12 +56,12 @@ Shows: title, status, slug, and last-updated date for each post.
|
||||
### create-post — Create a new blog post
|
||||
|
||||
```bash
|
||||
ghost-cli create-post --title "My First Post" # draft, no HTML
|
||||
ghost-cli create-post --title "Hello World" --html "<p>Hello!</p>" # with HTML content
|
||||
ghost-cli create-post --title "Ready" --html "<p>Published</p>" --status published # publish immediately
|
||||
ghost-cli create-post --title "Scheduled" --html "<p>Later</p>" --status scheduled # schedule
|
||||
ghost-cli create-post --title "Custom Slug" --slug "my-custom-url" # custom URL slug
|
||||
ghost-cli create-post --title "Draft" --dry-run # preview without creating
|
||||
ghost create-post --title "My First Post" # draft, no HTML
|
||||
ghost create-post --title "Hello World" --html "<p>Hello!</p>" # with HTML content
|
||||
ghost create-post --title "Ready" --html "<p>Published</p>" --status published # publish immediately
|
||||
ghost create-post --title "Scheduled" --html "<p>Later</p>" --status scheduled # schedule
|
||||
ghost create-post --title "Custom Slug" --slug "my-custom-url" # custom URL slug
|
||||
ghost create-post --title "Draft" --dry-run # preview without creating
|
||||
```
|
||||
|
||||
Creates the post and returns its title, slug, and status.
|
||||
@@ -69,9 +69,9 @@ Creates the post and returns its title, slug, and status.
|
||||
### pages — List pages
|
||||
|
||||
```bash
|
||||
ghost-cli pages # 20 most recent pages
|
||||
ghost-cli pages --limit 50 # more results
|
||||
ghost-cli pages --json # machine-readable JSON
|
||||
ghost pages # 20 most recent pages
|
||||
ghost pages --limit 50 # more results
|
||||
ghost pages --json # machine-readable JSON
|
||||
```
|
||||
|
||||
Shows: title, status, slug, and last-updated date for each page.
|
||||
@@ -79,9 +79,9 @@ Shows: title, status, slug, and last-updated date for each page.
|
||||
### tags — List tags
|
||||
|
||||
```bash
|
||||
ghost-cli tags # 50 tags with post counts
|
||||
ghost-cli tags --limit 100 # more results
|
||||
ghost-cli tags --json # machine-readable JSON
|
||||
ghost tags # 50 tags with post counts
|
||||
ghost tags --limit 100 # more results
|
||||
ghost tags --json # machine-readable JSON
|
||||
```
|
||||
|
||||
Shows: tag name, slug, and number of posts using each tag.
|
||||
@@ -91,11 +91,11 @@ Shows: tag name, slug, and number of posts using each tag.
|
||||
These flags work anywhere in the command — before or after the subcommand:
|
||||
|
||||
```bash
|
||||
ghost-cli --json posts # JSON output
|
||||
ghost-cli posts --json # same result, after subcommand
|
||||
ghost-cli --dry-run create-post --title "Test" # preview without API call
|
||||
ghost-cli --quiet posts # suppress diagnostic output
|
||||
ghost-cli --verbose site # verbose logging
|
||||
ghost --json posts # JSON output
|
||||
ghost posts --json # same result, after subcommand
|
||||
ghost --dry-run create-post --title "Test" # preview without API call
|
||||
ghost --quiet posts # suppress diagnostic output
|
||||
ghost --verbose site # verbose logging
|
||||
```
|
||||
|
||||
| Flag | Effect |
|
||||
@@ -119,6 +119,6 @@ ghost-cli --verbose site # verbose logging
|
||||
|
||||
## References
|
||||
|
||||
- [scripts/ghost-cli](scripts/ghost-cli) — The CLI binary. Built following the cli-builder patterns: non-interactive, `--json`, `--dry-run`, `--quiet`, `--verbose`, dual-output via `emit()`, lazy auth, structured logging.
|
||||
- [scripts/ghost](scripts/ghost) — The CLI binary. Built following the cli-builder patterns: non-interactive, `--json`, `--dry-run`, `--quiet`, `--verbose`, dual-output via `emit()`, lazy auth, structured logging.
|
||||
- [Ghost Admin API Docs](https://ghost.org/docs/admin-api/) — Official Ghost Admin API documentation.
|
||||
- [Ghost Integrations](https://ghost.org/docs/integrations/) — How to create Custom Integrations and get your Admin API key.
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""ghost-cli — Ghost CMS from the terminal.
|
||||
"""ghost — Ghost CMS from the terminal.
|
||||
|
||||
Manage content on a Ghost CMS site: create and edit posts and pages,
|
||||
manage tags, and configure metadata. Requires GHOST_URL and GHOST_ADMIN_KEY.
|
||||
@@ -204,7 +204,7 @@ def fmt_post(p):
|
||||
|
||||
|
||||
def cmd_posts(client, args):
|
||||
p = argparse.ArgumentParser(prog="ghost-cli posts")
|
||||
p = argparse.ArgumentParser(prog="ghost posts")
|
||||
p.add_argument("--limit", type=int, default=20)
|
||||
p.add_argument("--status", choices=["published", "draft", "scheduled"])
|
||||
parsed, _ = p.parse_known_args(args)
|
||||
@@ -224,7 +224,7 @@ def cmd_posts(client, args):
|
||||
|
||||
|
||||
def cmd_create_post(client, args):
|
||||
p = argparse.ArgumentParser(prog="ghost-cli posts create")
|
||||
p = argparse.ArgumentParser(prog="ghost posts create")
|
||||
p.add_argument("--title", required=True)
|
||||
p.add_argument("--html", default="")
|
||||
p.add_argument("--status", default="draft", choices=["draft", "published", "scheduled"])
|
||||
@@ -245,7 +245,7 @@ def cmd_create_post(client, args):
|
||||
|
||||
|
||||
def cmd_pages(client, args):
|
||||
p = argparse.ArgumentParser(prog="ghost-cli pages")
|
||||
p = argparse.ArgumentParser(prog="ghost pages")
|
||||
p.add_argument("--limit", type=int, default=20)
|
||||
parsed, _ = p.parse_known_args(args)
|
||||
|
||||
@@ -262,7 +262,7 @@ def cmd_pages(client, args):
|
||||
|
||||
|
||||
def cmd_tags(client, args):
|
||||
p = argparse.ArgumentParser(prog="ghost-cli tags")
|
||||
p = argparse.ArgumentParser(prog="ghost tags")
|
||||
p.add_argument("--limit", type=int, default=50)
|
||||
parsed, _ = p.parse_known_args(args)
|
||||
|
||||
@@ -302,7 +302,7 @@ def main():
|
||||
if GLOBAL_FLAGS.get("json", False):
|
||||
warnings.simplefilter("ignore")
|
||||
|
||||
parser = argparse.ArgumentParser(prog="ghost-cli", description="Ghost CMS CLI.",
|
||||
parser = argparse.ArgumentParser(prog="ghost", description="Ghost CMS CLI.",
|
||||
epilog="Set GHOST_URL and GHOST_ADMIN_KEY. Key format: id:secret from Integrations.")
|
||||
sub = parser.add_subparsers(dest="command")
|
||||
sub.add_parser("site", help="Site info")
|
||||
@@ -17,12 +17,12 @@ When your agent loads this skill, it can **navigate your home media server** wit
|
||||
| Directory | Purpose |
|
||||
|-----------|---------|
|
||||
| `SKILL.md` | Complete command reference with setup and examples |
|
||||
| `scripts/jellyfin-cli` | CLI tool for Jellyfin API operations |
|
||||
| `scripts/jellyfin` | CLI tool for Jellyfin API operations |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
scripts/jellyfin-cli --help
|
||||
scripts/jellyfin --help
|
||||
export JELLYFIN_URL="http://your-server:8096"
|
||||
export JELLYFIN_API_KEY="your-api-key"
|
||||
export JELLYFIN_USER_ID="your-jellyfin-user-id" # required by recent, next-up, and item
|
||||
@@ -31,8 +31,8 @@ export JELLYFIN_USER_ID="your-jellyfin-user-id" # required by recent, next-up, a
|
||||
API key from Dashboard → API Keys in the Jellyfin admin panel.
|
||||
|
||||
```bash
|
||||
scripts/jellyfin-cli search --query "dune" --type Movie
|
||||
scripts/jellyfin-cli next-up --limit 5
|
||||
scripts/jellyfin search --query "dune" --type Movie
|
||||
scripts/jellyfin next-up --limit 5
|
||||
```
|
||||
|
||||
## Triggers
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
name: jellyfin-cli
|
||||
name: jellyfin
|
||||
description: Query your Jellyfin media server from the terminal — recently added media,
|
||||
search, item details, next-up episodes, library browsing, server info, and stats. Use
|
||||
when the user asks about Jellyfin, media server, movies, TV shows, next episodes, or
|
||||
@@ -14,7 +14,7 @@ metadata:
|
||||
sources: https://jellyfin.org/docs/general/clients/api, https://jellyfin.org/downloads
|
||||
---
|
||||
|
||||
# jellyfin-cli — Jellyfin Media Server from the Terminal
|
||||
# jellyfin — Jellyfin Media Server from the Terminal
|
||||
|
||||
Query recently added movies and TV episodes, search and inspect media, browse libraries, see next-up episodes, check server info, and view library statistics — all from your Jellyfin server's REST API.
|
||||
|
||||
@@ -30,16 +30,16 @@ export JELLYFIN_API_KEY="your-api-key-here"
|
||||
export JELLYFIN_USER_ID="your-jellyfin-user-id" # required by recent, next-up, and item
|
||||
```
|
||||
|
||||
Run the bundled CLI as `scripts/jellyfin-cli`. `--help` and `--dry-run` work without credentials.
|
||||
Run the bundled CLI as `scripts/jellyfin`. `--help` and `--dry-run` work without credentials.
|
||||
|
||||
## Essential Commands
|
||||
|
||||
### info — Server information
|
||||
|
||||
```bash
|
||||
scripts/jellyfin-cli info # server name, version, OS, user count
|
||||
scripts/jellyfin-cli info --json # machine-readable
|
||||
scripts/jellyfin-cli --dry-run info # preview API requests
|
||||
scripts/jellyfin info # server name, version, OS, user count
|
||||
scripts/jellyfin info --json # machine-readable
|
||||
scripts/jellyfin --dry-run info # preview API requests
|
||||
```
|
||||
|
||||
Shows: server name, version, operating system, number of users.
|
||||
@@ -47,13 +47,13 @@ Shows: server name, version, operating system, number of users.
|
||||
### recent — Recently added media
|
||||
|
||||
```bash
|
||||
scripts/jellyfin-cli recent # last 10 items added
|
||||
scripts/jellyfin-cli recent --limit 20 # more results
|
||||
scripts/jellyfin-cli recent --movies # only recently added movies
|
||||
scripts/jellyfin-cli recent --episodes # only recently added episodes
|
||||
scripts/jellyfin-cli recent --user-id USER_ID # override JELLYFIN_USER_ID
|
||||
scripts/jellyfin-cli recent --movies --limit 5 # top 5 recently added movies
|
||||
scripts/jellyfin-cli recent --json # machine-readable
|
||||
scripts/jellyfin recent # last 10 items added
|
||||
scripts/jellyfin recent --limit 20 # more results
|
||||
scripts/jellyfin recent --movies # only recently added movies
|
||||
scripts/jellyfin recent --episodes # only recently added episodes
|
||||
scripts/jellyfin recent --user-id USER_ID # override JELLYFIN_USER_ID
|
||||
scripts/jellyfin recent --movies --limit 5 # top 5 recently added movies
|
||||
scripts/jellyfin recent --json # machine-readable
|
||||
```
|
||||
|
||||
Uses Jellyfin's current `/Items/Latest` endpoint. `--movies` and `--episodes` send `includeItemTypes` to the server, so the requested limit applies to the selected media type. Shows: name, type (Movie/Episode), production year, series name (for episodes), date added.
|
||||
@@ -61,11 +61,11 @@ Uses Jellyfin's current `/Items/Latest` endpoint. `--movies` and `--episodes` se
|
||||
### search — Search your media library
|
||||
|
||||
```bash
|
||||
scripts/jellyfin-cli search --query "dune" # search everything
|
||||
scripts/jellyfin-cli search --query "dune" --type Movie # movies only
|
||||
scripts/jellyfin-cli search --query "star trek" --type Series,Episode
|
||||
scripts/jellyfin-cli search --query "inception" --limit 5 # top 5 results
|
||||
scripts/jellyfin-cli search --query "dune" --json # machine-readable
|
||||
scripts/jellyfin search --query "dune" # search everything
|
||||
scripts/jellyfin search --query "dune" --type Movie # movies only
|
||||
scripts/jellyfin search --query "star trek" --type Series,Episode
|
||||
scripts/jellyfin search --query "inception" --limit 5 # top 5 results
|
||||
scripts/jellyfin search --query "dune" --json # machine-readable
|
||||
```
|
||||
|
||||
The `--type` flag accepts a comma-separated list of item types (e.g. `Movie,Series,Episode`).
|
||||
@@ -73,13 +73,13 @@ The `--type` flag accepts a comma-separated list of item types (e.g. `Movie,Seri
|
||||
### Navigation — Inspect media and browse libraries
|
||||
|
||||
```bash
|
||||
scripts/jellyfin-cli search --query "dune" --type Movie # find an item ID
|
||||
scripts/jellyfin-cli item --id ITEM_ID # inspect that item
|
||||
scripts/jellyfin-cli libraries # find a library ID
|
||||
scripts/jellyfin-cli browse --library-id LIBRARY_ID --type Movie --limit 20
|
||||
scripts/jellyfin-cli browse --library-id LIBRARY_ID --start-index 20
|
||||
scripts/jellyfin-cli next-up --limit 10 # next episodes for JELLYFIN_USER_ID
|
||||
scripts/jellyfin-cli next-up --user-id USER_ID --json
|
||||
scripts/jellyfin search --query "dune" --type Movie # find an item ID
|
||||
scripts/jellyfin item --id ITEM_ID # inspect that item
|
||||
scripts/jellyfin libraries # find a library ID
|
||||
scripts/jellyfin browse --library-id LIBRARY_ID --type Movie --limit 20
|
||||
scripts/jellyfin browse --library-id LIBRARY_ID --start-index 20
|
||||
scripts/jellyfin next-up --limit 10 # next episodes for JELLYFIN_USER_ID
|
||||
scripts/jellyfin next-up --user-id USER_ID --json
|
||||
```
|
||||
|
||||
Use `search -> item` to look up a result's metadata, and `libraries -> browse` to page through a collection. `next-up` returns the next unwatched episodes for the selected user. `item` and `next-up` require `JELLYFIN_USER_ID` or `--user-id`; all three commands are read-only.
|
||||
@@ -87,8 +87,8 @@ Use `search -> item` to look up a result's metadata, and `libraries -> browse` t
|
||||
### libraries — List media libraries
|
||||
|
||||
```bash
|
||||
scripts/jellyfin-cli libraries # all configured libraries
|
||||
scripts/jellyfin-cli libraries --json # machine-readable
|
||||
scripts/jellyfin libraries # all configured libraries
|
||||
scripts/jellyfin libraries --json # machine-readable
|
||||
```
|
||||
|
||||
Shows: library name, collection type (movies, tvshows, music, etc.), library ID.
|
||||
@@ -96,8 +96,8 @@ Shows: library name, collection type (movies, tvshows, music, etc.), library ID.
|
||||
### stats — Library statistics
|
||||
|
||||
```bash
|
||||
scripts/jellyfin-cli stats # movie, series, episode, song counts
|
||||
scripts/jellyfin-cli stats --json # machine-readable
|
||||
scripts/jellyfin stats # movie, series, episode, song counts
|
||||
scripts/jellyfin stats --json # machine-readable
|
||||
```
|
||||
|
||||
Shows: total count of movies, series, episodes, and songs in the library.
|
||||
@@ -107,9 +107,9 @@ Shows: total count of movies, series, episodes, and songs in the library.
|
||||
These flags work anywhere in the command — before or after the subcommand:
|
||||
|
||||
```bash
|
||||
scripts/jellyfin-cli --json recent --limit 5 # JSON output
|
||||
scripts/jellyfin-cli recent --limit 5 --json # same result, after subcommand
|
||||
scripts/jellyfin-cli --dry-run search --query "dune" # preview request without API call
|
||||
scripts/jellyfin --json recent --limit 5 # JSON output
|
||||
scripts/jellyfin recent --limit 5 --json # same result, after subcommand
|
||||
scripts/jellyfin --dry-run search --query "dune" # preview request without API call
|
||||
```
|
||||
|
||||
| Flag | Effect |
|
||||
@@ -129,6 +129,6 @@ scripts/jellyfin-cli --dry-run search --query "dune" # preview request wit
|
||||
|
||||
## References
|
||||
|
||||
- [scripts/jellyfin-cli](scripts/jellyfin-cli) — The bundled read-only CLI binary with `--json`, `--dry-run`, and lazy authentication.
|
||||
- [scripts/jellyfin](scripts/jellyfin) — The bundled read-only CLI binary with `--json`, `--dry-run`, and lazy authentication.
|
||||
- [Jellyfin API Docs](https://jellyfin.org/docs/general/clients/api) — Official API documentation.
|
||||
- [Jellyfin Downloads](https://jellyfin.org/downloads) — Server download and setup guide.
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""jellyfin-cli — Jellyfin media server from the terminal.
|
||||
"""jellyfin — Jellyfin media server from the terminal.
|
||||
|
||||
Query recently added media, search your library, browse by collection,
|
||||
and check server status. Requires JELLYFIN_URL and JELLYFIN_API_KEY.
|
||||
@@ -179,7 +179,7 @@ def cmd_info(client, args):
|
||||
|
||||
|
||||
def cmd_recent(client, args):
|
||||
p = argparse.ArgumentParser(prog="jellyfin-cli recent")
|
||||
p = argparse.ArgumentParser(prog="jellyfin recent")
|
||||
p.add_argument("--limit", type=int, default=10)
|
||||
media_type = p.add_mutually_exclusive_group()
|
||||
media_type.add_argument("--movies", action="store_true")
|
||||
@@ -221,7 +221,7 @@ def cmd_recent(client, args):
|
||||
|
||||
|
||||
def cmd_search(client, args):
|
||||
p = argparse.ArgumentParser(prog="jellyfin-cli search")
|
||||
p = argparse.ArgumentParser(prog="jellyfin search")
|
||||
p.add_argument("--query", "-q", required=True)
|
||||
p.add_argument("--type", help="Comma-separated types (Movie,Series,Episode)")
|
||||
p.add_argument("--limit", type=int, default=20)
|
||||
@@ -254,7 +254,7 @@ def cmd_search(client, args):
|
||||
|
||||
|
||||
def cmd_next_up(client, args):
|
||||
p = argparse.ArgumentParser(prog="jellyfin-cli next-up")
|
||||
p = argparse.ArgumentParser(prog="jellyfin next-up")
|
||||
p.add_argument("--user-id", default=ENV_USER_ID)
|
||||
p.add_argument("--limit", type=int, default=10)
|
||||
parsed, _ = p.parse_known_args(args)
|
||||
@@ -276,7 +276,7 @@ def cmd_next_up(client, args):
|
||||
|
||||
|
||||
def cmd_item(client, args):
|
||||
p = argparse.ArgumentParser(prog="jellyfin-cli item")
|
||||
p = argparse.ArgumentParser(prog="jellyfin item")
|
||||
p.add_argument("--id", required=True)
|
||||
p.add_argument("--user-id", default=ENV_USER_ID)
|
||||
parsed, _ = p.parse_known_args(args)
|
||||
@@ -295,7 +295,7 @@ def cmd_item(client, args):
|
||||
|
||||
|
||||
def cmd_browse(client, args):
|
||||
p = argparse.ArgumentParser(prog="jellyfin-cli browse")
|
||||
p = argparse.ArgumentParser(prog="jellyfin browse")
|
||||
p.add_argument("--library-id", required=True)
|
||||
p.add_argument("--type")
|
||||
p.add_argument("--limit", type=int, default=50)
|
||||
@@ -365,35 +365,35 @@ def main():
|
||||
if GLOBAL_FLAGS.get("json", False):
|
||||
warnings.simplefilter("ignore")
|
||||
|
||||
parser = argparse.ArgumentParser(prog="jellyfin-cli", description="Jellyfin media server CLI.",
|
||||
epilog="Example: jellyfin-cli search --query dune")
|
||||
parser = argparse.ArgumentParser(prog="jellyfin", description="Jellyfin media server CLI.",
|
||||
epilog="Example: jellyfin search --query dune")
|
||||
parser.add_argument("--json", action="store_true", help="Output machine-readable JSON")
|
||||
parser.add_argument("--dry-run", action="store_true", help="Preview API requests without network access")
|
||||
sub = parser.add_subparsers(dest="command")
|
||||
sub.add_parser("info", help="Server info", description="Show Jellyfin server details.", epilog="Example: jellyfin-cli info")
|
||||
re = sub.add_parser("recent", help="Recently added", description="Show recently added movies or episodes.", epilog="Example: jellyfin-cli recent --movies --limit 5")
|
||||
sub.add_parser("info", help="Server info", description="Show Jellyfin server details.", epilog="Example: jellyfin info")
|
||||
re = sub.add_parser("recent", help="Recently added", description="Show recently added movies or episodes.", epilog="Example: jellyfin recent --movies --limit 5")
|
||||
re.add_argument("--limit", type=int, default=10, help="Maximum items to return (default: 10)")
|
||||
media_type = re.add_mutually_exclusive_group()
|
||||
media_type.add_argument("--movies", action="store_true", help="Show only movies")
|
||||
media_type.add_argument("--episodes", action="store_true", help="Show only episodes")
|
||||
re.add_argument("--user-id", help="Jellyfin user ID (default: JELLYFIN_USER_ID)")
|
||||
se = sub.add_parser("search", help="Search media", description="Search the Jellyfin media library.", epilog="Example: jellyfin-cli search --query dune --type Movie")
|
||||
se = sub.add_parser("search", help="Search media", description="Search the Jellyfin media library.", epilog="Example: jellyfin search --query dune --type Movie")
|
||||
se.add_argument("--query", "-q", required=True, help="Text to search for")
|
||||
se.add_argument("--type", help="Comma-separated item types, such as Movie,Series")
|
||||
se.add_argument("--limit", type=int, default=20, help="Maximum results to return (default: 20)")
|
||||
nu = sub.add_parser("next-up", help="Next unwatched episodes", description="Show the next unwatched episodes for a Jellyfin user.", epilog="Example: jellyfin-cli next-up --user-id USER_ID --limit 5")
|
||||
nu = sub.add_parser("next-up", help="Next unwatched episodes", description="Show the next unwatched episodes for a Jellyfin user.", epilog="Example: jellyfin next-up --user-id USER_ID --limit 5")
|
||||
nu.add_argument("--user-id", help="Jellyfin user ID (default: JELLYFIN_USER_ID)")
|
||||
nu.add_argument("--limit", type=int, default=10, help="Maximum episodes to return (default: 10)")
|
||||
it = sub.add_parser("item", help="Show item details", description="Show metadata for one Jellyfin library item.", epilog="Example: jellyfin-cli item --id ITEM_ID --user-id USER_ID")
|
||||
it = sub.add_parser("item", help="Show item details", description="Show metadata for one Jellyfin library item.", epilog="Example: jellyfin item --id ITEM_ID --user-id USER_ID")
|
||||
it.add_argument("--id", required=True, help="Jellyfin item ID")
|
||||
it.add_argument("--user-id", help="Jellyfin user ID (default: JELLYFIN_USER_ID)")
|
||||
br = sub.add_parser("browse", help="Browse a library", description="List items in a Jellyfin media library.", epilog="Example: jellyfin-cli browse --library-id LIBRARY_ID --type Movie --limit 20")
|
||||
br = sub.add_parser("browse", help="Browse a library", description="List items in a Jellyfin media library.", epilog="Example: jellyfin browse --library-id LIBRARY_ID --type Movie --limit 20")
|
||||
br.add_argument("--library-id", required=True, help="Jellyfin library ID")
|
||||
br.add_argument("--type", help="Comma-separated item types, such as Movie,Series")
|
||||
br.add_argument("--limit", type=int, default=50, help="Maximum items to return (default: 50)")
|
||||
br.add_argument("--start-index", type=int, default=0, help="Zero-based result offset (default: 0)")
|
||||
sub.add_parser("libraries", help="List libraries", description="List configured media libraries.", epilog="Example: jellyfin-cli libraries")
|
||||
sub.add_parser("stats", help="Library statistics", description="Show media library item counts.", epilog="Example: jellyfin-cli stats")
|
||||
sub.add_parser("libraries", help="List libraries", description="List configured media libraries.", epilog="Example: jellyfin libraries")
|
||||
sub.add_parser("stats", help="Library statistics", description="Show media library item counts.", epilog="Example: jellyfin stats")
|
||||
|
||||
args = parser.parse_args(filtered_argv[1:])
|
||||
if not args.command:
|
||||
@@ -8,7 +8,7 @@ import subprocess
|
||||
import unittest
|
||||
|
||||
|
||||
SCRIPT = pathlib.Path(__file__).parents[1] / "scripts" / "jellyfin-cli"
|
||||
SCRIPT = pathlib.Path(__file__).resolve().parent / "jellyfin"
|
||||
LOADER = importlib.machinery.SourceFileLoader("jellyfin_cli", str(SCRIPT))
|
||||
SPEC = importlib.util.spec_from_loader(LOADER.name, LOADER)
|
||||
jellyfin_cli = importlib.util.module_from_spec(SPEC)
|
||||
@@ -18,7 +18,7 @@ When your agent loads this skill, it can **manage your entire Jira workflow** wi
|
||||
| Directory | Purpose |
|
||||
|-----------|---------|
|
||||
| `SKILL.md` | Complete command reference with setup and examples |
|
||||
| `scripts/jira-cli` | CLI tool for Jira REST API v3 |
|
||||
| `scripts/jira` | CLI tool for Jira REST API v3 |
|
||||
|
||||
## Quick Start
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
name: jira-cli
|
||||
name: jira
|
||||
description: 'Interact with Atlassian Jira from the terminal: search issues, view
|
||||
details, create issues, add comments, list projects, and transition status. Use
|
||||
when the user mentions Jira, a ticket key (e.g. PROJ-123), or asks about issues,
|
||||
@@ -13,7 +13,7 @@ metadata:
|
||||
sources: https://developer.atlassian.com/cloud/jira/platform/rest/v3/, https://id.atlassian.com/manage/api-tokens
|
||||
---
|
||||
|
||||
# jira-cli — Jira Issue Tracker from the Terminal
|
||||
# jira — Jira Issue Tracker from the Terminal
|
||||
|
||||
Interact with Atlassian Jira Cloud via the REST API v3. Search issues, view details, create issues, add comments, list projects, and transition status.
|
||||
|
||||
@@ -35,17 +35,17 @@ export JIRA_SERVER="https://your-domain.atlassian.net" # defaults to this forma
|
||||
### me — Current user profile
|
||||
|
||||
```bash
|
||||
jira-cli me # your account info
|
||||
jira-cli me --json # machine-readable
|
||||
jira me # your account info
|
||||
jira me --json # machine-readable
|
||||
```
|
||||
|
||||
### list — Search issues
|
||||
|
||||
```bash
|
||||
jira-cli list # recent issues
|
||||
jira-cli list --project PROJ # by project
|
||||
jira-cli list --jql 'assignee=currentuser() AND status=Open' # custom JQL
|
||||
jira-cli list --project PROJ --max 5 --json # top 5 as JSON
|
||||
jira list # recent issues
|
||||
jira list --project PROJ # by project
|
||||
jira list --jql 'assignee=currentuser() AND status=Open' # custom JQL
|
||||
jira list --project PROJ --max 5 --json # top 5 as JSON
|
||||
```
|
||||
|
||||
The `--jql` flag accepts any valid JQL. The `--project` flag is a shortcut for `project=KEY`.
|
||||
@@ -53,8 +53,8 @@ The `--jql` flag accepts any valid JQL. The `--project` flag is a shortcut for `
|
||||
### view — Issue details
|
||||
|
||||
```bash
|
||||
jira-cli view PROJ-123 # full details
|
||||
jira-cli view PROJ-123 --json # machine-readable
|
||||
jira view PROJ-123 # full details
|
||||
jira view PROJ-123 --json # machine-readable
|
||||
```
|
||||
|
||||
Shows: summary, type, status, priority, assignee, reporter, timestamps, and description (plain text extracted from Atlassian Document Format).
|
||||
@@ -62,33 +62,33 @@ Shows: summary, type, status, priority, assignee, reporter, timestamps, and desc
|
||||
### projects — List projects
|
||||
|
||||
```bash
|
||||
jira-cli projects # all accessible projects
|
||||
jira-cli projects --json # machine-readable
|
||||
jira projects # all accessible projects
|
||||
jira projects --json # machine-readable
|
||||
```
|
||||
|
||||
### create — Create an issue
|
||||
|
||||
```bash
|
||||
jira-cli create --project PROJ --summary "Fix login bug" # Task (default)
|
||||
jira-cli create --project PROJ --summary "Crash on startup" --type Bug
|
||||
jira-cli create --project PROJ --summary "Add dark mode" --type Story --priority High
|
||||
jira-cli create --project PROJ --summary "Test" --dry-run # preview
|
||||
jira create --project PROJ --summary "Fix login bug" # Task (default)
|
||||
jira create --project PROJ --summary "Crash on startup" --type Bug
|
||||
jira create --project PROJ --summary "Add dark mode" --type Story --priority High
|
||||
jira create --project PROJ --summary "Test" --dry-run # preview
|
||||
```
|
||||
|
||||
### comment — Add a comment
|
||||
|
||||
```bash
|
||||
jira-cli comment PROJ-123 -m "Fixed in latest build" # add comment
|
||||
jira-cli comment PROJ-123 -m "Looking into it" --dry-run
|
||||
jira comment PROJ-123 -m "Fixed in latest build" # add comment
|
||||
jira comment PROJ-123 -m "Looking into it" --dry-run
|
||||
```
|
||||
|
||||
### transition — Change issue status
|
||||
|
||||
```bash
|
||||
jira-cli transition PROJ-123 --to "In Progress" # by name
|
||||
jira-cli transition PROJ-123 --to "Done" # by name
|
||||
jira-cli transition PROJ-123 --to "31" # by ID
|
||||
jira-cli transition PROJ-123 --to "In Review" --dry-run
|
||||
jira transition PROJ-123 --to "In Progress" # by name
|
||||
jira transition PROJ-123 --to "Done" # by name
|
||||
jira transition PROJ-123 --to "31" # by ID
|
||||
jira transition PROJ-123 --to "In Review" --dry-run
|
||||
```
|
||||
|
||||
The CLI looks up available transitions for the issue and matches by name or ID. If the transition doesn't exist, it shows available options.
|
||||
@@ -98,10 +98,10 @@ The CLI looks up available transitions for the issue and matches by name or ID.
|
||||
All flags work in any position:
|
||||
|
||||
```bash
|
||||
jira-cli --json list --project PROJ # flag before subcommand
|
||||
jira-cli list --project PROJ --json # flag after subcommand
|
||||
jira-cli --dry-run create --project PROJ --summary "Test" # preview
|
||||
jira-cli --quiet list # suppress non-essential output
|
||||
jira --json list --project PROJ # flag before subcommand
|
||||
jira list --project PROJ --json # flag after subcommand
|
||||
jira --dry-run create --project PROJ --summary "Test" # preview
|
||||
jira --quiet list # suppress non-essential output
|
||||
```
|
||||
|
||||
## Known Gotchas
|
||||
@@ -114,6 +114,6 @@ jira-cli --quiet list # suppress non-essential output
|
||||
|
||||
## References
|
||||
|
||||
- [scripts/jira-cli](scripts/jira-cli) — The CLI binary. Built following the cli-builder patterns: non-interactive, `--json`, `--dry-run`, `--quiet`, `--verbose`, dual-output via `emit()`, lazy auth, structured logging.
|
||||
- [scripts/jira](scripts/jira) — The CLI binary. Built following the cli-builder patterns: non-interactive, `--json`, `--dry-run`, `--quiet`, `--verbose`, dual-output via `emit()`, lazy auth, structured logging.
|
||||
- [Jira REST API v3 docs](https://developer.atlassian.com/cloud/jira/platform/rest/v3/) — Official API reference.
|
||||
- [API Token Management](https://id.atlassian.com/manage/api-tokens) — Generate and revoke tokens.
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""jira-cli — Jira issue tracker from the terminal.
|
||||
"""jira — Jira issue tracker from the terminal.
|
||||
|
||||
Interact with Atlassian Jira Cloud via the REST API v3.
|
||||
Requires JIRA_EMAIL and JIRA_API_TOKEN env vars (token from
|
||||
@@ -234,7 +234,7 @@ def cmd_me(client: JiraClient, args: List[str]) -> None:
|
||||
|
||||
|
||||
def cmd_list(client: JiraClient, args: List[str]) -> None:
|
||||
parser = argparse.ArgumentParser(prog="jira-cli list")
|
||||
parser = argparse.ArgumentParser(prog="jira list")
|
||||
parser.add_argument("--jql", default="", help="JQL query (default: recent issues)")
|
||||
parser.add_argument("--max", type=int, default=20, help="Max results (default: 20)")
|
||||
parser.add_argument("--project", help="Shortcut: filter by project key")
|
||||
@@ -282,7 +282,7 @@ def cmd_list(client: JiraClient, args: List[str]) -> None:
|
||||
|
||||
|
||||
def cmd_view(client: JiraClient, args: List[str]) -> None:
|
||||
parser = argparse.ArgumentParser(prog="jira-cli view")
|
||||
parser = argparse.ArgumentParser(prog="jira view")
|
||||
parser.add_argument("issue_key", help="Issue key (e.g. PROJ-123)")
|
||||
parsed, _ = parser.parse_known_args(args)
|
||||
|
||||
@@ -377,7 +377,7 @@ def cmd_projects(client: JiraClient, args: List[str]) -> None:
|
||||
|
||||
|
||||
def cmd_create(client: JiraClient, args: List[str]) -> None:
|
||||
parser = argparse.ArgumentParser(prog="jira-cli create")
|
||||
parser = argparse.ArgumentParser(prog="jira create")
|
||||
parser.add_argument("--project", required=True, help="Project key (e.g. PROJ)")
|
||||
parser.add_argument("--summary", required=True, help="Issue summary/title")
|
||||
parser.add_argument("--type", default="Task", help="Issue type (Task, Bug, Story, etc.)")
|
||||
@@ -407,7 +407,7 @@ def cmd_create(client: JiraClient, args: List[str]) -> None:
|
||||
|
||||
|
||||
def cmd_comment(client: JiraClient, args: List[str]) -> None:
|
||||
parser = argparse.ArgumentParser(prog="jira-cli comment")
|
||||
parser = argparse.ArgumentParser(prog="jira comment")
|
||||
parser.add_argument("issue_key", help="Issue key (e.g. PROJ-123)")
|
||||
parser.add_argument("--body", "-m", required=True, help="Comment body text")
|
||||
parsed, _ = parser.parse_known_args(args)
|
||||
@@ -426,7 +426,7 @@ def cmd_comment(client: JiraClient, args: List[str]) -> None:
|
||||
|
||||
|
||||
def cmd_transition(client: JiraClient, args: List[str]) -> None:
|
||||
parser = argparse.ArgumentParser(prog="jira-cli transition")
|
||||
parser = argparse.ArgumentParser(prog="jira transition")
|
||||
parser.add_argument("issue_key", help="Issue key (e.g. PROJ-123)")
|
||||
parser.add_argument("--to", required=True, help="Transition by name or ID")
|
||||
parsed, _ = parser.parse_known_args(args)
|
||||
@@ -474,9 +474,9 @@ def main() -> None:
|
||||
warnings.simplefilter("ignore")
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="jira-cli",
|
||||
prog="jira",
|
||||
description="Jira issue tracker from the terminal.",
|
||||
epilog="Global flags work anywhere: jira-cli --json list --jql 'project=PROJ'"
|
||||
epilog="Global flags work anywhere: jira --json list --jql 'project=PROJ'"
|
||||
)
|
||||
sub = parser.add_subparsers(dest="command", help="Available commands")
|
||||
|
||||
@@ -17,14 +17,14 @@ When your agent loads this skill, it can **access 50M+ book records** without an
|
||||
| Directory | Purpose |
|
||||
|-----------|---------|
|
||||
| `SKILL.md` | Complete command reference with examples |
|
||||
| `scripts/openlibrary-cli` | CLI tool for the Open Library API |
|
||||
| `scripts/openlibrary` | CLI tool for the Open Library API |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
openlibrary-cli search --query "dune"
|
||||
openlibrary-cli search --isbn "9780439358064"
|
||||
openlibrary-cli search-authors --query "asimov"
|
||||
openlibrary search --query "dune"
|
||||
openlibrary search --isbn "9780439358064"
|
||||
openlibrary search-authors --query "asimov"
|
||||
```
|
||||
|
||||
## Triggers
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
name: openlibrary-cli
|
||||
name: openlibrary
|
||||
description: Search books, authors, and works on Open Library from the terminal. Look
|
||||
up books by ISBN, search titles and authors, and fetch detailed work/author records
|
||||
via the public Open Library API. No API key required.
|
||||
@@ -12,7 +12,7 @@ metadata:
|
||||
sources: https://openlibrary.org/developers/api, https://openlibrary.org
|
||||
---
|
||||
|
||||
# openlibrary-cli — Book Metadata from Open Library
|
||||
# openlibrary — Book Metadata from Open Library
|
||||
|
||||
Search books and authors, look up works and ISBNs, and fetch detailed metadata from the public [Open Library](https://openlibrary.org) API. No API key, no registration — just works.
|
||||
|
||||
@@ -32,13 +32,13 @@ Only Python 3.8+ and the `requests` package are required. `--help` and `--dry-ru
|
||||
### search — Search books by keyword
|
||||
|
||||
```bash
|
||||
openlibrary-cli search --query "dune" # basic search (20 results)
|
||||
openlibrary-cli search --query "dune" --limit 5 # just the top 5
|
||||
openlibrary-cli search --query "dune" --sort new # newest first
|
||||
openlibrary-cli search --query "dune" --sort rating # highest rated first
|
||||
openlibrary-cli search --query "dune" --sort title # alphabetical by title
|
||||
openlibrary-cli search --query "foundation" --lang fr # French editions
|
||||
openlibrary-cli search --query "dune" --json # machine-readable JSON
|
||||
openlibrary search --query "dune" # basic search (20 results)
|
||||
openlibrary search --query "dune" --limit 5 # just the top 5
|
||||
openlibrary search --query "dune" --sort new # newest first
|
||||
openlibrary search --query "dune" --sort rating # highest rated first
|
||||
openlibrary search --query "dune" --sort title # alphabetical by title
|
||||
openlibrary search --query "foundation" --lang fr # French editions
|
||||
openlibrary search --query "dune" --json # machine-readable JSON
|
||||
```
|
||||
|
||||
Shows: title, first publish year, authors, edition count. Supports `--sort` (editions, new, old, rating, title), `--lang`, `--offset`, and `--availability`.
|
||||
@@ -46,9 +46,9 @@ Shows: title, first publish year, authors, edition count. Supports `--sort` (edi
|
||||
### search-authors — Search authors by name
|
||||
|
||||
```bash
|
||||
openlibrary-cli search-authors --query "asimov" # search authors
|
||||
openlibrary-cli search-authors --query "asimov" --limit 5 # top 5
|
||||
openlibrary-cli search-authors --query "asimov" --json # machine-readable
|
||||
openlibrary search-authors --query "asimov" # search authors
|
||||
openlibrary search-authors --query "asimov" --limit 5 # top 5
|
||||
openlibrary search-authors --query "asimov" --json # machine-readable
|
||||
```
|
||||
|
||||
Shows: name, birth/death years, author key, top work.
|
||||
@@ -56,9 +56,9 @@ Shows: name, birth/death years, author key, top work.
|
||||
### author — Get author details by key
|
||||
|
||||
```bash
|
||||
openlibrary-cli author OL23919A # Isaac Asimov
|
||||
openlibrary-cli author OL34184A # Ursula K. Le Guin
|
||||
openlibrary-cli author OL23919A --json # full biography
|
||||
openlibrary author OL23919A # Isaac Asimov
|
||||
openlibrary author OL34184A # Ursula K. Le Guin
|
||||
openlibrary author OL23919A --json # full biography
|
||||
```
|
||||
|
||||
Shows: name, birth/death dates, biography (up to 500 chars), Wikipedia link, personal name. Author keys are the `OL#####A` identifiers from search results.
|
||||
@@ -66,9 +66,9 @@ Shows: name, birth/death dates, biography (up to 500 chars), Wikipedia link, per
|
||||
### work — Get work details by key
|
||||
|
||||
```bash
|
||||
openlibrary-cli work OL123W # work by key
|
||||
openlibrary-cli work OL81699W # "Foundation"
|
||||
openlibrary-cli work OL81699W --json # full description
|
||||
openlibrary work OL123W # work by key
|
||||
openlibrary work OL81699W # "Foundation"
|
||||
openlibrary work OL81699W --json # full description
|
||||
```
|
||||
|
||||
Shows: title, author keys, subjects, description (up to 500 chars). Work keys are the `OL#####W` identifiers found in search results.
|
||||
@@ -76,9 +76,9 @@ Shows: title, author keys, subjects, description (up to 500 chars). Work keys ar
|
||||
### isbn — Lookup a book by ISBN
|
||||
|
||||
```bash
|
||||
openlibrary-cli isbn 9780451524935 # ISBN lookup
|
||||
openlibrary-cli isbn 9780553382563 # another book
|
||||
openlibrary-cli isbn 9780451524935 --json # full edition metadata
|
||||
openlibrary isbn 9780451524935 # ISBN lookup
|
||||
openlibrary isbn 9780553382563 # another book
|
||||
openlibrary isbn 9780451524935 --json # full edition metadata
|
||||
```
|
||||
|
||||
Shows: title, author(s), page count, publish date, publisher, subjects (top 5). Accepts both ISBN-10 and ISBN-13.
|
||||
@@ -88,12 +88,12 @@ Shows: title, author(s), page count, publish date, publisher, subjects (top 5).
|
||||
These flags work anywhere in the command — before or after the subcommand:
|
||||
|
||||
```bash
|
||||
openlibrary-cli --json search --query "dune" # JSON output
|
||||
openlibrary-cli search --query "dune" --json # same result, after subcommand
|
||||
openlibrary-cli --dry-run search --query "dune" # preview without API call
|
||||
openlibrary-cli --quiet search --query "dune" # suppress diagnostic output
|
||||
openlibrary-cli --verbose author OL23919A # verbose logging
|
||||
openlibrary-cli --dry-run isbn 9780451524935 # see what URL would be used
|
||||
openlibrary --json search --query "dune" # JSON output
|
||||
openlibrary search --query "dune" --json # same result, after subcommand
|
||||
openlibrary --dry-run search --query "dune" # preview without API call
|
||||
openlibrary --quiet search --query "dune" # suppress diagnostic output
|
||||
openlibrary --verbose author OL23919A # verbose logging
|
||||
openlibrary --dry-run isbn 9780451524935 # see what URL would be used
|
||||
```
|
||||
|
||||
| Flag | Effect |
|
||||
@@ -116,6 +116,6 @@ openlibrary-cli --dry-run isbn 9780451524935 # see what URL would
|
||||
|
||||
## References
|
||||
|
||||
- [scripts/openlibrary-cli](scripts/openlibrary-cli) — The CLI binary. Built following the cli-builder patterns: non-interactive, `--json`, `--dry-run`, `--quiet`, `--verbose`, dual-output via `emit()`, structured logging.
|
||||
- [scripts/openlibrary](scripts/openlibrary) — The CLI binary. Built following the cli-builder patterns: non-interactive, `--json`, `--dry-run`, `--quiet`, `--verbose`, dual-output via `emit()`, structured logging.
|
||||
- [Open Library API Docs](https://openlibrary.org/developers/api) — Official API documentation.
|
||||
- [Open Library](https://openlibrary.org) — The open, editable library catalog.
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""openlibrary-cli — Open Library book metadata from the terminal.
|
||||
"""openlibrary — Open Library book metadata from the terminal.
|
||||
|
||||
Search books, authors, works, and lookup by ISBN using the public
|
||||
Open Library API. No API key required.
|
||||
@@ -20,7 +20,7 @@ import requests
|
||||
DEFAULT_SERVER = "https://openlibrary.org"
|
||||
ENV_SERVER = os.getenv("OL_SERVER", DEFAULT_SERVER)
|
||||
ENV_EMAIL = os.getenv("OL_EMAIL", "")
|
||||
ENV_USER_AGENT = os.getenv("OL_USER_AGENT", "openlibrary-cli/1.0 (+https://github.com)")
|
||||
ENV_USER_AGENT = os.getenv("OL_USER_AGENT", "openlibrary/1.0 (+https://github.com)")
|
||||
|
||||
QUIET = False
|
||||
GLOBAL_FLAGS: Dict[str, Any] = {
|
||||
@@ -115,7 +115,7 @@ def fmt_author(a: Dict) -> str:
|
||||
|
||||
|
||||
def cmd_search(client, args):
|
||||
parser = argparse.ArgumentParser(prog="openlibrary-cli search")
|
||||
parser = argparse.ArgumentParser(prog="openlibrary search")
|
||||
parser.add_argument("--query", "-q", required=True)
|
||||
parser.add_argument("--limit", type=int, default=20)
|
||||
parser.add_argument("--offset", type=int, default=0)
|
||||
@@ -160,7 +160,7 @@ def cmd_search(client, args):
|
||||
|
||||
|
||||
def cmd_isbn(client, args):
|
||||
parser = argparse.ArgumentParser(prog="openlibrary-cli isbn")
|
||||
parser = argparse.ArgumentParser(prog="openlibrary isbn")
|
||||
parser.add_argument("isbn", help="ISBN number")
|
||||
parsed, _ = parser.parse_known_args(args)
|
||||
|
||||
@@ -194,7 +194,7 @@ def cmd_isbn(client, args):
|
||||
|
||||
|
||||
def cmd_author(client, args):
|
||||
parser = argparse.ArgumentParser(prog="openlibrary-cli author")
|
||||
parser = argparse.ArgumentParser(prog="openlibrary author")
|
||||
parser.add_argument("key", help="Author key (e.g. OL23919A)")
|
||||
parsed, _ = parser.parse_known_args(args)
|
||||
|
||||
@@ -225,7 +225,7 @@ def cmd_author(client, args):
|
||||
|
||||
|
||||
def cmd_work(client, args):
|
||||
parser = argparse.ArgumentParser(prog="openlibrary-cli work")
|
||||
parser = argparse.ArgumentParser(prog="openlibrary work")
|
||||
parser.add_argument("key", help="Work key (e.g. OL123W)")
|
||||
parsed, _ = parser.parse_known_args(args)
|
||||
|
||||
@@ -257,7 +257,7 @@ def cmd_work(client, args):
|
||||
|
||||
|
||||
def cmd_search_authors(client, args):
|
||||
parser = argparse.ArgumentParser(prog="openlibrary-cli search-authors")
|
||||
parser = argparse.ArgumentParser(prog="openlibrary search-authors")
|
||||
parser.add_argument("--query", "-q", required=True)
|
||||
parser.add_argument("--limit", type=int, default=20)
|
||||
parser.add_argument("--offset", type=int, default=0)
|
||||
@@ -298,9 +298,9 @@ def main():
|
||||
warnings.simplefilter("ignore")
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="openlibrary-cli",
|
||||
prog="openlibrary",
|
||||
description="Open Library book metadata from the terminal. No API key required.",
|
||||
epilog="Global flags work anywhere: openlibrary-cli --json search --query 'dune'"
|
||||
epilog="Global flags work anywhere: openlibrary --json search --query 'dune'"
|
||||
)
|
||||
sub = parser.add_subparsers(dest="command")
|
||||
|
||||
@@ -17,15 +17,15 @@ When your agent loads this skill, it can **check hyper-local weather from your o
|
||||
| Directory | Purpose |
|
||||
|-----------|---------|
|
||||
| `SKILL.md` | Complete command reference with examples |
|
||||
| `scripts/tempest-cli` | CLI tool for WeatherFlow Tempest API |
|
||||
| `scripts/tempest` | CLI tool for WeatherFlow Tempest API |
|
||||
| `references/` | API field layout reference |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
export TEMPEST_TOKEN="your-token-here"
|
||||
tempest-cli current
|
||||
tempest-cli forecast
|
||||
tempest current
|
||||
tempest forecast
|
||||
```
|
||||
|
||||
## Triggers
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
name: tempest-cli
|
||||
name: tempest
|
||||
description: 'Query hyper-local weather from a WeatherFlow Tempest station: current
|
||||
conditions, 7-day forecast, historical observations, and real-time UDP broadcasts.
|
||||
Use when the user asks about the weather, temperature, rain, wind, humidity, forecast,
|
||||
@@ -12,7 +12,7 @@ metadata:
|
||||
sources: https://weatherflow.com, https://swd.weatherflow.com/swd/rest
|
||||
---
|
||||
|
||||
# tempest-cli — Hyper-Local Weather from Your Tempest Station
|
||||
# tempest — Hyper-Local Weather from Your Tempest Station
|
||||
|
||||
Query live weather data from a WeatherFlow Tempest station. Supports REST API access to current conditions, forecasts, and history via the cloud, plus local UDP broadcast reception from your hub on the same LAN.
|
||||
|
||||
@@ -32,9 +32,9 @@ The CLI reads `TEMPEST_TOKEN` from the environment. It also falls back to readin
|
||||
### current — Current conditions
|
||||
|
||||
```bash
|
||||
tempest-cli current # human-readable
|
||||
tempest-cli current --station-id 12345 --device-id 67890 # specific hardware
|
||||
tempest-cli current --json # machine-readable
|
||||
tempest current # human-readable
|
||||
tempest current --station-id 12345 --device-id 67890 # specific hardware
|
||||
tempest current --json # machine-readable
|
||||
```
|
||||
|
||||
If you have one station, it auto-selects it and picks the best sensor (ST > SKY > AIR, skips the HB hub). Pass `--station-id` or `--device-id` to override.
|
||||
@@ -42,17 +42,17 @@ If you have one station, it auto-selects it and picks the best sensor (ST > SKY
|
||||
### forecast — Multi-day forecast (+ current conditions + hourly)
|
||||
|
||||
```bash
|
||||
tempest-cli forecast # current + 5-day daily + 12-hour hourly
|
||||
tempest-cli forecast --days 3 # fewer days
|
||||
tempest-cli forecast --station-id 12345 # specific station
|
||||
tempest-cli forecast --json # machine-readable
|
||||
tempest forecast # current + 5-day daily + 12-hour hourly
|
||||
tempest forecast --days 3 # fewer days
|
||||
tempest forecast --station-id 12345 # specific station
|
||||
tempest forecast --json # machine-readable
|
||||
```
|
||||
|
||||
### stations — List your stations and devices
|
||||
|
||||
```bash
|
||||
tempest-cli stations # shows station names, IDs, device types, serials
|
||||
tempest-cli stations --json # full device inventory
|
||||
tempest stations # shows station names, IDs, device types, serials
|
||||
tempest stations --json # full device inventory
|
||||
```
|
||||
|
||||
Use this first if you don't know your station ID or want to see what sensors are online.
|
||||
@@ -60,17 +60,17 @@ Use this first if you don't know your station ID or want to see what sensors are
|
||||
### obs — Historical observations
|
||||
|
||||
```bash
|
||||
tempest-cli obs --device-id 67890 --days 1 # last 24 hours
|
||||
tempest-cli obs --device-id 67890 --days 7 # last week
|
||||
tempest-cli obs --device-id 67890 --json # machine-readable
|
||||
tempest obs --device-id 67890 --days 1 # last 24 hours
|
||||
tempest obs --device-id 67890 --days 7 # last week
|
||||
tempest obs --device-id 67890 --json # machine-readable
|
||||
```
|
||||
|
||||
### udp listen — Real-time broadcasts from the hub
|
||||
|
||||
```bash
|
||||
tempest-cli udp listen # listen indefinitely (Ctrl-C to stop)
|
||||
tempest-cli udp listen --timeout 30 # auto-stop after 30s
|
||||
tempest-cli udp listen --show-all # include hub_status messages
|
||||
tempest udp listen # listen indefinitely (Ctrl-C to stop)
|
||||
tempest udp listen --timeout 30 # auto-stop after 30s
|
||||
tempest udp listen --show-all # include hub_status messages
|
||||
```
|
||||
|
||||
Requires being on the same LAN as the hub (port 50222 UDP broadcast). Receives observations, rapid wind updates, lightning strike events, and precipitation start events in real time.
|
||||
@@ -147,11 +147,11 @@ A station returns all devices including the hub (device_type `HB`). The hub cann
|
||||
`--json`, `--dry-run`, `--quiet`, and `--verbose` work anywhere in the command:
|
||||
|
||||
```bash
|
||||
tempest-cli --json current --device-id 67890 # flag before subcommand
|
||||
tempest-cli current --device-id 67890 --json # flag after subcommand
|
||||
tempest --json current --device-id 67890 # flag before subcommand
|
||||
tempest current --device-id 67890 --json # flag after subcommand
|
||||
```
|
||||
|
||||
## References
|
||||
|
||||
- [references/tempest-api-field-layouts.md](references/tempest-api-field-layouts.md) — Full field index maps for obs_st, obs_air, and obs_sky observation arrays. Read when decoding raw JSON output or building on top of the Tempest API.
|
||||
- [scripts/tempest-cli](scripts/tempest-cli) — The CLI binary itself. Designed following the cli-builder patterns: non-interactive, `--json`, `--dry-run`, `--quiet`, `--verbose`, idempotent, dual-output via `emit()`, and structured logging.
|
||||
- [scripts/tempest](scripts/tempest) — The CLI binary itself. Designed following the cli-builder patterns: non-interactive, `--json`, `--dry-run`, `--quiet`, `--verbose`, idempotent, dual-output via `emit()`, and structured logging.
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""tempest-cli — Hyper-local weather from your Tempest station.
|
||||
"""tempest — Hyper-local weather from your Tempest station.
|
||||
|
||||
Two data sources:
|
||||
REST API — stations, observations, forecast via WeatherFlow cloud
|
||||
@@ -319,7 +319,7 @@ def cmd_stations(client: TempestClient, args: List[str]) -> None:
|
||||
|
||||
def cmd_current(client: TempestClient, args: List[str]) -> None:
|
||||
"""Get latest observations from your station."""
|
||||
parser = argparse.ArgumentParser(prog="tempest-cli current")
|
||||
parser = argparse.ArgumentParser(prog="tempest current")
|
||||
parser.add_argument("--station-id", type=int, help="Station ID (optional if only one station)")
|
||||
parser.add_argument("--device-id", type=int, help="Device ID (default: first Tempest device)")
|
||||
parsed, _ = parser.parse_known_args(args)
|
||||
@@ -385,7 +385,7 @@ def cmd_current(client: TempestClient, args: List[str]) -> None:
|
||||
|
||||
def cmd_obs(client: TempestClient, args: List[str]) -> None:
|
||||
"""Get historical observations."""
|
||||
parser = argparse.ArgumentParser(prog="tempest-cli obs")
|
||||
parser = argparse.ArgumentParser(prog="tempest obs")
|
||||
parser.add_argument("--device-id", type=int, required=True, help="Device ID (required)")
|
||||
parser.add_argument("--days", type=int, default=1, help="Days back to fetch (default: 1)")
|
||||
parsed, _ = parser.parse_known_args(args)
|
||||
@@ -416,7 +416,7 @@ def cmd_obs(client: TempestClient, args: List[str]) -> None:
|
||||
|
||||
def cmd_forecast(client: TempestClient, args: List[str]) -> None:
|
||||
"""Get forecast — current conditions + daily + hourly."""
|
||||
parser = argparse.ArgumentParser(prog="tempest-cli forecast")
|
||||
parser = argparse.ArgumentParser(prog="tempest forecast")
|
||||
parser.add_argument("--station-id", type=int, help="Station ID (optional if only one station)")
|
||||
parser.add_argument("--days", type=int, default=5, help="Days of daily forecast (default: 5)")
|
||||
parsed, _ = parser.parse_known_args(args)
|
||||
@@ -523,7 +523,7 @@ def cmd_forecast(client: TempestClient, args: List[str]) -> None:
|
||||
|
||||
def udp_listen(args: List[str]) -> None:
|
||||
"""Listen for local UDP broadcasts from the Tempest hub."""
|
||||
parser = argparse.ArgumentParser(prog="tempest-cli udp listen")
|
||||
parser = argparse.ArgumentParser(prog="tempest udp listen")
|
||||
parser.add_argument("--port", type=int, default=DEFAULT_UDP_PORT, help=f"UDP port (default: {DEFAULT_UDP_PORT})")
|
||||
parser.add_argument("--timeout", type=int, default=0, help="Listen for N seconds (0 = indefinite)")
|
||||
parser.add_argument("--show-all", action="store_true", help="Show raw message type even if unknown")
|
||||
@@ -623,9 +623,9 @@ def main() -> None:
|
||||
warnings.simplefilter("ignore")
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="tempest-cli",
|
||||
prog="tempest",
|
||||
description="Hyper-local weather from your Tempest station.",
|
||||
epilog="Global flags can appear anywhere: tempest-cli --json current --device-id X"
|
||||
epilog="Global flags can appear anywhere: tempest --json current --device-id X"
|
||||
)
|
||||
sub = parser.add_subparsers(dest="command", help="Available commands")
|
||||
|
||||
@@ -17,14 +17,14 @@ When your agent loads this skill, it can **access the entire TMDb catalog** with
|
||||
| Directory | Purpose |
|
||||
|-----------|---------|
|
||||
| `SKILL.md` | Complete command reference with compound filter examples |
|
||||
| `scripts/tmdb-cli` | CLI tool for TMDb v3 API |
|
||||
| `scripts/tmdb` | CLI tool for TMDb v3 API |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
export TMDB_ACCESS_TOKEN="your-tmdb-access-token"
|
||||
tmdb-cli movie search --term "dune"
|
||||
tmdb-cli movie discover --genre horror --certification R
|
||||
tmdb movie search --term "dune"
|
||||
tmdb movie discover --genre horror --certification R
|
||||
```
|
||||
|
||||
## Triggers
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
name: tmdb-cli
|
||||
name: tmdb
|
||||
description: Search and discover movies, TV shows, and trending content via The Movie
|
||||
Database (TMDb) API v3. Use when the user asks about movies, TV, film, cinema, genres,
|
||||
certifications, ratings, cast, upcoming releases, or trending media.
|
||||
@@ -11,7 +11,7 @@ metadata:
|
||||
sources: https://developer.themoviedb.org/reference, https://www.themoviedb.org/settings/api
|
||||
---
|
||||
|
||||
# tmdb-cli — Movie & TV Discovery from the Terminal
|
||||
# tmdb — Movie & TV Discovery from the Terminal
|
||||
|
||||
Search movies and TV shows by keyword, discover by genre/certification/rating/date, check trending and upcoming releases, browse genre lists, and view US certification ratings — all from TMDb's v3 API.
|
||||
|
||||
@@ -33,9 +33,9 @@ export TMDB_API_KEY="your-tmdb-api-key"
|
||||
### movie search — Search movies by keyword
|
||||
|
||||
```bash
|
||||
tmdb-cli movie search --term "dune" # basic search
|
||||
tmdb-cli movie search --term "inception" --limit 5 # top 5 results
|
||||
tmdb-cli movie search --term "arrival" --json # machine-readable
|
||||
tmdb movie search --term "dune" # basic search
|
||||
tmdb movie search --term "inception" --limit 5 # top 5 results
|
||||
tmdb movie search --term "arrival" --json # machine-readable
|
||||
```
|
||||
|
||||
Shows: title, release year, vote average.
|
||||
@@ -43,29 +43,29 @@ Shows: title, release year, vote average.
|
||||
### movie discover — Discover movies by genre, certification, rating, and date
|
||||
|
||||
```bash
|
||||
tmdb-cli movie discover --genre horror # horror movies
|
||||
tmdb-cli movie discover --genre horror --certification R # horror, R-rated
|
||||
tmdb-cli movie discover --genre comedy --rating 7 --limit 15 # highly-rated comedy
|
||||
tmdb-cli movie discover --from 2024-01-01 --to 2024-12-31 # released in 2024
|
||||
tmdb-cli movie discover --genre scifi --from 2026-05-01 # recent sci-fi
|
||||
tmdb-cli movie discover --genre thriller --certification R \
|
||||
tmdb movie discover --genre horror # horror movies
|
||||
tmdb movie discover --genre horror --certification R # horror, R-rated
|
||||
tmdb movie discover --genre comedy --rating 7 --limit 15 # highly-rated comedy
|
||||
tmdb movie discover --from 2024-01-01 --to 2024-12-31 # released in 2024
|
||||
tmdb movie discover --genre scifi --from 2026-05-01 # recent sci-fi
|
||||
tmdb movie discover --genre thriller --certification R \
|
||||
--rating 6 --from 2025-01-01 --limit 20 # compound filter
|
||||
```
|
||||
|
||||
### movie upcoming — Upcoming movie releases
|
||||
|
||||
```bash
|
||||
tmdb-cli movie upcoming # next 10 upcoming
|
||||
tmdb-cli movie upcoming --limit 20 # more results
|
||||
tmdb-cli movie upcoming --json # machine-readable
|
||||
tmdb movie upcoming # next 10 upcoming
|
||||
tmdb movie upcoming --limit 20 # more results
|
||||
tmdb movie upcoming --json # machine-readable
|
||||
```
|
||||
|
||||
### tv search — Search TV shows by keyword
|
||||
|
||||
```bash
|
||||
tmdb-cli tv search --term "severance" # basic TV search
|
||||
tmdb-cli tv search --term "the expanse" --limit 5
|
||||
tmdb-cli tv search --term "silo" --json
|
||||
tmdb tv search --term "severance" # basic TV search
|
||||
tmdb tv search --term "the expanse" --limit 5
|
||||
tmdb tv search --term "silo" --json
|
||||
```
|
||||
|
||||
Shows: name, first air year, vote average.
|
||||
@@ -73,33 +73,33 @@ Shows: name, first air year, vote average.
|
||||
### tv discover — Discover TV shows by genre, rating, and air date
|
||||
|
||||
```bash
|
||||
tmdb-cli tv discover --genre sci-fi # sci-fi shows
|
||||
tmdb-cli tv discover --genre drama --rating 7 # critically-acclaimed drama
|
||||
tmdb-cli tv discover --genre comedy --from 2025-01-01 # recent comedy
|
||||
tmdb tv discover --genre sci-fi # sci-fi shows
|
||||
tmdb tv discover --genre drama --rating 7 # critically-acclaimed drama
|
||||
tmdb tv discover --genre comedy --from 2025-01-01 # recent comedy
|
||||
```
|
||||
|
||||
### trending — Trending content across day or week
|
||||
|
||||
```bash
|
||||
tmdb-cli trending # trending movies this week
|
||||
tmdb-cli trending --type tv # trending TV this week
|
||||
tmdb-cli trending --type all --window day # all media trending today
|
||||
tmdb-cli trending --limit 20 --json # top 20 as JSON
|
||||
tmdb trending # trending movies this week
|
||||
tmdb trending --type tv # trending TV this week
|
||||
tmdb trending --type all --window day # all media trending today
|
||||
tmdb trending --limit 20 --json # top 20 as JSON
|
||||
```
|
||||
|
||||
### genre list — Browse available genres
|
||||
|
||||
```bash
|
||||
tmdb-cli genre list --type movie # all movie genres
|
||||
tmdb-cli genre list --type tv # all TV genres
|
||||
tmdb-cli genre list --type movie --json
|
||||
tmdb genre list --type movie # all movie genres
|
||||
tmdb genre list --type tv # all TV genres
|
||||
tmdb genre list --type movie --json
|
||||
```
|
||||
|
||||
### certification — View US movie certification ratings
|
||||
|
||||
```bash
|
||||
tmdb-cli certification # US certification list
|
||||
tmdb-cli certification --json # machine-readable
|
||||
tmdb certification # US certification list
|
||||
tmdb certification --json # machine-readable
|
||||
```
|
||||
|
||||
## Global Flags
|
||||
@@ -107,11 +107,11 @@ tmdb-cli certification --json # machine-readable
|
||||
These flags work in any position before, between, or after subcommands:
|
||||
|
||||
```bash
|
||||
tmdb-cli --json movie search --term "dune" # JSON output
|
||||
tmdb-cli movie search --term "dune" --json # json after subcommand
|
||||
tmdb-cli --dry-run movie discover --genre horror # preview without API call
|
||||
tmdb-cli --quiet trending # suppress diagnostic output
|
||||
tmdb-cli --verbose movie search --term "alien" # verbose logging
|
||||
tmdb --json movie search --term "dune" # JSON output
|
||||
tmdb movie search --term "dune" --json # json after subcommand
|
||||
tmdb --dry-run movie discover --genre horror # preview without API call
|
||||
tmdb --quiet trending # suppress diagnostic output
|
||||
tmdb --verbose movie search --term "alien" # verbose logging
|
||||
```
|
||||
|
||||
## Known Gotchas
|
||||
@@ -124,6 +124,6 @@ tmdb-cli --verbose movie search --term "alien" # verbose logging
|
||||
|
||||
## References
|
||||
|
||||
- [scripts/tmdb-cli](scripts/tmdb-cli) — The CLI binary. Built following the cli-builder patterns: non-interactive, `--json`, `--dry-run`, `--quiet`, `--verbose`, dual-output via `emit()`, lazy auth, structured logging.
|
||||
- [scripts/tmdb](scripts/tmdb) — The CLI binary. Built following the cli-builder patterns: non-interactive, `--json`, `--dry-run`, `--quiet`, `--verbose`, dual-output via `emit()`, lazy auth, structured logging.
|
||||
- [TMDb API v3 Reference](https://developer.themoviedb.org/reference) — Official API documentation.
|
||||
- [TMDb API Settings (get a key)](https://www.themoviedb.org/settings/api) — Free API key registration.
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""tmdb-cli — The Movie Database API for agent-based media discovery.
|
||||
"""tmdb — The Movie Database API for agent-based media discovery.
|
||||
|
||||
Discover movies and TV shows by genre, rating, certification, and date.
|
||||
Search by term, get details, check trending, upcoming, and now playing.
|
||||
@@ -170,7 +170,7 @@ def fmt_tv(t, idx=None):
|
||||
|
||||
|
||||
def cmd_movie_search(client, args):
|
||||
p = argparse.ArgumentParser(prog="tmdb-cli movie search")
|
||||
p = argparse.ArgumentParser(prog="tmdb movie search")
|
||||
p.add_argument("--term", "-t", required=True)
|
||||
p.add_argument("--limit", type=int, default=10)
|
||||
parsed, _ = p.parse_known_args(args)
|
||||
@@ -186,7 +186,7 @@ def cmd_movie_search(client, args):
|
||||
|
||||
|
||||
def cmd_movie_discover(client, args):
|
||||
p = argparse.ArgumentParser(prog="tmdb-cli movie discover")
|
||||
p = argparse.ArgumentParser(prog="tmdb movie discover")
|
||||
p.add_argument("--genre", help="Genre name (e.g. horror, comedy)")
|
||||
p.add_argument("--certification", help="US certification (G, PG, PG-13, R, NC-17)")
|
||||
p.add_argument("--rating", type=float, help="Min vote average (0-10)")
|
||||
@@ -231,7 +231,7 @@ def _resolve_movie_genre(client, name):
|
||||
|
||||
|
||||
def cmd_tv_discover(client, args):
|
||||
p = argparse.ArgumentParser(prog="tmdb-cli tv discover")
|
||||
p = argparse.ArgumentParser(prog="tmdb tv discover")
|
||||
p.add_argument("--genre", help="Genre name")
|
||||
p.add_argument("--rating", type=float, help="Min vote average")
|
||||
p.add_argument("--from", dest="air_date_gte", help="Air date from")
|
||||
@@ -268,7 +268,7 @@ def _resolve_tv_genre(client, name):
|
||||
|
||||
|
||||
def cmd_trending(client, args):
|
||||
p = argparse.ArgumentParser(prog="tmdb-cli trending")
|
||||
p = argparse.ArgumentParser(prog="tmdb trending")
|
||||
p.add_argument("--type", default="movie", choices=["movie", "tv", "all"])
|
||||
p.add_argument("--window", default="week", choices=["day", "week"])
|
||||
p.add_argument("--limit", type=int, default=10)
|
||||
@@ -294,7 +294,7 @@ def cmd_trending(client, args):
|
||||
|
||||
|
||||
def cmd_genre_list(client, args):
|
||||
p = argparse.ArgumentParser(prog="tmdb-cli genre list")
|
||||
p = argparse.ArgumentParser(prog="tmdb genre list")
|
||||
p.add_argument("--type", required=True, choices=["movie", "tv"])
|
||||
parsed, _ = p.parse_known_args(args)
|
||||
|
||||
@@ -322,7 +322,7 @@ def cmd_cert_list(client, args):
|
||||
|
||||
|
||||
def cmd_upcoming(client, args):
|
||||
p = argparse.ArgumentParser(prog="tmdb-cli movie upcoming")
|
||||
p = argparse.ArgumentParser(prog="tmdb movie upcoming")
|
||||
p.add_argument("--limit", type=int, default=10)
|
||||
parsed, _ = p.parse_known_args(args)
|
||||
if client.dry_run:
|
||||
@@ -341,7 +341,7 @@ def main():
|
||||
if GLOBAL_FLAGS.get("json", False):
|
||||
warnings.simplefilter("ignore")
|
||||
|
||||
parser = argparse.ArgumentParser(prog="tmdb-cli", description="The Movie Database API CLI.")
|
||||
parser = argparse.ArgumentParser(prog="tmdb", description="The Movie Database API CLI.")
|
||||
sub = parser.add_subparsers(dest="resource")
|
||||
|
||||
# movie
|
||||
Reference in New Issue
Block a user