loctree 0.8.17

Structural code intelligence for AI agents. Scan once, query everything.
Documentation
use std::any::Any;
use std::panic;

use loctree::cli::entrypoint::{EntryOptions, run};

fn install_broken_pipe_handler() {
    let default_hook = panic::take_hook();
    panic::set_hook(Box::new(move |info| {
        let payload = info.payload();
        let is_broken = <dyn Any>::downcast_ref::<&str>(payload)
            .is_some_and(|s| s.contains("Broken pipe"))
            || <dyn Any>::downcast_ref::<String>(payload)
                .is_some_and(|s| s.contains("Broken pipe"));

        if is_broken {
            std::process::exit(0);
        }

        default_hook(info);
    }));
}

fn main() -> std::io::Result<()> {
    install_broken_pipe_handler();

    run(&EntryOptions {
        binary_name: "loctree",
        deprecated: false,
        show_banner: false,
        usage: USAGE,
    })
}

const USAGE: &str = "loctree - Compatibility alias for `loct`\n\n\
`loct` is the canonical CLI command. `loctree` remains available as a quiet\n\
compatibility alias for existing scripts and muscle memory.\n\n\
Recommended:\n  \
  loct auto                      Full scan → cached artifacts\n  \
  loct slice src/foo.ts          Extract file context for AI agent\n  \
  loct report --html out.html    Generate visual HTML report\n\n\
Alias examples:\n  \
  loctree                        Same behavior as `loct auto`\n  \
  loctree slice src/foo.ts       Same behavior as `loct slice src/foo.ts`\n  \
  loctree --for-ai               Same behavior as `loct --for-ai`\n\n\
Run `loct --help` for the full command reference.\n";