Skip to content

Commit 7c8c13f

Browse files
feat: convert to workspace and add edgee-compressor crate
Restructure the project as a Cargo workspace with two members: - crates/edgee-cli: the existing CLI binary (still emits `edgee`) - crates/compressor: new library crate with tool compression strategies extracted from fastly-ai-gateway (bash, claude, opencode, codex compressors) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent d1bf88b commit 7c8c13f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+8405
-27
lines changed

Cargo.lock

Lines changed: 23 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,3 @@
1-
[package]
2-
name = "edgee-cli"
3-
version = "0.1.10"
4-
edition = "2021"
5-
6-
[features]
7-
default = ["self-update"]
8-
self-update = ["dep:self_update"]
9-
10-
[[bin]]
11-
name = "edgee"
12-
path = "src/main.rs"
13-
14-
[dependencies]
15-
anyhow = "1"
16-
clap = { version = "4", features = ["derive", "env"] }
17-
colored = "2"
18-
console = "0.15"
19-
dialoguer = "0.11"
20-
open = "5"
21-
serde = { version = "1", features = ["derive"] }
22-
toml = "0.8"
23-
uuid = { version = "1", features = ["v4"] }
24-
tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "signal", "io-util"] }
25-
reqwest = { version = "0.12", features = ["json", "rustls-tls"], default-features = false }
26-
serde_json = "1"
27-
self_update = { version = "0.43.1", optional = true, default-features = false, features = ["reqwest", "rustls"] }
1+
[workspace]
2+
resolver = "2"
3+
members = ["crates/edgee-cli", "crates/compressor"]

crates/compressor/Cargo.toml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[package]
2+
name = "edgee-compressor"
3+
version = "0.1.0"
4+
edition = "2024"
5+
6+
[dependencies]
7+
serde = { version = "1", features = ["derive"] }
8+
serde_json = "1"
9+
regex = "1"
10+
lazy_static = "1"
11+
tracing = "0.1"

crates/compressor/src/lib.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
//! Tool output compression strategies for AI coding agents.
2+
//!
3+
//! Provides compressors for tool outputs from Claude Code, OpenCode, and Codex agents.
4+
//! Each compressor reduces token usage by summarizing tool results while preserving
5+
//! critical information.
6+
7+
pub mod strategy;
8+
pub mod util;
9+
10+
// Re-export key traits
11+
pub use strategy::bash::BashCompressor;
12+
pub use strategy::claude::ClaudeToolCompressor;
13+
14+
// Re-export compressor lookup functions
15+
pub use strategy::bash::compressor_for as bash_compressor_for;
16+
pub use strategy::claude::compressor_for as claude_compressor_for;
17+
pub use strategy::codex::compressor_for as codex_compressor_for;
18+
pub use strategy::opencode::compressor_for as opencode_compressor_for;
19+
20+
// Re-export the main compression utility
21+
pub use util::compress_claude_tool_with_segment_protection;
22+
23+
/// Compress a Claude Code tool output by tool name.
24+
///
25+
/// Looks up the appropriate compressor for the given tool name and applies it,
26+
/// preserving `<system-reminder>` blocks verbatim.
27+
///
28+
/// Returns `Some(compressed)` if compression was applied, `None` to keep the original.
29+
pub fn compress_tool_output(tool_name: &str, arguments: &str, output: &str) -> Option<String> {
30+
let compressor = claude_compressor_for(tool_name)?;
31+
compress_claude_tool_with_segment_protection(compressor, arguments, output)
32+
}

0 commit comments

Comments
 (0)