mirror of
https://github.com/rtk-ai/rtk.git
synced 2026-09-19 07:33:17 +08:00
fix/validate-docs-version
11 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
7d76af84b9 |
fix: 4 critical bugs + telemetry enrichment (#462)
* fix(cicd): Add security check on dev branch PR add security check cicd on dev branch PR Signed-off-by: aesoft <43991222+aeppling@users.noreply.github.com> * fix: enrich telemetry with install_method and token savings - Add install_method detection (homebrew/cargo/script/nix/other) - Add tokens_saved_24h and tokens_saved_total to payload - Add Tracker::total_tokens_saved() and Tracker::tokens_saved_24h() methods - Point telemetry to new dedicated rtk-telemetry service Signed-off-by: Patrick szymkowiak <patrick.szymkowiak@innovtech.eu> * fix: detect install method on Windows paths Add backslash variants for .cargo\bin and .local\bin detection Signed-off-by: Patrick szymkowiak <patrick.szymkowiak@innovtech.eu> * fix: enrich telemetry with install_method and token savings (#432) - Add install_method detection (homebrew/cargo/script/nix/other) - Add tokens_saved_24h and tokens_saved_total to payload - Add Tracker::total_tokens_saved() and Tracker::tokens_saved_24h() methods - Point telemetry to new dedicated rtk-telemetry service Signed-off-by: Patrick szymkowiak <patrick.szymkowiak@innovtech.eu> * fix: 4 critical bugs — git exit code, jq warning, npm run doubling, pnpm build filter (#458) * fix: propagate exit code 128 when rtk git status runs outside a repo (#435) Previously printed "Not a git repository" to stdout and returned exit 0. Now prints to stderr and exits with git's actual exit code (128). Signed-off-by: Patrick szymkowiak <patrick.szymkowiak@innovtech.eu> * fix: warn when jq is not installed instead of silent exit (#430) Hook now prints a warning to stderr before exiting cleanly, so users know the rewrite pipeline is not functioning. Signed-off-by: Patrick szymkowiak <patrick.szymkowiak@innovtech.eu> * fix: strip leading 'run' arg to prevent npm run run doubling (#438) When user types 'rtk npm run build', args contain ["run", "build"]. Since npm_cmd always prepends 'run', this caused 'npm run run build'. Now strips the leading 'run' from args if present. Signed-off-by: Patrick szymkowiak <patrick.szymkowiak@innovtech.eu> * fix: route pnpm build through generic passthrough instead of Next.js filter (#454) pnpm build was hardcoded to next_cmd::run which misparses Vite/other framework output as errors. Now uses generic passthrough. Signed-off-by: Patrick szymkowiak <patrick.szymkowiak@innovtech.eu> * docs: bump README version to 0.28.0 Signed-off-by: Patrick szymkowiak <patrick.szymkowiak@innovtech.eu> --------- Signed-off-by: Patrick szymkowiak <patrick.szymkowiak@innovtech.eu> * fix: warn when rtk binary is not in PATH instead of silent exit (#430) (#465) Applies the same fix as jq — all silent exits now warn on stderr. Signed-off-by: Patrick szymkowiak <patrick.szymkowiak@innovtech.eu> --------- Signed-off-by: aesoft <43991222+aeppling@users.noreply.github.com> Signed-off-by: Patrick szymkowiak <patrick.szymkowiak@innovtech.eu> Co-authored-by: aesoft <43991222+aeppling@users.noreply.github.com> |
||
|
|
3141fecf95 |
feat: warn when installed hook is outdated (#344) (#350)
- Add `# rtk-hook-version: 2` header to hook file - New `hook_check` module: detect outdated hook on startup, warn 1/day - Homebrew caveats: remind users to run `rtk init -g` after upgrade |
||
|
|
f447a3d5b1 |
feat: rtk rewrite — single source of truth for LLM hook rewrites (#241)
* feat: add `rtk rewrite` command — single source of truth for hook rewrites Implements `rtk rewrite <cmd>` as the canonical rewrite engine for all LLM hook integrations (Claude Code, Gemini CLI, future tools). - Add `rewrite_prefixes` field to `RtkRule` in discover/registry.rs - Add public `rewrite_command()` with compound command support (&&, ||, ;, |) - Add `rewrite_segment()`, `rewrite_compound()`, `strip_word_prefix()` helpers - Handle already-rtk commands (exit 0, identical output) - Handle unsupported/ignored commands (exit 1, no output) - Add 20 unit tests covering all branches and edge cases - Create `src/rewrite_cmd.rs` thin CLI wrapper - Register `Commands::Rewrite` in main.rs - Simplify `.claude/hooks/rtk-rewrite.sh` from 357 → 60 lines Hooks no longer need duplicate mapping logic — a single `REWRITTEN=$(rtk rewrite "$CMD") || exit 0` handles everything. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: fix version references and module count for 0.22.2 - README.md, CLAUDE.md, ARCHITECTURE.md: 0.20.1 → 0.22.2 - ARCHITECTURE.md: module count 48 → 51 (added rewrite_cmd + 2 from master) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * ci: update hook coverage check to verify registry (not hook script) Since PR #241, the hook delegates to `rtk rewrite` — command mappings live in src/discover/registry.rs, not the bash hook script. Update the "Verify hook coverage" CI step to: - Check that the hook calls `rtk rewrite` (new architecture) - Check that registry.rs has rewrite_prefixes for all Python/Go commands Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat: support single `&` background operator in compound rewrites Per feedback from @xDelph: AI agents increasingly use `cmd1 & cmd2` for parallel execution. This commit adds support alongside existing `&&`, `||`, `;`, and `|` operators. Changes: - rewrite_compound: add match arm for single `&` (after `&&` check) - rewrite_command: add `" & "` to has_compound detection - init: show "installed/updated" vs "already up to date" so users know whether rtk init changed the hook on re-run Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: add Python/Go commands to rewrite registry Add `ruff`, `pytest`, `pip`, `go`, and `golangci-lint` to both PATTERNS and RULES in registry.rs so the CI coverage check passes and `rtk rewrite` correctly identifies these commands. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: update version reference to 0.23.0 in README Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: update version reference to 0.23.0 in CLAUDE.md Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: update version and module count to 0.23.0/52 in ARCHITECTURE.md Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: address P0 review feedback on rtk-rewrite PR P0.1 - Replace 218-line bash hook with 58-line thin delegating hook. All rewrite logic now lives exclusively in `rtk rewrite` (Rust registry). `rtk init` installs the thin hook via include_str!. P0.2 - Fix `head -20 file` crash at runtime. Generic prefix replacement produced `rtk read -20 file` (invalid clap args). Now translates `head -N file` → `rtk read file --max-lines N` and skips unsupported head flags (e.g. -c) by returning exit 1. P0.3 - Add version guard in hook for rtk < 0.23.0. Prints a warning to stderr instead of silently doing nothing. Also adds missing registry entries vs old hook: - gh release, cargo install - docker run/exec/build, kubectl describe/apply - tree, diff 474 tests pass, 0 clippy warnings. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * style: cargo fmt Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * refactor(discover): extract rules/patterns into rules.rs Per aeppling review: registry.rs was too large (~1500 lines). Extract all static data into src/discover/rules.rs: - RtkRule struct (with pub fields) - PATTERNS const array - RULES const array - IGNORED_PREFIXES and IGNORED_EXACT const arrays registry.rs now contains only logic + tests. rules.rs is the single place to add a new command mapping. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: update version reference to 0.24.0 in README * docs: update version references to 0.24.0 in CLAUDE.md and ARCHITECTURE.md * fix(discover): add aws and psql to rewrite registry rtk aws and rtk psql modules exist since PR #216 but were missing from the registry rules — rewrite was silently skipping them. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * test(discover): exhaustive regression tests for rewrite registry Cover all command categories added in PR #241 and missing from the previous test suite: - aws / psql (PR #216 modules, gap detected during non-reg run) - Python: ruff, pytest, python -m pytest, pip, uv pip - Go: go test/build/vet, golangci-lint - JS/TS: vitest, pnpm vitest, prisma, prettier, pnpm list - Compound operators: || and ; rewrites, 4-segment chains, mixed supported/unsupported segments, all-unsupported → None - sudo prefix rewrite, env var prefix rewrite - find with native flags - Registry invariants: PATTERNS/RULES aligned, all rules valid, all patterns are valid regex Before: 559 tests. After: 607 tests. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(migration): document breaking change + detect outdated hook in rtk config CHANGELOG [Unreleased]: - Migration required: rtk init --global needed after upgrade - Documents upgrade path and explains no immediate breakage rtk init --show / rtk config now detects old hook (inline if-else) vs new thin delegator (rtk rewrite) and prints actionable warning: ⚠️ Hook: ~/.claude/hooks/rtk-rewrite.sh (outdated — inline logic, not thin delegator) → Run `rtk init --global` to upgrade to the single source of truth hook Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: update hook references for thin delegator (0.24.0) - ARCHITECTURE.md: fix hook description (shell script → thin delegator) - INSTALL.md: add upgrade path for old hook users (pre-0.24 breaking change) - SECURITY.md: add registry.rs + hook files to Tier 1 critical files Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs(arch): fix module count 52→55, add aws/psql/rewrite to module map Adds aws_cmd, psql_cmd (PR #216) and rewrite_cmd (this PR) to the Complete Module Map table. Updates total from 52 to 55 to match main.rs. Fixes CI validate-docs.sh module count mismatch. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * ci: fix hook coverage check to search rules.rs instead of registry.rs After the PR #241 refactor, rewrite_prefixes constants moved from registry.rs to rules.rs. Update grep to search the whole discover/ directory so it finds them in the right file. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
b934466364 |
feat: add AWS CLI and psql modules with token-optimized output (#216)
AWS CLI (rtk aws): - Specialized filters for sts, s3 ls, ec2, ecs, rds, cloudformation - Generic fallback injects --output json for structured ops only (describe-*, list-*, get-*); mutating ops (s3 cp, deploy) pass through - join_with_overflow() and truncate_iso_date() helpers in utils.rs psql (rtk psql): - Table format: strips separators/padding, outputs tab-separated - Expanded format: compresses -[ RECORD N ]- blocks to key=val one-liners - Passthrough for COPY results, notices, and non-table output - 40%+ savings (table), 60%+ savings (expanded display) Co-authored-by: itai.sagi <itai.sagi@clarityo.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
e8ef341853 |
feat: add mypy command with grouped error output (#109)
* feat: add mypy command with grouped error output (80% token reduction) Add rtk mypy module that parses mypy type checker output, groups errors by file and error code, and produces compact summaries. Includes discovery registry pattern, hook rewrites, and 11 new tests (324 total). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: address review - remove specs/ and clean CLAUDE.md Remove process docs (spec, plan, tasks, research, checklists) from specs/001-mypy-cmd/ and strip "Active Technologies" / "Recent Changes" sections from CLAUDE.md per PR #109 review feedback. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: address review - deduplicate mypy handler, delegate from lint_cmd Make lint_cmd.rs delegate to mypy_cmd::filter_mypy_output() instead of maintaining a separate, less capable implementation. The mypy_cmd version handles column numbers, note continuations, file-less errors, and shows full error details. Removes 145 lines of duplicate code + 2 redundant tests. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Robert Mohid <rmohid@Roberts-Mini.ht.home> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
dbbf980f3b |
fix: filter docker compose hook rewrites to supported subcommands (#245)
The hook was rewriting all `docker compose` commands to `rtk docker compose`, but rtk only supports ps, logs, and build. Unsupported subcommands (up, down, exec, restart...) and compose-level flags (-f, --project-name) caused hard failures. Now matches the approach used by the regular docker branch: only rewrite when the subcommand is known to be supported. Fixes #244 Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
7401f1099f |
feat(hook): handle global options before subcommands (#99)
* fix(hook): use POSIX character classes for cross-platform grep compatibility Replace \s with [[:space:]] in all grep -E patterns. The \s shorthand is a PCRE extension not guaranteed by POSIX ERE, causing intermittent match failures on macOS depending on grep version and locale settings. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(hook): handle global options before subcommands in git/cargo/docker/kubectl Normalize commands by stripping global options (git -C, --no-pager; cargo +toolchain; docker -H, --context; kubectl --context, -n) to correctly identify the subcommand for rewrite matching. Preserves all original arguments in the rewritten command. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
6612f22060 |
improve: hook coverage from 0.2% to ~80% with env prefix stripping (#97)
Two root causes for low interception rates: 1. Environment variable prefixes broke pattern matching. Commands like `TEST_SESSION_ID=2 npx playwright test` start with an env var, not the command name, so no pattern matched. Fix: strip leading env vars for matching, preserve for execution. 2. Missing patterns for commands RTK already supports: npm run/test, vue-tsc, docker compose, docker run/build/exec, kubectl describe/apply, gh api/release. Also fixes vitest "run" duplication bug where `vitest run` became `rtk vitest run run`. Includes 50-test regression suite (hooks/test-rtk-rewrite.sh). Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
4aafc832d4 |
fix(hook): use POSIX character classes for cross-platform grep compatibility (#98)
Replace \s with [[:space:]] in all grep -E patterns. The \s shorthand is a PCRE extension not guaranteed by POSIX ERE, causing intermittent match failures on macOS depending on grep version and locale settings. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
a005bb15c0 |
feat: add Python and Go support (#88)
* feat(cargo): aggregate test output into single line (#83) Problem: `cargo test` shows 24+ summary lines even when all pass. An LLM only needs to know IF something failed, not 24x "ok". Before (24 lines): ``` ✓ test result: ok. 2 passed; 0 failed; ... ✓ test result: ok. 0 passed; 0 failed; ... ... (x24) ``` After (1 line): ``` ✓ cargo test: 137 passed (24 suites, 1.45s) ``` Changes: - Add AggregatedTestResult struct with regex parsing - Merge multiple test summaries when all pass - Format: "N passed, M ignored, P filtered out (X suites, Ys)" - Fallback to original behavior if parsing fails - Failures still show full details (no aggregation) Tests: 6 new + 1 modified, covering all cases: - Multi-suite aggregation - Single suite (singular "suite") - Zero tests - With ignored/filtered out - Failures → no aggregation (detail preserved) - Regex fallback Closes #83 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * feat: add Python and Go language support Implements comprehensive support for Python and Go development tooling with 70-90% token reduction across all commands. Python commands (3): - rtk ruff: Linter/formatter with JSON (check) and text (format) parsing (80%+) - rtk pytest: Test runner with state machine text parser (90%+) - rtk pip: Package manager with auto-detect uv (70-85%) Go commands (4): - rtk go test: NDJSON streaming parser for interleaved test events (90%+) - rtk go build: Text filter showing errors only (80%) - rtk go vet: Text filter for issues (75%) - rtk golangci-lint: JSON parser grouped by rule (85%) Architecture: - Standalone Python commands (mirror lint/prettier pattern) - Go sub-enum (mirror git/cargo pattern) - 5 new modules: ruff_cmd, pytest_cmd, pip_cmd, go_cmd, golangci_cmd - Hook integration in rtk-rewrite.sh for transparent rewrites - Comprehensive tests (47 new tests, all passing) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> * feat(benchmark): add Python and Go commands Add benchmark sections for Python (ruff, pytest, pip) and Go (go test/build/vet, golangci-lint) to validate >80% token savings in CI pipeline. Sections conditionally execute based on project markers (pyproject.toml, go.mod) and tool availability. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> |
||
|
|
9620f66cd6 |
feat(init): refactor to hook-first with slim RTK.md
## Changes **New default mode (hook + RTK.md):** - Embed hook script in binary (include_str!) - Write hook + chmod +x with guards (rtk/jq check before set -e) - Write slim RTK.md (10 lines: meta commands only) - Add @RTK.md reference to CLAUDE.md - Print settings.json instructions (no auto-patch) **Migration:** - Auto-detect old <!-- rtk-instructions --> block - Remove 137-line block, preserve user content - Replace with @RTK.md reference **New CLI flags:** - `--claude-md`: Legacy mode (full injection) - `--hook-only`: Hook only, no RTK.md - Default (no flags): Hook + RTK.md (recommended) **Enhanced --show:** - Detect hook executable status (Unix) - Detect hook guards (rtk/jq) - Detect @RTK.md vs old block - Show slim vs legacy mode **Files added:** - hooks/rtk-rewrite.sh (embedded, with guards) - hooks/rtk-awareness.md (slim RTK.md content) **Token savings:** ~2000 tokens → ~10 tokens in context (99.5% reduction) Hook rewrites commands transparently (0 tokens overhead) **Tests:** 9 new tests, all passing (236 total) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> |