Update analysis and plan files to enhance duplicate handling and reporting

- Updated `analysis.json` with a new generation timestamp.
- Modified `plan.json` to include a new plan ID and created timestamp, and changed operation types from "no-op" to "quarantine" for specific files needing manual review.
- Enhanced the README.md to document the new `--analysis` option for generating execution plans, which now includes a human-readable summary and duplicate handling strategies.
- Introduced a new `duplicate_resolve.py` module to manage duplicate file resolution strategies.
- Improved the execution engine to support quarantine operations and added rollback functionality for quarantined files.

These changes improve the functionality of the Video Library Manager by providing better duplicate management and clearer reporting capabilities.
This commit is contained in:
windyboy
2026-02-10 18:07:38 +08:00
parent dcd87754cf
commit 79f5ddf1f5
14 changed files with 882 additions and 456 deletions
+21 -4
View File
@@ -1,20 +1,24 @@
"""Plan command implementation."""
import json
from pathlib import Path
from typing import Optional
import click
from vlm.context import CLIContext
from vlm.io import identities_to_plan_input, load_identities_json
from vlm.io import identities_to_plan_input, load_identities_json, load_analysis_json
from vlm.planner import generate_plan, save_plan
def plan_cmd(ctx: CLIContext, input: Path, output: Path) -> None:
"""Generate execution plan from identities."""
def plan_cmd(ctx: CLIContext, input: Path, output: Path, analysis: Optional[Path] = None) -> None:
"""Generate execution plan from identities; optionally use analysis for duplicate handling."""
config = ctx.config
logger = ctx.logger
click.echo(f"Generating execution plan from: {input}")
if analysis:
click.echo(f"Using analysis: {analysis}")
click.echo()
identities_data = load_identities_json(input)
@@ -31,8 +35,21 @@ def plan_cmd(ctx: CLIContext, input: Path, output: Path) -> None:
identities_list = identities_to_plan_input(identities_data)
analysis_data = None
if analysis:
if not analysis.exists():
click.echo(f"Error: Analysis file not found: {analysis}", err=True)
click.echo("Run 'vlm analyze' first to generate analysis.json.", err=True)
raise FileNotFoundError(analysis)
try:
analysis_data = load_analysis_json(analysis)
except (json.JSONDecodeError, KeyError) as e:
click.echo(f"Error: Invalid or incomplete analysis file: {e}", err=True)
click.echo("Run 'vlm analyze' to regenerate analysis.json.", err=True)
raise
click.echo("Generating execution plan...")
execution_plan = generate_plan(identities_list, config)
execution_plan = generate_plan(identities_list, config, analysis_data=analysis_data)
click.echo()
click.echo("Plan generation complete!")