← Files Public Equity InvestingARCHIVED FILE

skills/user-context/scripts/reset_user_context_state.py

2.89 KB · Oct 2, 2026 · 00:03 UTC

↓ Download file

#!/usr/bin/env python3
"""Back up and clear local Public Equity Investing user-context foundation files."""

from __future__ import annotations

import argparse
import shutil
import sys
from datetime import datetime
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parent))
from state_paths import PLUGIN_LABEL, STATE_DIR_HELP, STATE_FILENAMES, resolve_state_dir


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(
        description=f"Move active {PLUGIN_LABEL} local state files into a sibling backup directory."
    )
    parser.add_argument(
        "--codex-home",
        type=Path,
        default=None,
        help="Codex home directory. Defaults to $CODEX_HOME or ~/.codex.",
    )
    parser.add_argument("--state-dir", type=Path, default=None, help=STATE_DIR_HELP)
    parser.add_argument(
        "--backup-dir",
        type=Path,
        default=None,
        help="Backup directory to create. Defaults to a timestamped sibling directory.",
    )
    parser.add_argument(
        "--dry-run",
        action="store_true",
        help="Print what would move without changing files.",
    )
    return parser.parse_args()


def resolve_paths(args: argparse.Namespace) -> tuple[Path, Path]:
    state_dir = resolve_state_dir(args.codex_home, args.state_dir)
    if args.backup_dir:
        backup_dir = args.backup_dir.expanduser()
    else:
        timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
        backup_dir = state_dir.parent / f"{state_dir.name}-backup-{timestamp}"
    return state_dir, backup_dir


def main() -> int:
    args = parse_args()
    state_dir, backup_dir = resolve_paths(args)
    existing_state_files = [
        state_dir / filename for filename in STATE_FILENAMES if (state_dir / filename).exists()
    ]

    if not existing_state_files:
        print(f"No active {PLUGIN_LABEL} state files found in: {state_dir}")
        return 0
    if backup_dir.exists():
        print(f"Backup directory already exists: {backup_dir}", file=sys.stderr)
        return 1

    if args.dry_run:
        print(f"{PLUGIN_LABEL} state directory: {state_dir}")
        print(f"Backup directory: {backup_dir}")
        for path in existing_state_files:
            print(f"would move: {path.name}")
        print("Dry run only; no files were moved.")
        return 0

    backup_dir.mkdir(parents=True)
    for path in existing_state_files:
        shutil.move(str(path), str(backup_dir / path.name))

    try:
        state_dir.rmdir()
        directory_status = "removed because it was empty"
    except OSError:
        directory_status = "kept because it still contains other files"

    print(f"{PLUGIN_LABEL} state directory: {state_dir}")
    print(f"Backup directory: {backup_dir}")
    for path in existing_state_files:
        print(f"moved: {path.name}")
    print(f"state directory: {directory_status}")
    return 0


if __name__ == "__main__":
    sys.exit(main())

SHA-256: f1c147f7d77c85ecbdc464942a00b8a8a2c68553fbae9922d90c27b1b8b15f30