spacedrive/docs/cli/overview.mdx
2025-11-14 21:31:21 -08:00

412 lines
11 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Spacedrive CLI
A comprehensive command-line interface for managing Spacedrive Core with full daemon architecture, real-time monitoring, and cross-device file management.
## Features
- ** Daemon Architecture**: Background daemon with client-server communication
- **Library Management**: Create, open, switch, and manage multiple libraries
- **Location Management**: Add, remove, and monitor indexed locations with real-time watching
- ** Job Management**: View, monitor, and control background jobs with live progress
- **Real-time Monitoring**: Beautiful TUI for monitoring job progress and system events
- **Indexing Control**: Start indexing jobs with different modes (shallow/content/deep)
- **Networking Support**: Device pairing, file sharing via Spacedrop
- **Multiple Instances**: Run isolated daemon instances for different use cases
- **Comprehensive Logging**: Built-in logging with file output for debugging
- ** Cross-platform**: Works on macOS, Linux, and Windows
- **Rich UI**: Colored output, progress bars, and formatted tables
### New Modular Architecture Benefits
The refactored daemon architecture provides:
- **Maintainability**: Each domain (library, location, job, etc.) is isolated in its own handler module
- **Extensibility**: New commands can be added by simply creating a new handler
- **Type Safety**: All commands and responses are strongly typed
- **Code Organization**: Clear separation between command handling, business logic, and transport
- **Testability**: Individual handlers can be unit tested in isolation
- **Performance**: Efficient command routing through handler registry
## Installation
```bash
# Build the CLI
cargo build --release --package sd-cli --package sd-core
# Or build just the CLI for development
cd apps/cli && cargo build
# Install globally (optional)
cargo install --path apps/cli
```
Also you may create an alias to the cli as `sd` or `spacedrive`.
Example for `sd`:
```bash
# For release build
echo 'alias sd="/path/to/spacedrive/target/release/sd-cli"' >> ~/.zshrc
# For debug build (faster compilation)
echo 'alias sd="/path/to/spacedrive/target/debug/sd-cli"' >> ~/.zshrc
# Reload your shell configuration
source ~/.zshrc
```
## Quick Start
```bash
# Start the Spacedrive daemon
sd start
# Create a library and add a location
sd library create "Personal"
sd location add ~/Desktop --name "Desktop"
# Monitor indexing progress
sd job monitor
# Check system status
sd status
```
**Note**: If you haven't set up the alias, use `./target/debug/sd-cli` or `./target/release/sd-cli` instead of `sd`.
## Usage
### Daemon Management
```bash
# Start daemon in background
sd start
# Start daemon with networking enabled
sd start
# Start daemon in foreground (for debugging)
sd start --foreground
# Stop the daemon
sd stop
# Check daemon status
sd status
```
### Daemon Auto-Start (macOS)
Set up the daemon to start automatically on login:
```bash
# Install auto-start service
sd daemon install
# Check installation status
sd daemon status
# Remove auto-start service
sd daemon uninstall
```
The install command creates a LaunchAgent that starts the daemon on login and restarts it if it crashes. Logs write to your data directory at `~/Library/Application Support/spacedrive/logs/`. This works with multiple instances by passing `--instance` before the daemon command.
<Note>
Auto-start is currently macOS-only. Linux systemd support is planned.
</Note>
### Multiple Daemon Instances
The CLI supports running multiple isolated daemon instances:
```bash
# Run a separate daemon instance
sd --instance test start
sd --instance test library create "Test Library"
# Stop specific instance
sd --instance test stop
# Install auto-start for specific instance
sd --instance test daemon install
```
### Basic Commands
```bash
# Show help
sd --help
# Enable verbose logging
sd -v <command>
# Use custom data directory
sd --data-dir /path/to/data <command>
```
### Library Management
```bash
# Create a new library
sd library create "My Library"
sd library create "My Library" --path /custom/path
# List all libraries
sd library list
# Open an existing library
sd library open /path/to/library
# Switch to a library by name or ID
sd library switch "My Library"
sd library switch 12345678-1234-1234-1234-123456789012
# Show current library
sd library current
# Close current library
sd library close
```
### Location Management
```bash
# Add a location to index (automatically starts watching)
sd location add ~/Documents
sd location add ~/Pictures --name "My Photos" --mode deep
# List all locations with status
sd location list
# Remove a location (stops watching and indexing)
sd location remove <location-id>
# Rescan a location (triggers re-indexing)
sd location rescan <location-id>
sd location rescan <location-id> --force # Full rescan, ignore change detection
```
**Note**: Location IDs are UUIDs displayed in the list command. All location operations work with the daemon automatically.
### Enhanced Indexing
The new indexing system supports different scopes and persistence modes:
```bash
# Quick scan of current directory only (no subdirectories)
sd index quick-scan /path/to/directory --scope current
# Quick scan with ephemeral mode (no database writes)
sd index quick-scan /path/to/directory --scope current --ephemeral
# Browse external paths without adding to managed locations
sd index browse /media/external-drive --scope current
sd index browse /network/drive --scope recursive --content
# Index managed locations with specific scope
sd index location /managed/location --scope current --mode shallow
sd index location <location-uuid> --scope recursive --mode deep
# Legacy full location indexing (backward compatibility)
sd scan /path/to/directory --mode content --watch
```
**Index Scopes:**
- `current`: Index only the specified directory (single level)
- `recursive`: Index the directory and all subdirectories
**Index Modes:**
- `shallow`: Metadata only (fastest)
- `content`: Metadata + content hashing (moderate)
- `deep`: Full analysis including media metadata (slowest)
**Use Cases:**
- **UI Navigation**: `quick-scan --scope current` for instant directory viewing
- **External Browsing**: `browse --ephemeral` for exploring non-managed paths
- **Location Updates**: `location --scope current` to refresh specific directories
### Job Management
```bash
# List all jobs with colored status and progress
sd job list
sd job list --status running # Filter by status
# Show detailed job information
sd job info <job-id>
# Monitor jobs in real-time with live progress bars
sd job monitor
sd job monitor --job-id <job-id> # Monitor specific job
# Control jobs (planned features)
sd job pause <job-id>
sd job resume <job-id>
sd job cancel <job-id>
```
**Job Monitor Features:**
- Live progress bars for running jobs
- Color-coded status (running: yellow, completed: green, failed: red)
- Real-time updates every second
- Automatic cleanup of completed jobs
- Ctrl+C to exit gracefully
### File Operations
```bash
# Copy files with progress tracking
sd file copy ~/source.txt ~/destination.txt
sd file copy ~/Photos/*.jpg ~/Backup/ --verify
# Move files
sd file move ~/Downloads/*.pdf ~/Documents/ --preserve-timestamps
# Advanced copy options
sd file copy ~/Project/ ~/Backup/Project/ \
--overwrite \
--verify \
--preserve-timestamps
```
### System Commands
```bash
# Show system status
sd status
# Monitor all system activity (TUI)
sd monitor
# View daemon logs
sd system logs
sd system logs --tail 50
```
### Networking & Device Management
```bash
# Initialize networking (if daemon wasn't started with)
sd network init
# Start/stop networking
sd network start
sd network stop
# List connected devices
sd network devices
# Device pairing
sd network pair --initiate # Generate pairing code
sd network pair --join <code> # Join using code
sd network pair --status # Check pairing status
# Spacedrop (file sharing)
sd network spacedrop <device-id> /path/to/file --sender "Your Name"
# Remove paired device
sd network revoke <device-id>
```
## Real-time Job Monitor
The job monitor provides live progress tracking with beautiful visual indicators:
```bash
sd job monitor
```
### Monitor Features
- **Multi-job tracking**: Monitor all running jobs simultaneously
- **Progress bars**: Visual progress indicators with percentage
- **Color coding**: Status-based colors (yellow=running, green=completed, red=failed)
- **Real-time updates**: Updates every second with latest progress
- **Smart cleanup**: Completed jobs automatically marked and removed
- **Job filtering**: Option to monitor specific jobs
### Sample Output
```
Spacedrive Job Monitor - Press Ctrl+C to exit
═══════════════════════════════════════════
⠚ Indexing Desktop [fdbe777d] [████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 25% | Status: Running
⠂ Indexing Photos [a1b2c3d4] [██████████████████████████████████████████] 100% | Completed
⠈ Content Analysis [e5f6g7h8] [██████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 15% | Status: Running
```
## Indexing Modes
- **Shallow**: Fast metadata-only indexing (file names, sizes, dates)
- **Content**: Standard indexing with content hashing for deduplication
- **Deep**: Comprehensive analysis including media metadata extraction
## Examples
### Complete Workflow
```bash
# 1. Start the daemon
sd start
# 2. Create a library
sd library create "Personal"
# 3. Add locations with different index modes
sd location add ~/Desktop --name "Desktop" --mode content
sd location add ~/Documents --name "Documents" --mode content
sd location add ~/Pictures --name "Photos" --mode deep
# 4. Add cloud storage
sd volume add-cloud "S3 Backup" --service s3 --bucket my-backup --region us-west-2
# 5. Monitor the indexing progress
sd job monitor
# 6. Copy files to cloud using unified URIs
sd cp local://macbook/Desktop/important.pdf s3://my-backup/documents/
# 7. Check the results
sd location list
sd job list
```
### Multiple Libraries
```bash
# Work with multiple libraries
sd library create "Work"
sd library create "Personal"
sd library list
sd library switch "Work"
sd location add ~/Work/Projects
```
### Batch Indexing
```bash
# Index multiple locations
sd location add ~/Documents --name "Docs"
sd location add ~/Pictures --name "Photos" --mode deep
sd location add ~/Downloads --name "Downloads" --mode shallow
sd job list --status running
```
## Architecture
The CLI follows a modular architecture with clear separation of concerns:
- **Client**: Lightweight CLI that communicates with daemon
- **Daemon**: Long-running background service managing Core
- **Handlers**: Modular command processors for each domain
- **Transport**: JSON-RPC communication over Unix socket
- **Core**: Spacedrive Core library for all operations
### Benefits
1. **Performance**: Daemon keeps Core loaded in memory
2. **Persistence**: Operations continue after CLI exits
3. **Concurrency**: Multiple CLI clients can connect
4. **Monitoring**: Real-time tracking of background tasks
5. **Isolation**: Multiple instances for testing