Skip to main content

tersify/
lib.rs

1//! # tersify
2//!
3//! Universal LLM context compressor. Pipe anything — code, JSON, logs, git diffs — and
4//! get a token-optimized version ready to send to any language model.
5//!
6//! ## As a CLI
7//!
8//! ```bash
9//! cat src/main.rs | tersify --verbose
10//! cat src/main.rs | tersify --ast          # signatures only, bodies stubbed
11//! git diff HEAD~1 | tersify
12//! tersify src/                             # entire directory
13//! tersify install                          # set up Claude Code hooks
14//! tersify install --cursor                 # set up Cursor IDE rule
15//! tersify bench                            # benchmark savings across content types
16//! tersify stats                            # show cumulative savings
17//! ```
18//!
19//! ## As a library
20//!
21//! ```rust
22//! use tersify::{compress::{self, CompressOptions}, detect};
23//!
24//! // Basic compression
25//! let input = r#"{"name":"foo","empty":null}"#;
26//! let content_type = detect::detect(input);
27//! let compressed = compress::compress(input, &content_type, None).unwrap();
28//! assert_eq!(compressed, r#"{"name":"foo"}"#);
29//!
30//! // AST mode: extract function signatures (use detect_for_path for Code type)
31//! let src = "fn add(a: i32, b: i32) -> i32 {\n    a + b\n}\n";
32//! let ct = detect::detect_for_path(std::path::Path::new("add.rs"), src);
33//! let opts = CompressOptions { ast: true, ..Default::default() };
34//! let out = compress::compress_with(src, &ct, &opts).unwrap();
35//! assert!(out.contains("fn add(a: i32, b: i32) -> i32"));
36//! assert!(!out.contains("a + b"));
37//! ```
38
39pub mod compress;
40pub mod detect;
41pub mod error;
42pub mod input;
43pub mod tokens;