feat: update core API, database layer, and worker modules

- Remove unused imports (n8n_search, universal_search, Client, Arc, etc.)
- Update API endpoints for identity, face recognition, search
- Fix postgres_db.rs search_videos parent_uuid column
- Add snapshot API and identity agent API
- Clean up backup files (.bak, .bak2)
This commit is contained in:
Warren
2026-04-30 15:07:02 +08:00
parent 8f2208dd63
commit 2b23d1cfbd
148 changed files with 8553 additions and 48637 deletions

215
src/cli/args.rs Normal file
View File

@@ -0,0 +1,215 @@
use clap::{Parser, Subcommand};
#[derive(Parser)]
#[command(name = "momentry")]
#[command(about = "Digital asset management system with video analysis and RAG")]
#[command(version = env!("BUILD_VERSION"))]
pub struct Cli {
#[command(subcommand)]
pub command: Commands,
}
#[derive(Subcommand)]
pub enum Commands {
/// Register a video file
Register {
/// Video file path or URL
path: String,
},
/// Process video (generate all JSON files)
Process {
/// UUID or path
target: String,
/// Modules to process (comma separated: asr,cut,asrx,yolo,ocr,face,pose,story,caption)
/// If not specified, processes all modules
#[arg(short, long, value_delimiter = ',')]
modules: Option<Vec<String>>,
/// Modules to process via cloud (comma separated)
/// Example: --cloud asr,yolo
#[arg(long, value_delimiter = ',')]
cloud: Option<Vec<String>>,
/// Force reprocess even if JSON exists (skip completeness check)
#[arg(long, default_value = "false")]
force: bool,
/// Resume from last checkpoint if processing was interrupted
#[arg(long, default_value = "false")]
resume: bool,
},
/// Generate chunks and store in database
Chunk {
/// UUID
uuid: String,
},
/// Generate story for cut scenes
Story {
/// UUID
uuid: String,
},
/// Vectorize chunks
Vectorize {
/// UUID (or 'all' for all)
uuid: String,
},
/// Play video with overlays
Play {
/// Video path or UUID
target: String,
},
/// Start watching directories
Watch {
/// Directories to watch (comma separated)
directories: Option<String>,
},
/// Check system resources and recommend processing strategy
System {
/// Show detailed GPU info (NVIDIA/MPS)
#[arg(long)]
gpu: bool,
},
/// Start API server
Server {
/// Host
#[arg(long, default_value = "127.0.0.1")]
host: String,
/// Port (defaults to MOMENTRY_SERVER_PORT env var, or 3002 for production)
#[arg(long)]
port: Option<u16>,
},
/// Start job worker
Worker {
/// Max concurrent processors
#[arg(long)]
max_concurrent: Option<usize>,
/// Poll interval in seconds
#[arg(long)]
poll_interval: Option<u64>,
/// Batch size
#[arg(long)]
batch_size: Option<i32>,
},
/// Query using RAG
Query {
/// Query text
query: String,
},
/// Lookup UUID from path
Lookup {
/// File path
path: String,
},
/// Resolve path from UUID
Resolve {
/// UUID
uuid: String,
},
/// Generate thumbnails for videos
Thumbnails {
/// UUID (optional, generates for all if not specified)
uuid: Option<String>,
/// Number of thumbnails per video
#[arg(short, long, default_value = "6")]
count: u32,
},
/// Show storage status report
Status {
/// UUID (optional, shows all if not specified)
uuid: Option<String>,
},
/// Manage output backups
Backup {
/// Action: list, cleanup
action: String,
/// Days to keep (for cleanup)
days: Option<u32>,
},
/// Manage API keys
ApiKey {
/// Action: create, list, validate, revoke, rotate, stats
#[arg(value_enum)]
action: ApiKeyAction,
/// Key name (for create)
name: Option<String>,
/// Key type (system, user, service, integration, emergency)
#[arg(long)]
key_type: Option<String>,
/// TTL in days (for create)
#[arg(long)]
ttl: Option<i64>,
/// API key to validate/revoke
#[arg(long)]
key: Option<String>,
},
/// Manage Gitea API tokens
Gitea {
/// Action: create, list, delete, verify
#[arg(value_enum)]
action: GiteaAction,
/// Gitea username
#[arg(long)]
username: Option<String>,
/// Gitea password (for create/list/delete)
#[arg(long)]
password: Option<String>,
/// Token name (for create/delete)
#[arg(long)]
token_name: Option<String>,
/// Token scopes (comma separated: read:repository,write:issue)
#[arg(long)]
scopes: Option<String>,
},
/// Manage n8n API keys
N8n {
/// Action: create, list, delete, verify
#[arg(value_enum)]
action: N8nAction,
/// n8n API key (for create/list/delete)
#[arg(long)]
api_key: Option<String>,
/// API key label (for create/delete)
#[arg(long)]
label: Option<String>,
/// Expiration days (for create)
#[arg(long)]
expires_in_days: Option<i64>,
},
}
#[derive(clap::ValueEnum, Clone, Debug)]
pub enum ApiKeyAction {
Create,
List,
Validate,
Revoke,
Rotate,
Stats,
}
#[derive(clap::ValueEnum, Clone, Debug)]
pub enum GiteaAction {
Create,
List,
Delete,
Verify,
}
#[derive(clap::ValueEnum, Clone, Debug)]
pub enum N8nAction {
Create,
List,
Delete,
Verify,
}
/// Parse key type from string
pub fn parse_key_type(s: Option<&str>) -> momentry_core::core::api_key::ApiKeyType {
use momentry_core::core::api_key::ApiKeyType;
match s.map(|s| s.to_lowercase()).as_deref() {
Some("system") => ApiKeyType::System,
Some("user") => ApiKeyType::User,
Some("service") => ApiKeyType::Service,
Some("integration") => ApiKeyType::Integration,
Some("emergency") => ApiKeyType::Emergency,
_ => ApiKeyType::User,
}
}

5
src/cli/mod.rs Normal file
View File

@@ -0,0 +1,5 @@
//! CLI command definitions and argument parsing
pub mod args;
pub use args::*;