2026-01-22 18:10:30 +01:00
|
|
|
[package]
|
|
|
|
|
name = "rtk"
|
2026-03-25 12:08:28 +00:00
|
|
|
version = "0.33.1"
|
2026-01-22 18:10:30 +01:00
|
|
|
edition = "2021"
|
|
|
|
|
authors = ["Patrick Szymkowiak"]
|
|
|
|
|
description = "Rust Token Killer - High-performance CLI proxy to minimize LLM token consumption"
|
|
|
|
|
license = "MIT"
|
2026-02-12 12:28:37 +01:00
|
|
|
homepage = "https://www.rtk-ai.app"
|
2026-02-12 12:17:37 +01:00
|
|
|
repository = "https://github.com/rtk-ai/rtk"
|
2026-01-22 18:10:30 +01:00
|
|
|
readme = "README.md"
|
|
|
|
|
keywords = ["cli", "llm", "token", "filter", "productivity"]
|
|
|
|
|
categories = ["command-line-utilities", "development-tools"]
|
|
|
|
|
|
|
|
|
|
[dependencies]
|
2026-01-22 18:15:34 +01:00
|
|
|
clap = { version = "4", features = ["derive"] }
|
2026-01-22 18:10:30 +01:00
|
|
|
anyhow = "1.0"
|
|
|
|
|
ignore = "0.4"
|
|
|
|
|
walkdir = "2"
|
|
|
|
|
regex = "1"
|
|
|
|
|
lazy_static = "1.4"
|
|
|
|
|
serde = { version = "1", features = ["derive"] }
|
feat(init): auto-patch settings.json for frictionless hook installation
## Summary
Eliminates manual settings.json setup friction by automating hook
registration with safety (backup, atomic writes, idempotency).
## Changes
### Core Features
- **Auto-patch**: Default `rtk init -g` prompts to patch settings.json [y/N]
- **CLI flags**: `--auto-patch` (no prompt), `--no-patch` (manual), `--uninstall` (full cleanup)
- **Safety**: Automatic backup to `settings.json.bak` before modification
- **Idempotency**: Detects existing hook, skips modification
- **Status check**: `rtk init --show` now displays settings.json registration
### Implementation
- New types: `PatchMode` (Ask/Auto/Skip), `PatchResult` (tracking outcomes)
- New functions in `src/init.rs`:
- `hook_already_present()` - Detects RTK hook via substring match
- `insert_hook_entry()` - Deep-merges hook using idiomatic `entry()` API
- `atomic_write()` - Crash-safe writes with tempfile
- `patch_settings_json()` - Main orchestrator
- `uninstall()` - Complete cleanup (hook, RTK.md, settings.json)
- Modified functions: `run()`, `run_default_mode()`, `run_hook_only_mode()`, `show_config()`
### Code Quality Improvements
- Refactored `insert_hook_entry()` to use Rust `entry()` API (no manual unwraps)
- Simplified `hook_already_present()` with iterator chains (3x shorter)
- Improved error messages with file paths and actionable hints
- Fixed string allocation (to_str() vs to_string())
### Dependencies
- Added `preserve_order` feature to `serde_json` (key order preservation)
- Moved `tempfile` to production dependencies (atomic writes)
### Documentation
- **README.md**: Updated Quick Install, added Installation Flags, Uninstalling, Troubleshooting, What Are Hooks sections
- **INSTALL.md**: Updated Recommended Setup, added Common User Flows, Uninstalling sections
- **CHANGELOG.md**: Documented new feature under Unreleased
### Testing
- 11 new unit tests for hook detection, insertion, atomic writes, cleanup
- All 249 tests passing
- Smoke tested: install, idempotency, show, uninstall
## User Impact
**Before**: Users had to manually copy JSON snippet to settings.json
**After**: Single command with prompt, automatic backup, clean uninstall
## Breaking Changes
None. Backwards compatible - manual setup still works via `--no-patch`.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-07 16:12:40 +01:00
|
|
|
serde_json = { version = "1", features = ["preserve_order"] }
|
2026-01-22 18:10:30 +01:00
|
|
|
colored = "2"
|
2026-01-22 21:03:54 +01:00
|
|
|
dirs = "5"
|
2026-01-23 13:51:31 +01:00
|
|
|
rusqlite = { version = "0.31", features = ["bundled"] }
|
|
|
|
|
toml = "0.8"
|
|
|
|
|
chrono = "0.4"
|
2026-02-02 00:54:06 +01:00
|
|
|
thiserror = "1.0"
|
feat(init): auto-patch settings.json for frictionless hook installation
## Summary
Eliminates manual settings.json setup friction by automating hook
registration with safety (backup, atomic writes, idempotency).
## Changes
### Core Features
- **Auto-patch**: Default `rtk init -g` prompts to patch settings.json [y/N]
- **CLI flags**: `--auto-patch` (no prompt), `--no-patch` (manual), `--uninstall` (full cleanup)
- **Safety**: Automatic backup to `settings.json.bak` before modification
- **Idempotency**: Detects existing hook, skips modification
- **Status check**: `rtk init --show` now displays settings.json registration
### Implementation
- New types: `PatchMode` (Ask/Auto/Skip), `PatchResult` (tracking outcomes)
- New functions in `src/init.rs`:
- `hook_already_present()` - Detects RTK hook via substring match
- `insert_hook_entry()` - Deep-merges hook using idiomatic `entry()` API
- `atomic_write()` - Crash-safe writes with tempfile
- `patch_settings_json()` - Main orchestrator
- `uninstall()` - Complete cleanup (hook, RTK.md, settings.json)
- Modified functions: `run()`, `run_default_mode()`, `run_hook_only_mode()`, `show_config()`
### Code Quality Improvements
- Refactored `insert_hook_entry()` to use Rust `entry()` API (no manual unwraps)
- Simplified `hook_already_present()` with iterator chains (3x shorter)
- Improved error messages with file paths and actionable hints
- Fixed string allocation (to_str() vs to_string())
### Dependencies
- Added `preserve_order` feature to `serde_json` (key order preservation)
- Moved `tempfile` to production dependencies (atomic writes)
### Documentation
- **README.md**: Updated Quick Install, added Installation Flags, Uninstalling, Troubleshooting, What Are Hooks sections
- **INSTALL.md**: Updated Recommended Setup, added Common User Flows, Uninstalling sections
- **CHANGELOG.md**: Documented new feature under Unreleased
### Testing
- 11 new unit tests for hook detection, insertion, atomic writes, cleanup
- All 249 tests passing
- Smoke tested: install, idempotency, show, uninstall
## User Impact
**Before**: Users had to manually copy JSON snippet to settings.json
**After**: Single command with prompt, automatic backup, clean uninstall
## Breaking Changes
None. Backwards compatible - manual setup still works via `--no-patch`.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-07 16:12:40 +01:00
|
|
|
tempfile = "3"
|
2026-02-14 18:37:40 +07:00
|
|
|
sha2 = "0.10"
|
2026-03-05 15:34:49 +01:00
|
|
|
ureq = "2"
|
|
|
|
|
hostname = "0.4"
|
2026-03-11 21:19:40 +01:00
|
|
|
flate2 = "1.0"
|
|
|
|
|
quick-xml = "0.37"
|
2026-03-12 15:36:19 +01:00
|
|
|
which = "8"
|
2026-01-22 21:03:54 +01:00
|
|
|
|
feat: TOML Part 2 — user-global config, shadow warning, rtk init templates, 4 new built-in filters (#351)
* docs: update module count to 58 (toml_filter + verify_cmd)
* docs: bump version refs to 0.27.1, fix module count to 59
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat: TOML DSL PR 2 — user-global config, shadow warning, init templates, 4 new filters
- toml_filter: add ~/.config/rtk/filters.toml (priority 2, between project and built-in)
- toml_filter: shadow warning when match_command overlaps a Rust-handled command
- init: rtk init generates .rtk/filters.toml template (local) and ~/.config/rtk/filters.toml (global)
- builtin_filters: add pre-commit, helm, gcloud, ansible-playbook (46/46 inline tests)
- README: add "Custom Filters" section with lookup table, primitives, examples, built-in list
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(filters): add quarto-render, pnpm-build, trunk-build from rtk discover data (52/52 tests)
* feat(filters): add docker-inspect, sops, docker-compose-ps built-in filters
Resolves issues #279, #277, #276 as TOML-native filters (no Rust required).
- docker-inspect: strip_ansi + truncate_lines_at=120 + max_lines=60
- sops: strip_ansi + strip_lines_matching blank lines + max_lines=40
- docker-compose-ps: strip_ansi + truncate_lines_at=120 + max_lines=40
6 inline tests added (2 per filter), all passing.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* refactor(filters): split monolithic builtin_filters.toml into 28 individual files
Replace the 848-line src/builtin_filters.toml monolith with individual
files under src/filters/<name>.toml (1 filter + tests per file).
Files are concatenated alphabetically by build.rs at compile time into
OUT_DIR/builtin_filters.toml, then embedded via a BUILTIN_TOML constant
in toml_filter.rs. The build step validates TOML syntax and detects
duplicate filter names across files.
Benefits:
- Zero merge conflicts when multiple PRs add filters (different files)
- Clear PR diffs: "+1 file of 30 lines" vs "+30 lines in 850-line file"
- Easy onboarding: copy any .toml, rename, edit 3 fields — done
- Build-time TOML validation catches syntax errors before tests run
Changes:
- build.rs (new): concat + validate src/filters/*.toml
- Cargo.toml: add [build-dependencies] toml = "0.8"
- src/filters/*.toml (28 files): split from monolith
- src/filters/README.md (new): contributor guide
- src/toml_filter.rs: BUILTIN_TOML const + 5 include_str replacements
- src/builtin_filters.toml: deleted
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* test(filters): add 5 new unit tests for multi-file architecture + wget filter
Unit tests added (toml_filter.rs):
- test_builtin_toml_has_schema_version: ensures build.rs injects schema_version
- test_builtin_all_expected_filters_present: guards against accidental file deletion
- test_builtin_filter_count: exact count check (fails if filter added/removed without update)
- test_builtin_all_filters_have_inline_tests: prevents shipping filters with no tests
- test_new_filter_discoverable_after_concat: simulates build.rs concat, verifies lookup
New built-in filter:
- src/filters/wget.toml: compact wget download output (strips connection/resolution
noise, short-circuits on 'saved [' to 'ok (downloaded)', 2 inline tests)
Test results: 661/661 unit tests, 60/60 inline TOML filter tests
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* docs: add filter-workflow.md with Mermaid diagrams
Build pipeline + runtime lookup priority, both as Mermaid flowcharts.
Shows the full path from src/filters/*.toml to binary to execution.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: remove dead TOML filters — wget, git-checkout, git-merge, git-remote, cargo-run
These filters were never reachable: Clap routes rtk git/cargo commands
to their dedicated Rust modules before run_fallback is called. The TOML
engine only fires for unknown commands. Shipping dead filters gives false
confidence (inline tests pass, but filters never activate in production).
Also fixes P1-1 from the PR #386 review: wget was in RUST_HANDLED_COMMANDS
and the shadow warning fired at compile time but did not block the build.
Removed: cargo-run.toml, git-checkout.toml, git-merge.toml,
git-remote.toml, wget.toml
Updated test guards: count 29→24, expected list -5 names,
concat test 30→25.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: remove 3 dead TOML filters + update guards (PR #351)
docker-inspect, docker-compose-ps, and pnpm-build are handled by
container.rs and pnpm_cmd.rs before run_fallback is reached — their
TOML filters never fire. Remove the files to avoid false documentation.
Update toml_filter.rs guards: expected list -3 names, count 24→21,
concat test 25→22. Update CONTRIBUTING.md example count to match.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: rebase on PR #349 — apply regex anchors, make on_empty, build.rs clippy, docs macOS path
- Add (\\s|$) word-boundary anchors to 6 tofu/mix match_command regexes
(tofu-plan, tofu-init, tofu-validate, tofu-fmt, mix-format, mix-compile)
- Add on_empty = "make: ok" to make.toml + update existing empty-output test
- Fix build.rs clippy: map_or(false, ...) → is_some_and(..)
- Add macOS alt path note to filter-workflow.md Mermaid diagram
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 11:02:18 +01:00
|
|
|
[build-dependencies]
|
|
|
|
|
toml = "0.8"
|
|
|
|
|
|
2026-01-22 20:19:54 +01:00
|
|
|
[dev-dependencies]
|
|
|
|
|
|
2026-01-22 18:10:30 +01:00
|
|
|
[profile.release]
|
|
|
|
|
opt-level = 3
|
|
|
|
|
lto = true
|
|
|
|
|
codegen-units = 1
|
|
|
|
|
panic = "abort"
|
|
|
|
|
strip = true
|
2026-01-23 13:51:31 +01:00
|
|
|
|
|
|
|
|
# cargo-deb configuration
|
|
|
|
|
[package.metadata.deb]
|
|
|
|
|
maintainer = "Patrick Szymkowiak"
|
|
|
|
|
copyright = "2024 Patrick Szymkowiak"
|
|
|
|
|
license-file = ["LICENSE", "0"]
|
|
|
|
|
extended-description = "rtk filters and compresses command outputs before they reach your LLM context, saving 60-90% of tokens."
|
|
|
|
|
section = "utility"
|
|
|
|
|
priority = "optional"
|
|
|
|
|
assets = [
|
|
|
|
|
["target/release/rtk", "usr/bin/", "755"],
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
# cargo-generate-rpm configuration
|
|
|
|
|
[package.metadata.generate-rpm]
|
|
|
|
|
assets = [
|
|
|
|
|
{ source = "target/release/rtk", dest = "/usr/bin/rtk", mode = "755" },
|
|
|
|
|
]
|