mirror of
https://github.com/KohakuBlueleaf/KohakuHub.git
synced 2026-05-10 15:44:42 -05:00
945 lines
26 KiB
Markdown
945 lines
26 KiB
Markdown
# KohakuHub CLI Documentation
|
|
|
|
*Last Updated: January 2025*
|
|
|
|
**Status:** ✅ Fully Implemented and Functional
|
|
|
|
## Quick Reference
|
|
|
|
```bash
|
|
# Authentication
|
|
kohub-cli auth login # Login to KohakuHub
|
|
kohub-cli auth token create --name "name" # Create API token
|
|
|
|
# Repositories
|
|
kohub-cli repo create REPO_ID --type TYPE # Create repository
|
|
kohub-cli repo list --type TYPE # List repositories
|
|
kohub-cli repo ls NAMESPACE # List namespace repos
|
|
kohub-cli repo files REPO_ID # List repository files
|
|
kohub-cli repo commits REPO_ID # List commit history
|
|
kohub-cli repo commit REPO_ID COMMIT_ID # Show commit details
|
|
kohub-cli repo commit-diff REPO_ID COMMIT # Show commit diff
|
|
|
|
# Organizations
|
|
kohub-cli org create NAME # Create organization
|
|
kohub-cli org member add ORG USER --role R # Add member
|
|
|
|
# Settings & Management
|
|
kohub-cli settings repo update REPO_ID --private # Update repo settings
|
|
kohub-cli settings repo move FROM TO --type TYPE # Move/rename repo
|
|
kohub-cli settings repo squash REPO_ID --type TYPE # Squash repo history
|
|
kohub-cli settings repo branch create REPO_ID BRANCH # Create branch
|
|
kohub-cli settings repo tag create REPO_ID TAG # Create tag
|
|
|
|
# LFS Settings (NEW)
|
|
kohub-cli settings repo lfs get REPO_ID # Get LFS settings
|
|
kohub-cli settings repo lfs threshold REPO_ID --threshold 5000000 # Set threshold
|
|
kohub-cli settings repo lfs threshold REPO_ID --reset # Reset to default
|
|
kohub-cli settings repo lfs versions REPO_ID --count 10 # Set keep versions
|
|
kohub-cli settings repo lfs suffix REPO_ID --add .safetensors --add .bin # Add suffix rules
|
|
kohub-cli settings repo lfs suffix REPO_ID --set .safetensors --set .gguf # Set suffix rules
|
|
kohub-cli settings repo lfs suffix REPO_ID --clear # Clear suffix rules
|
|
|
|
# File Operations
|
|
kohub-cli settings repo upload REPO_ID FILE # Upload file to repo
|
|
kohub-cli settings repo download REPO_ID PATH # Download file from repo
|
|
|
|
# Configuration
|
|
kohub-cli config set KEY VALUE # Set config value
|
|
kohub-cli config list # Show all config
|
|
kohub-cli config history # Show operation history
|
|
|
|
# Health & Diagnostics
|
|
kohub-cli health # Check service health
|
|
|
|
# Interactive Mode
|
|
kohub-cli interactive # Launch TUI mode
|
|
kohub-cli # Default: launch TUI mode
|
|
```
|
|
|
|
## Overview
|
|
|
|
The KohakuHub CLI (`kohub-cli`) provides comprehensive access to KohakuHub through two interfaces:
|
|
|
|
1. **Python API (`KohubClient`)** - For programmatic access and integration
|
|
2. **Command-Line Interface** - Two modes:
|
|
- **Interactive TUI Mode**: Full-featured menu-driven interface (default when running `kohub-cli`)
|
|
- **Command Mode**: Click-based commands for scripting and automation (e.g., `kohub-cli repo list`)
|
|
|
|
This dual-mode design makes it easy to integrate KohakuHub into existing workflows while maintaining compatibility with HuggingFace ecosystem patterns.
|
|
|
|
## Python API Design
|
|
|
|
### Core Class: `KohubClient`
|
|
|
|
```python
|
|
from kohub_cli import KohubClient
|
|
|
|
# Initialize client
|
|
client = KohubClient(
|
|
endpoint="http://localhost:28080",
|
|
token="your_token_here" # optional
|
|
)
|
|
|
|
# Or use environment variables
|
|
# HF_ENDPOINT, HF_TOKEN
|
|
client = KohubClient()
|
|
```
|
|
|
|
### User Operations
|
|
|
|
```python
|
|
# Register a new user
|
|
client.register(username="alice", email="alice@example.com", password="secret")
|
|
|
|
# Login (creates session)
|
|
session_info = client.login(username="alice", password="secret")
|
|
|
|
# Get current user info
|
|
user_info = client.whoami()
|
|
|
|
# Logout
|
|
client.logout()
|
|
```
|
|
|
|
### Token Management
|
|
|
|
```python
|
|
# Create an API token
|
|
token_info = client.create_token(name="my-laptop")
|
|
# Returns: {"token": "hf_...", "token_id": 123, ...}
|
|
|
|
# List all tokens
|
|
tokens = client.list_tokens()
|
|
|
|
# Revoke a token
|
|
client.revoke_token(token_id=123)
|
|
```
|
|
|
|
### Repository Operations
|
|
|
|
```python
|
|
# Create repository
|
|
repo = client.create_repo(
|
|
repo_id="my-org/my-model",
|
|
repo_type="model", # "model", "dataset", or "space"
|
|
private=False
|
|
)
|
|
|
|
# Delete repository
|
|
client.delete_repo(repo_id="my-org/my-model", repo_type="model")
|
|
|
|
# Get repository info
|
|
info = client.repo_info(
|
|
repo_id="my-org/my-model",
|
|
repo_type="model",
|
|
revision="main" # optional
|
|
)
|
|
|
|
# List repository files
|
|
files = client.list_repo_tree(
|
|
repo_id="my-org/my-model",
|
|
repo_type="model",
|
|
revision="main",
|
|
path="",
|
|
recursive=False
|
|
)
|
|
|
|
# List all repositories of a type
|
|
repos = client.list_repos(repo_type="model", author="my-org", limit=50)
|
|
|
|
# List repositories under a namespace
|
|
repos = client.list_namespace_repos(
|
|
namespace="my-org",
|
|
repo_type="model" # optional
|
|
)
|
|
```
|
|
|
|
### Repository Settings
|
|
|
|
```python
|
|
# Update repository settings
|
|
client.update_repo_settings(
|
|
repo_id="my-org/my-model",
|
|
repo_type="model",
|
|
private=True,
|
|
gated="auto", # "auto", "manual", or None
|
|
)
|
|
|
|
# Update LFS settings
|
|
client.update_repo_settings(
|
|
repo_id="my-org/my-model",
|
|
repo_type="model",
|
|
lfs_threshold_bytes=5000000, # 5MB
|
|
lfs_keep_versions=10,
|
|
lfs_suffix_rules=[".safetensors", ".bin", ".gguf"],
|
|
)
|
|
|
|
# Get LFS settings
|
|
settings = client.get_repo_lfs_settings(
|
|
repo_id="my-org/my-model",
|
|
repo_type="model"
|
|
)
|
|
|
|
# Move/rename repository
|
|
client.move_repo(
|
|
from_repo="my-org/old-name",
|
|
to_repo="my-org/new-name",
|
|
repo_type="model"
|
|
)
|
|
|
|
# Squash repository history
|
|
client.squash_repo(
|
|
repo_id="my-org/my-model",
|
|
repo_type="model"
|
|
)
|
|
```
|
|
|
|
### Branch and Tag Operations
|
|
|
|
```python
|
|
# Create branch
|
|
client.create_branch(
|
|
repo_id="my-org/my-model",
|
|
branch="dev",
|
|
repo_type="model",
|
|
revision="main" # optional source revision
|
|
)
|
|
|
|
# Delete branch
|
|
client.delete_branch(
|
|
repo_id="my-org/my-model",
|
|
branch="dev",
|
|
repo_type="model"
|
|
)
|
|
|
|
# Create tag
|
|
client.create_tag(
|
|
repo_id="my-org/my-model",
|
|
tag="v1.0",
|
|
repo_type="model",
|
|
revision="main", # optional
|
|
message="Release v1.0" # optional
|
|
)
|
|
|
|
# Delete tag
|
|
client.delete_tag(
|
|
repo_id="my-org/my-model",
|
|
tag="v1.0",
|
|
repo_type="model"
|
|
)
|
|
```
|
|
|
|
### Commit History
|
|
|
|
```python
|
|
# List commits
|
|
result = client.list_commits(
|
|
repo_id="my-org/my-model",
|
|
branch="main",
|
|
repo_type="model",
|
|
limit=20,
|
|
after=None # Pagination cursor
|
|
)
|
|
commits = result["commits"]
|
|
has_more = result["hasMore"]
|
|
|
|
# Get commit details
|
|
commit = client.get_commit_detail(
|
|
repo_id="my-org/my-model",
|
|
commit_id="abc1234567890",
|
|
repo_type="model"
|
|
)
|
|
|
|
# Get commit diff
|
|
diff = client.get_commit_diff(
|
|
repo_id="my-org/my-model",
|
|
commit_id="abc1234567890",
|
|
repo_type="model"
|
|
)
|
|
files = diff["files"]
|
|
```
|
|
|
|
### File Upload/Download
|
|
|
|
```python
|
|
# Upload file
|
|
result = client.upload_file(
|
|
repo_id="my-org/my-model",
|
|
local_path="./model.safetensors",
|
|
repo_path="model.safetensors",
|
|
repo_type="model",
|
|
branch="main",
|
|
commit_message="Upload model weights"
|
|
)
|
|
|
|
# Download file
|
|
local_path = client.download_file(
|
|
repo_id="my-org/my-model",
|
|
repo_path="model.safetensors",
|
|
local_path="./downloaded_model.safetensors",
|
|
repo_type="model",
|
|
revision="main"
|
|
)
|
|
```
|
|
|
|
### Organization Operations
|
|
|
|
```python
|
|
# Create organization
|
|
client.create_organization(name="my-org", description="My awesome org")
|
|
|
|
# Get organization info
|
|
org = client.get_organization("my-org")
|
|
|
|
# List user's organizations
|
|
orgs = client.list_user_organizations(username="alice")
|
|
|
|
# List organization members
|
|
members = client.list_organization_members("my-org")
|
|
|
|
# Add member to organization
|
|
client.add_organization_member(
|
|
org_name="my-org",
|
|
username="bob",
|
|
role="member" # or "admin", "super-admin"
|
|
)
|
|
|
|
# Update member role
|
|
client.update_organization_member(
|
|
org_name="my-org",
|
|
username="bob",
|
|
role="admin"
|
|
)
|
|
|
|
# Remove member
|
|
client.remove_organization_member(org_name="my-org", username="bob")
|
|
|
|
# Update organization settings
|
|
client.update_organization_settings(
|
|
org_name="my-org",
|
|
description="Updated description"
|
|
)
|
|
```
|
|
|
|
### Health Check
|
|
|
|
```python
|
|
# Check service health
|
|
health = client.health_check()
|
|
api_status = health["api"]["status"] # "healthy", "unreachable", etc.
|
|
authenticated = health["authenticated"]
|
|
username = health["user"] # If authenticated
|
|
```
|
|
|
|
### Configuration
|
|
|
|
```python
|
|
# Save configuration
|
|
client.save_config(
|
|
endpoint="http://localhost:28080",
|
|
token="hf_..."
|
|
)
|
|
|
|
# Load configuration
|
|
config = client.load_config()
|
|
|
|
# Get config file path
|
|
path = client.config_path # ~/.kohub/config.json
|
|
```
|
|
|
|
## CLI Commands Reference
|
|
|
|
### Authentication
|
|
|
|
```bash
|
|
# Login
|
|
kohub-cli auth login
|
|
kohub-cli auth login --username alice --password secret
|
|
|
|
# Logout
|
|
kohub-cli auth logout
|
|
|
|
# Check current user
|
|
kohub-cli auth whoami
|
|
|
|
# Create token
|
|
kohub-cli auth token create --name "my-laptop"
|
|
kohub-cli auth token create -n "my-laptop"
|
|
|
|
# List tokens
|
|
kohub-cli auth token list
|
|
|
|
# Delete token
|
|
kohub-cli auth token delete --id 123
|
|
```
|
|
|
|
### Repository Operations
|
|
|
|
```bash
|
|
# Create repository
|
|
kohub-cli repo create my-model --type model
|
|
kohub-cli repo create my-org/my-model --type model --private
|
|
|
|
# Delete repository
|
|
kohub-cli repo delete my-org/my-model --type model
|
|
|
|
# Show repository info (shows downloads and likes)
|
|
kohub-cli repo info my-org/my-model --type model
|
|
kohub-cli repo info my-org/my-model --type model --revision v1.0
|
|
|
|
# List repositories
|
|
kohub-cli repo list --type model
|
|
kohub-cli repo list --type model --author my-org --limit 100
|
|
|
|
# List repositories under a namespace
|
|
kohub-cli repo ls my-org
|
|
kohub-cli repo ls my-org --type model
|
|
|
|
# List files in repository (with LFS indicators)
|
|
kohub-cli repo files my-org/my-model
|
|
kohub-cli repo files my-org/my-model --revision main --path configs/ --recursive
|
|
```
|
|
|
|
### Commit History
|
|
|
|
```bash
|
|
# List commits
|
|
kohub-cli repo commits my-org/my-model --type model
|
|
kohub-cli repo commits my-org/my-model --type model --branch main --limit 50
|
|
|
|
# Show commit details
|
|
kohub-cli repo commit my-org/my-model abc1234 --type model
|
|
|
|
# Show commit diff
|
|
kohub-cli repo commit-diff my-org/my-model abc1234 --type model
|
|
kohub-cli repo commit-diff my-org/my-model abc1234 --type model --show-diff
|
|
```
|
|
|
|
### Organization Operations
|
|
|
|
```bash
|
|
# Create organization
|
|
kohub-cli org create my-org --description "My organization"
|
|
|
|
# Show organization info
|
|
kohub-cli org info my-org
|
|
|
|
# List user's organizations
|
|
kohub-cli org list
|
|
kohub-cli org list --username alice
|
|
|
|
# Add member
|
|
kohub-cli org member add my-org bob --role member
|
|
|
|
# Update member role
|
|
kohub-cli org member update my-org bob --role admin
|
|
|
|
# Remove member
|
|
kohub-cli org member remove my-org bob
|
|
```
|
|
|
|
### Repository Settings
|
|
|
|
```bash
|
|
# Update repository settings
|
|
kohub-cli settings repo update my-org/my-model --type model --private
|
|
kohub-cli settings repo update my-org/my-model --type model --public
|
|
kohub-cli settings repo update my-org/my-model --type model --gated auto
|
|
|
|
# Move/rename repository
|
|
kohub-cli settings repo move my-org/old-name my-org/new-name --type model
|
|
kohub-cli settings repo move my-user/my-model my-org/my-model --type model
|
|
|
|
# Squash repository history (WARNING: irreversible)
|
|
kohub-cli settings repo squash my-org/my-model --type model
|
|
```
|
|
|
|
### Branch and Tag Management
|
|
|
|
```bash
|
|
# Create branch
|
|
kohub-cli settings repo branch create my-org/my-model dev --type model
|
|
kohub-cli settings repo branch create my-org/my-model feature-x --type model --revision main
|
|
|
|
# Delete branch
|
|
kohub-cli settings repo branch delete my-org/my-model dev --type model
|
|
|
|
# Create tag
|
|
kohub-cli settings repo tag create my-org/my-model v1.0 --type model
|
|
kohub-cli settings repo tag create my-org/my-model v1.0 --type model --revision main --message "Release v1.0"
|
|
|
|
# Delete tag
|
|
kohub-cli settings repo tag delete my-org/my-model v1.0 --type model
|
|
```
|
|
|
|
### LFS Settings Management
|
|
|
|
**Get current LFS settings:**
|
|
```bash
|
|
kohub-cli settings repo lfs get my-org/my-model --type model
|
|
```
|
|
|
|
**Output:**
|
|
```
|
|
LFS Threshold:
|
|
Configured: 5.0 MB
|
|
Effective: 5.0 MB (repository)
|
|
|
|
LFS Keep Versions:
|
|
Configured: 10 versions
|
|
Effective: 10 versions (repository)
|
|
|
|
LFS Suffix Rules:
|
|
Active: .safetensors, .bin
|
|
|
|
Server Defaults:
|
|
Threshold: 10.0 MB
|
|
Keep Versions: 5 versions
|
|
```
|
|
|
|
**Set LFS threshold:**
|
|
```bash
|
|
# Set to 5MB
|
|
kohub-cli settings repo lfs threshold my-org/my-model --type model --threshold 5000000
|
|
|
|
# Reset to server default
|
|
kohub-cli settings repo lfs threshold my-org/my-model --type model --reset
|
|
```
|
|
|
|
**Manage keep versions:**
|
|
```bash
|
|
# Set to keep last 10 versions
|
|
kohub-cli settings repo lfs versions my-org/my-model --type model --count 10
|
|
|
|
# Reset to server default
|
|
kohub-cli settings repo lfs versions my-org/my-model --type model --reset
|
|
```
|
|
|
|
**Manage suffix rules:**
|
|
```bash
|
|
# Add suffix rules
|
|
kohub-cli settings repo lfs suffix my-org/my-model --type model --add .safetensors --add .bin
|
|
|
|
# Set suffix rules (replaces all)
|
|
kohub-cli settings repo lfs suffix my-org/my-model --type model --set .safetensors --set .gguf
|
|
|
|
# Remove specific suffix
|
|
kohub-cli settings repo lfs suffix my-org/my-model --type model --remove .bin
|
|
|
|
# Clear all suffix rules
|
|
kohub-cli settings repo lfs suffix my-org/my-model --type model --clear
|
|
```
|
|
|
|
### File Operations
|
|
|
|
```bash
|
|
# Upload file to repository
|
|
kohub-cli settings repo upload my-org/my-model model.safetensors --type model
|
|
kohub-cli settings repo upload my-org/my-model ./weights/model.bin --path weights/model.bin --type model --branch main --message "Upload model weights"
|
|
|
|
# Download file from repository
|
|
kohub-cli settings repo download my-org/my-model model.safetensors --type model
|
|
kohub-cli settings repo download my-org/my-model weights/model.bin -o ./local-model.bin --type model --revision v1.0
|
|
```
|
|
|
|
### User Settings
|
|
|
|
```bash
|
|
# Update user settings
|
|
kohub-cli settings user update --email newemail@example.com
|
|
```
|
|
|
|
### Organization Settings
|
|
|
|
```bash
|
|
# Update organization settings
|
|
kohub-cli settings organization update my-org --description "New description"
|
|
|
|
# List organization members
|
|
kohub-cli settings organization members my-org
|
|
```
|
|
|
|
### Configuration
|
|
|
|
```bash
|
|
# Set endpoint
|
|
kohub-cli config set endpoint http://localhost:28080
|
|
|
|
# Set token
|
|
kohub-cli config set token hf_...
|
|
|
|
# Get current endpoint
|
|
kohub-cli config get endpoint
|
|
|
|
# Show all configuration
|
|
kohub-cli config list
|
|
|
|
# Show operation history
|
|
kohub-cli config history
|
|
kohub-cli config history --limit 20
|
|
|
|
# Clear operation history
|
|
kohub-cli config clear-history
|
|
|
|
# Clear configuration
|
|
kohub-cli config clear
|
|
```
|
|
|
|
### Health Check
|
|
|
|
```bash
|
|
# Check service health
|
|
kohub-cli health
|
|
kohub-cli --output json health
|
|
```
|
|
|
|
**Output:**
|
|
```
|
|
KohakuHub Health Check
|
|
|
|
✓ API: Healthy
|
|
Site: KohakuHub
|
|
Version: 0.0.1
|
|
Endpoint: http://localhost:28080
|
|
|
|
✓ Auth: Authenticated as alice
|
|
```
|
|
|
|
### Interactive Mode
|
|
|
|
```bash
|
|
# Launch interactive TUI
|
|
kohub-cli interactive
|
|
|
|
# Or just run without arguments (default behavior)
|
|
kohub-cli
|
|
```
|
|
|
|
### Global Options
|
|
|
|
All commands support these global options:
|
|
|
|
```bash
|
|
--endpoint URL # Override endpoint (or use HF_ENDPOINT env var)
|
|
--token TOKEN # Override token (or use HF_TOKEN env var)
|
|
--output {json,text} # Output format (default: text)
|
|
--help # Show help
|
|
```
|
|
|
|
Examples:
|
|
```bash
|
|
kohub-cli --endpoint http://localhost:28080 auth whoami
|
|
kohub-cli --output json repo list --type model
|
|
kohub-cli --token hf_xxxxx repo create my-model --type model
|
|
```
|
|
|
|
## Configuration File Format
|
|
|
|
Located at `~/.kohub/config.json`:
|
|
|
|
```json
|
|
{
|
|
"endpoint": "http://localhost:28080",
|
|
"token": "hf_...",
|
|
"default_repo_type": "model",
|
|
"interactive_mode_default": true
|
|
}
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
### Python API
|
|
|
|
```python
|
|
from kohub_cli import KohubClient, KohubError, AuthenticationError, NotFoundError
|
|
|
|
client = KohubClient()
|
|
|
|
try:
|
|
client.create_repo("my-repo", repo_type="model")
|
|
except AuthenticationError:
|
|
print("Please login first")
|
|
except NotFoundError as e:
|
|
print(f"Not found: {e}")
|
|
except KohubError as e:
|
|
print(f"Error: {e}")
|
|
```
|
|
|
|
### CLI
|
|
|
|
```bash
|
|
$ kohub-cli repo create my-repo --type model
|
|
Error: Authentication required. Please login with 'kohub-cli auth login'
|
|
|
|
$ kohub-cli repo info nonexistent/repo --type model
|
|
Error: Repository not found: nonexistent/repo
|
|
|
|
$ kohub-cli --output json repo info nonexistent/repo --type model
|
|
{"error": "Repository not found", "code": "RepoNotFound", "details": "nonexistent/repo"}
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
- `HF_ENDPOINT` - KohakuHub endpoint URL (default: `http://localhost:28080`)
|
|
- `HF_TOKEN` - API token for authentication
|
|
- `KOHUB_CONFIG_DIR` - Config directory (default: `~/.kohub`)
|
|
|
|
## Interactive TUI Mode
|
|
|
|
The interactive TUI mode provides a full-featured menu-driven interface for managing KohakuHub. It's perfect for:
|
|
- Exploring available operations
|
|
- Interactive navigation with breadcrumb context
|
|
- Visual feedback and rich formatting
|
|
- Guided workflows with confirmation prompts
|
|
|
|
**Features:**
|
|
- Context-aware navigation (browse repos → select repo → manage files/commits)
|
|
- Error handling with helpful suggestions
|
|
- Session management with persistent config
|
|
- Rich UI with tables, panels, and progress indicators
|
|
- Support for Ctrl+C to go back at any prompt
|
|
|
|
**Access:**
|
|
```bash
|
|
kohub-cli # Default: launches interactive mode
|
|
kohub-cli interactive # Explicit: launches interactive mode
|
|
```
|
|
|
|
## Output Formatting
|
|
|
|
### Text Mode (Default)
|
|
|
|
Uses Rich library for beautiful terminal output:
|
|
- Tables for lists
|
|
- Panels for detailed information
|
|
- Color-coded badges
|
|
- Icons for file types
|
|
- Progress indicators
|
|
|
|
**Examples:**
|
|
|
|
**Repository info with stats:**
|
|
```
|
|
┌─ Model Repository ──────────────────────────────────────┐
|
|
│ org/my-model │
|
|
│ ────────────────────────────────────────────────────────│
|
|
│ Author: org │
|
|
│ Type: model │
|
|
│ Visibility: 🌐 Public │
|
|
│ Created: 2025-01-15T12:00:00Z │
|
|
│ │
|
|
│ Downloads: 1234 │
|
|
│ Likes: 42 │
|
|
└──────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
**File listing with LFS indicators:**
|
|
```
|
|
org/my-model (main)
|
|
├── 📁 configs
|
|
│ └── 📄 config.json (1.2 KB)
|
|
├── 📄 README.md (5.0 KB)
|
|
└── 📄 model.safetensors (5.2 GB) (LFS)
|
|
```
|
|
|
|
### JSON Mode
|
|
|
|
Machine-readable output for scripting:
|
|
|
|
```bash
|
|
kohub-cli --output json repo info my-org/my-model --type model
|
|
```
|
|
|
|
```json
|
|
{
|
|
"id": "my-org/my-model",
|
|
"author": "my-org",
|
|
"private": false,
|
|
"downloads": 1234,
|
|
"likes": 42,
|
|
"createdAt": "2025-01-15T12:00:00Z"
|
|
}
|
|
```
|
|
|
|
## Advanced Features
|
|
|
|
### Operation History Tracking
|
|
|
|
The CLI automatically tracks all operations in a history file:
|
|
|
|
```bash
|
|
# View recent operations
|
|
kohub-cli config history --limit 20
|
|
```
|
|
|
|
**Example output:**
|
|
```
|
|
┌─ Recent Operations ────────────────────────────────────┐
|
|
│ Time │ Operation │ Details │
|
|
├────────────────────┼──────────────┼────────────────────┤
|
|
│ 2025-01-15 12:30 │ create_repo │ repo=org/model │
|
|
│ 2025-01-15 12:25 │ login │ username=alice │
|
|
│ 2025-01-15 12:20 │ create_token │ name=my-laptop │
|
|
└────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### Autocomplete Support
|
|
|
|
Future feature: Shell autocomplete for bash/zsh/fish
|
|
|
|
## Command Structure Overview
|
|
|
|
```
|
|
kohub-cli
|
|
├── auth
|
|
│ ├── login # Login with username/password
|
|
│ ├── logout # Logout current session
|
|
│ ├── whoami # Show current user
|
|
│ └── token
|
|
│ ├── create # Create new API token
|
|
│ ├── list # List all tokens
|
|
│ └── delete # Delete a token
|
|
├── repo
|
|
│ ├── create # Create repository
|
|
│ ├── delete # Delete repository
|
|
│ ├── info # Show repository info (with downloads/likes)
|
|
│ ├── list # List repositories
|
|
│ ├── ls # List repositories under a namespace
|
|
│ ├── files # List repository files (with LFS indicators)
|
|
│ ├── commits # List commit history
|
|
│ ├── commit # Show commit details
|
|
│ └── commit-diff # Show commit diff
|
|
├── org
|
|
│ ├── create # Create organization
|
|
│ ├── info # Show organization info
|
|
│ ├── list # List user's organizations
|
|
│ └── member
|
|
│ ├── add # Add member to org
|
|
│ ├── remove # Remove member from org
|
|
│ └── update # Update member role
|
|
├── settings
|
|
│ ├── user
|
|
│ │ └── update # Update user settings
|
|
│ ├── repo
|
|
│ │ ├── update # Update repository settings
|
|
│ │ ├── move # Move/rename repository
|
|
│ │ ├── squash # Squash repository history
|
|
│ │ ├── upload # Upload file to repository
|
|
│ │ ├── download # Download file from repository
|
|
│ │ ├── branch
|
|
│ │ │ ├── create # Create branch
|
|
│ │ │ └── delete # Delete branch
|
|
│ │ ├── tag
|
|
│ │ │ ├── create # Create tag
|
|
│ │ │ └── delete # Delete tag
|
|
│ │ └── lfs # LFS settings management (NEW)
|
|
│ │ ├── get # Get LFS settings
|
|
│ │ ├── threshold # Set/reset threshold
|
|
│ │ ├── versions # Set/reset keep versions
|
|
│ │ └── suffix # Manage suffix rules
|
|
│ └── organization
|
|
│ ├── update # Update organization settings
|
|
│ └── members # List organization members
|
|
├── config
|
|
│ ├── set # Set configuration value
|
|
│ ├── get # Get configuration value
|
|
│ ├── list # Show all configuration
|
|
│ ├── clear # Clear all configuration
|
|
│ ├── history # Show operation history
|
|
│ └── clear-history # Clear operation history
|
|
├── health # Check service health
|
|
└── interactive # Launch interactive TUI mode
|
|
```
|
|
|
|
## Implementation Status
|
|
|
|
### ✅ Phase 1: Python API (COMPLETED)
|
|
- [x] Create `KohubClient` class
|
|
- [x] Implement user operations
|
|
- [x] Implement token management
|
|
- [x] Implement organization operations
|
|
- [x] Implement repository operations
|
|
- [x] Add proper error classes
|
|
- [x] Add configuration management
|
|
- [x] File upload/download support
|
|
- [x] LFS settings management
|
|
|
|
### ✅ Phase 2: CLI Commands (COMPLETED)
|
|
- [x] Set up Click command structure
|
|
- [x] Implement `auth` commands
|
|
- [x] Implement `repo` commands
|
|
- [x] Implement `org` commands
|
|
- [x] Implement `config` commands
|
|
- [x] Implement `settings` commands (user, repo, organization)
|
|
- [x] Add global options support
|
|
- [x] Add output formatting (JSON/text)
|
|
- [x] Implement branch/tag management
|
|
- [x] Rich output formatting with tables and panels
|
|
- [x] LFS settings commands
|
|
- [x] Operation history tracking
|
|
|
|
### ✅ Phase 3: Enhanced Features (COMPLETED)
|
|
- [x] Rich output formatting with tables
|
|
- [x] Operation history tracking
|
|
- [x] Health check command
|
|
- [x] File upload/download commands
|
|
- [x] Commit history viewing
|
|
- [x] Repository squash command
|
|
- [x] Config history management
|
|
- [x] LFS settings management
|
|
- [x] Pretty-printed displays
|
|
|
|
### 📋 Phase 4: Future Enhancements
|
|
- [ ] Bash/Zsh/Fish completion scripts
|
|
- [ ] Progress bars for long operations
|
|
- [ ] Configuration wizard
|
|
- [ ] Batch operations support
|
|
- [ ] Plugin system
|
|
- [ ] Alias support
|
|
- [ ] History undo functionality
|
|
|
|
## Dual-Mode Design
|
|
|
|
Both command mode and interactive TUI mode are fully implemented and production-ready:
|
|
|
|
- **Command Mode**: Best for scripting, automation, CI/CD pipelines
|
|
- **Interactive Mode**: Best for exploration, learning, and interactive management
|
|
|
|
Use whichever mode fits your workflow!
|
|
|
|
## Success Metrics
|
|
|
|
1. **Usability**: 90% of operations possible via CLI without interactive mode ✅
|
|
2. **API Coverage**: 100% of HTTP endpoints wrapped in Python API ✅
|
|
3. **Documentation**: Every function/command has examples ✅
|
|
4. **Performance**: CLI commands respond in <1s for metadata operations ✅
|
|
|
|
## Testing
|
|
|
|
### Unit Tests
|
|
```python
|
|
def test_create_repo():
|
|
client = KohubClient(endpoint="http://test", token="test_token")
|
|
with mock_http_response(200, {"repo_id": "test/repo"}):
|
|
result = client.create_repo("test/repo", repo_type="model")
|
|
assert result["repo_id"] == "test/repo"
|
|
```
|
|
|
|
### Integration Tests
|
|
```bash
|
|
# Test CLI commands
|
|
kohub-cli --endpoint http://test-server:8000 auth login --username test --password test
|
|
kohub-cli repo create test-repo --type model
|
|
kohub-cli repo info test-repo --type model
|
|
kohub-cli repo delete test-repo --type model
|
|
```
|
|
|
|
## Future Considerations
|
|
|
|
1. **Async Support**: `AsyncKohubClient` for async Python applications
|
|
2. **Streaming**: Progress callbacks for large operations
|
|
3. **Caching**: Cache repo metadata locally
|
|
4. **Webhooks**: CLI support for webhook management
|
|
5. **Desktop App**: Electron wrapper for non-technical users
|