Timothy Pomeroy c3b3feecc6 Update Docker configuration to support SQLite, FFmpeg, and CLI as default shell 1 mesiac pred
..
apps 7b7c4f0ac9 Initial commit 1 mesiac pred
src b63ce13163 Update READMEs, add data README, remove legacy code, move dev notes to docs 1 mesiac pred
README.md c3b3feecc6 Update Docker configuration to support SQLite, FFmpeg, and CLI as default shell 1 mesiac pred
package.json b63ce13163 Update READMEs, add data README, remove legacy code, move dev notes to docs 1 mesiac pred
tsconfig.json 7b7c4f0ac9 Initial commit 1 mesiac pred

README.md

Watch Finished CLI

A Node.js CLI for interacting with the Watch Finished system. Provides commands for managing files, settings, tasks, and maintenance from the terminal.

CLI Command Structure

graph TD
    CLI[watch-finished-cli] --> INTER[Interactive Mode<br/>Default]
    CLI --> DIRECT[Direct Commands]

    INTER --> MENU[Menu-Driven Interface<br/>Guided prompts]
    DIRECT --> HELP[--help<br/>Command reference]

    DIRECT --> FILES[File Commands]
    DIRECT --> TASKS[Task Commands]
    DIRECT --> CONFIG[Config Commands]
    DIRECT --> WATCHER[Watcher Commands]
    DIRECT --> MAINT[Maintenance Commands]

    FILES --> FLIST[files:list<br/>List dataset files]
    FILES --> FGET[file:get<br/>Get file details]
    FILES --> FSET[file:set<br/>Create/update file]
    FILES --> FREMOVE[file:remove<br/>Delete file]
    FILES --> FDELETED[files:deleted-older-than<br/>Find old deleted files]

    TASKS --> TLIST[task:list<br/>List all tasks]
    TASKS --> TGET[task:get<br/>Get task details]
    TASKS --> TREMOVE[task:remove<br/>Delete task]
    TASKS --> TSETTINGS[task:queue-settings<br/>Update queue config]

    CONFIG --> CLIST[config:list<br/>List all settings]
    CONFIG --> CGET[config:get<br/>Get setting value]
    CONFIG --> CSET[config:set<br/>Update setting]

    WATCHER --> WSTATUS[watcher:status<br/>Get watcher status]
    WATCHER --> WSTART[watcher:start<br/>Start file watching]
    WATCHER --> WSTOP[watcher:stop<br/>Stop file watching]

    MAINT --> MCLEANUP[maintenance:cleanup<br/>Clean up files]
    MAINT --> MPURGE[maintenance:purge<br/>Purge old data]
    MAINT --> MPRUNE[maintenance:prune<br/>Remove orphaned files]

    style INTER fill:#e3f2fd
    style DIRECT fill:#f3e5f5
    style FILES fill:#e8f5e8
    style TASKS fill:#fff3e0
    style CONFIG fill:#fce4ec
    style WATCHER fill:#f1f8e9
    style MAINT fill:#e0f2f1

Usage

pnpm run cli <command> [...args]

Note: The CLI defaults to connecting to http://localhost:3001. If your service runs on a different port, set the WATCH_FINISHED_API environment variable:

WATCH_FINISHED_API=http://localhost:3000 pnpm run cli <command>

Interactive Mode

The CLI launches in interactive mode by default for a guided, menu-driven experience. Use specific commands for automation or pass --help for command-line usage.

# Interactive mode (default)
pnpm run cli

# Command-line mode for automation
pnpm run cli task:list

# Show help
pnpm run cli --help

The interactive mode provides:

  • Menu-driven navigation through all available commands
  • Guided parameter input with prompts and validation
  • Contextual help and error handling
  • Colored output for better readability

Main Commands

Main Commands

File Management

  • list --dataset <dataset> — List files in a dataset
  • file:get --dataset <dataset> --file <file> — Get a file record
  • file:set --dataset <dataset> --file <file> [options] — Set (create/update) a file record
  • file:remove --dataset <dataset> --file <file> [options] — Remove a file record
  • files:deleted-older-than --dataset <dataset> --isoDate <date> — Get deleted files older than a date

Configuration

  • config:list — List available config files
  • config:settings [key] — Get settings (optionally by key)
  • config:file --name <name> — Get a config file by name

Task Management

  • task:list — List all tasks
  • task:get --id <id> — Get a task by ID
  • task:delete --id <id> — Delete a task by ID
  • task:queue:status — Get queue status
  • task:queue:settings — Get queue settings
  • task:queue:settings:update [options] — Update queue settings

Watcher Control

  • watcher:start [options] — Start the watcher
  • watcher:stop — Stop the watcher
  • watcher:status — Get watcher status

Maintenance

  • maintenance:cleanup [options] — Cleanup a file from DB if missing
  • maintenance:purge [options] — Purge deleted records older than a threshold
  • maintenance:prune [options] — Prune processed files that no longer exist

HandBrake

  • handbrake:presets — List HandBrake presets
  • handbrake:process [options] — Process a video file with HandBrake

Task Queue Settings Options

When updating queue settings with task:queue:settings:update, you can specify:

  • --batch-size <number> — Number of tasks to process in each batch
  • --concurrency <number> — Maximum number of concurrent tasks
  • --retry-enabled <true|false> — Enable/disable retry logic
  • --max-retries <number> — Maximum number of retry attempts
  • --retry-delay <milliseconds> — Delay between retry attempts
  • --processing-interval <milliseconds> — Interval between processing cycles

Examples

# List all tasks (uses default localhost:3001)
pnpm run cli task:list

# Get current queue settings
pnpm run cli task:queue:settings

# Update queue settings (increase batch size and concurrency)
pnpm run cli task:queue:settings:update --batch-size 5 --concurrency 3

# Start the file watcher
pnpm run cli watcher:start --watches "/data/movies,/data/tvshows"

# Process a video file
pnpm run cli handbrake:process --input input.mp4 --output output.m4v --preset "Fast 1080p30"

# Get settings
pnpm run cli config:settings

# Add a file record
pnpm run cli file:set --dataset movies --file mymovie.mkv --output mymovie.mp4 --status completed

# Launch interactive mode (also the default when no command is specified)
pnpm run cli

# If your service runs on a different port, set the environment variable
WATCH_FINISHED_API=http://localhost:3000 pnpm run cli task:list

Running in Docker

The CLI is the default entrypoint for the Docker container, making it easy to run CLI commands:

# Interactive CLI (default when running container)
docker-compose run --rm app

# Direct CLI commands
docker-compose run --rm app files:list --dataset movies
docker-compose run --rm app task:list
docker-compose run --rm app config:get datasets

# Run development servers instead
docker-compose run --rm app pnpm dev

When running the CLI from within a running Docker container:

docker-compose exec app pnpm run cli task:list