Artiom Tofan
2e194efb3a
fix: resolve Windows command wrapper execution ( #269 )
...
- add PATHEXT-aware command resolution via which\n- migrate affected command runners to resolved_command\n- add regression coverage for wrapper/fallback behavior
2026-03-12 15:36:19 +01:00
Patrick szymkowiak
a8dbe33b84
feat: add structured dotnet support (build/test/restore/format)
...
Integrate PR #172 by @danielmarbach onto develop:
- MSBuild binlog parser (binary format, gzip, 7-bit varint)
- TRX test result parser (quick-xml)
- Format report JSON parser
- Subcommand routing: build, test, restore, format + passthrough
- Sensitive env var scrubbing (GH_TOKEN, AWS_SECRET_ACCESS_KEY, etc.)
- Fallback to text parsing when binlog unavailable
- 86-93% token savings on real .NET projects
Maintainer fixes applied:
- Removed binlog temp path from output (wastes tokens)
- Dropped hook file changes (incompatible with develop architecture)
- Fixed unused variable warnings
888 tests pass.
Signed-off-by: Patrick <patrick@rtk-ai.com >
Signed-off-by: Patrick szymkowiak <patrick.szymkowiak@innovtech.eu >
2026-03-11 21:19:40 +01:00
github-actions[bot]
cc93afc954
chore(master): release 0.28.2 ( #473 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-10 20:26:41 +01:00
github-actions[bot]
aef823c8e6
chore(master): release 0.28.1 ( #466 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-10 18:13:21 +01:00
github-actions[bot]
b9cb238144
chore(master): release 0.28.0 ( #378 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-10 11:46:09 +01:00
Florian BRUNIAUX
926e6a0dd4
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
github-actions[bot]
34b2474d4c
chore(master): release 0.27.2 ( #365 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-06 12:54:04 +01:00
github-actions[bot]
093e431193
chore(master): release 0.27.1 ( #362 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-06 09:46:33 +01:00
github-actions[bot]
f693e060c6
chore(master): release 0.27.0 ( #353 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-05 23:17:41 +01:00
github-actions[bot]
32ade38e0a
chore(master): release 0.26.0 ( #337 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-05 21:02:37 +01:00
patrick szymkowiak
baff6a2334
feat: anonymous telemetry ping (1/day, opt-out) ( #334 )
...
* feat: add anonymous telemetry ping (1/day, opt-out)
Fire-and-forget daily ping to track active installs for BPI metrics.
- SHA-256 device hash (hostname:user), no PII
- Opt-out: RTK_TELEMETRY_DISABLED=1 or config.toml [telemetry] enabled=false
- Token injected at compile time via option_env!, not in source
- 23h throttle via marker file, 2s timeout, non-blocking thread
* ci: inject RTK_TELEMETRY_TOKEN at build time in release workflow
All 3 build jobs (binary, DEB, RPM) now receive the token from
GitHub secrets so option_env!() compiles it into release binaries.
* refactor: externalize telemetry URL via option_env!(RTK_TELEMETRY_URL)
URL and token are both injected at compile time — no hardcoded
server address in source code. Builds without the env var simply
skip telemetry silently.
2026-03-05 15:34:49 +01:00
github-actions[bot]
99b9f9f926
chore(master): release 0.25.0 ( #321 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-05 14:32:19 +01:00
github-actions[bot]
dd643d2322
chore(master): release 0.24.0 ( #302 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-04 12:48:19 +01:00
aesoft
c9087a4b07
Merge branch 'master' into feat/hook-integrity
2026-03-03 09:48:54 +01:00
github-actions[bot]
44cb9ec44c
chore(master): release 0.23.0 ( #250 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-28 22:10:06 +01:00
github-actions[bot]
ab5dbb1a34
chore(master): release 0.22.2 ( #230 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-20 18:20:48 +01:00
github-actions[bot]
1c025e9bb8
chore(master): release 0.22.1 ( #210 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-19 20:07:20 +01:00
github-actions[bot]
8cb198e245
chore(master): release 0.22.0 ( #201 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-18 16:06:06 +01:00
github-actions[bot]
c29644b7ab
chore(master): release 0.21.1 ( #179 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-17 23:06:03 +01:00
github-actions[bot]
aa0b462182
chore(master): release 0.21.0 ( #178 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-17 22:49:48 +01:00
github-actions[bot]
577e082c5d
chore(master): release 0.20.1 ( #167 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-17 10:33:27 +01:00
github-actions[bot]
78c9e94b7c
chore(master): release 0.20.0 ( #152 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-17 07:29:19 +01:00
github-actions[bot]
5231f98973
chore(master): release 0.19.0 ( #148 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-16 20:16:17 +01:00
github-actions[bot]
a82b2872ba
chore(master): release 0.18.1 ( #133 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-16 08:22:16 +01:00
github-actions[bot]
2bc7d207b6
chore(master): release 0.18.0 ( #132 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-15 16:00:57 +01:00
github-actions[bot]
ec88f5c109
chore(master): release 0.17.0 ( #126 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-15 15:28:48 +01:00
github-actions[bot]
d67ade9ecf
chore(master): release 0.16.0 ( #121 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-14 14:48:30 +01:00
github-actions[bot]
f90a1cbfa7
chore(master): release 0.15.4 ( #120 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-14 13:15:47 +01:00
playb0t
95677e9786
feat(security): add SHA-256 hook integrity verification
...
Add runtime integrity verification for rtk-rewrite.sh to detect
unauthorized modifications to the PreToolUse hook.
The hook auto-approves all rewritten commands via permissionDecision:
"allow", bypassing Claude Code's permission prompts. Any modification
by a local process (malicious dependency, compromised npm postinstall,
etc.) becomes a command injection vector.
Changes:
- New module: src/integrity.rs (SHA-256 hash, verify, runtime gate)
- rtk init: stores hash after hook installation (idempotent)
- rtk verify: new subcommand for manual integrity check
- rtk init --show: displays integrity status
- rtk uninstall: cleans up hash file
- Operational commands check integrity at startup (fail closed)
- Emergency bypass: RTK_SKIP_INTEGRITY=1
Ref: SA-2025-RTK-001 (Finding F-01)
Ref: PromptArmor hook hijacking (Oct 2025)
Ref: CVE-2025-54794, CVE-2025-54795
2026-02-14 18:37:40 +07:00
github-actions[bot]
0517182f5b
chore(master): release 0.15.3 ( #108 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-13 18:08:26 +01:00
github-actions[bot]
737e94696f
chore(master): release 0.15.2 ( #104 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-13 16:06:02 +01:00
github-actions[bot]
61405c8676
chore(master): release 0.15.1 ( #96 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-13 00:40:29 +01:00
github-actions[bot]
72b90200bd
chore(master): release 0.15.0 ( #90 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-12 22:12:23 +01:00
github-actions[bot]
bec3ce8927
chore(master): release 0.14.0 ( #79 )
...
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-02-12 12:29:14 +01:00
patrick szymkowiak
c84fa3c060
fix: add website URL (rtk-ai.app) across project metadata ( #81 )
...
- Cargo.toml: add homepage field
- README.md: add website/github/install links
- Formula/rtk.rb: update homepage to website
- release.yml: update homepage and docs link in formula template
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-12 12:28:37 +01:00
patrick szymkowiak
55d010ad5e
fix: update stale repo URLs from pszymkowiak/rtk to rtk-ai/rtk ( #78 )
...
Closes #77
- install.sh: update REPO to rtk-ai/rtk (was using old fork name)
- INSTALL.md: fix curl URL from /blob/ (returns HTML) to raw URL
- Cargo.toml: update repository field
- Formula/rtk.rb: update all download URLs and tap reference
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-12 12:17:37 +01:00
github-actions[bot]
9e764c459f
chore(master): release 0.13.1
2026-02-12 10:59:50 +00:00
github-actions[bot]
0d388b3f05
chore(master): release 0.13.0
2026-02-12 09:43:19 +00:00
github-actions[bot]
3dde699240
chore(master): release 0.12.0
2026-02-09 02:00:59 +00:00
github-actions[bot]
22182e48d2
chore(master): release 0.11.0
2026-02-07 22:13:14 +00:00
patrick szymkowiak
a3814fc3d3
Merge branch 'master' into feat/auto-patch-settings-json
2026-02-07 23:12:50 +01:00
github-actions[bot]
109f5d66db
chore(master): release 0.10.0
2026-02-07 16:01:00 +00:00
Florian BRUNIAUX
848a63dfac
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
github-actions[bot]
0cd8d6ea95
chore(master): release 0.9.4
2026-02-06 19:15:05 +00:00
github-actions[bot]
c072201629
chore(master): release 0.9.3
2026-02-06 13:36:27 +00:00
github-actions[bot]
459538c7a2
chore(master): release 0.9.2
2026-02-05 16:13:22 +00:00
github-actions[bot]
8c638e3782
chore(master): release 0.9.1
2026-02-04 17:24:08 +00:00
github-actions[bot]
ca53553501
chore(master): release 0.9.0
2026-02-03 16:12:12 +00:00
github-actions[bot]
5eb65f61d7
chore(master): release 0.8.1
2026-02-02 15:48:14 +00:00
github-actions[bot]
92a3333d10
chore(master): release 0.8.0
2026-02-02 13:32:50 +00:00