Commit Graph

590 Commits

Author SHA1 Message Date
github-actions[bot] 3dde699240 chore(master): release 0.12.0 2026-02-09 02:00:59 +00:00
patrick szymkowiak 447002f8ba Merge pull request #70 from FlorianBruniaux/feat/cargo-install-filtering
feat(cargo): add cargo install filtering
2026-02-09 03:00:39 +01:00
Florian BRUNIAUX 645a773a65 feat(cargo): add cargo install filtering with 80-90% token reduction
Strip dep compilation, downloading, locking noise from cargo install output.
Keep only installed/replaced/error lines with compact summary format.

Closes #69

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 11:36:14 +01:00
patrick szymkowiak ac9e58806c Merge pull request #68 from rtk-ai/release-please--branches--master--components--rtk
chore(master): release 0.11.0
v0.11.0
2026-02-07 23:17:27 +01:00
github-actions[bot] 22182e48d2 chore(master): release 0.11.0 2026-02-07 22:13:14 +00:00
patrick szymkowiak 2db7197e02 Merge pull request #66 from FlorianBruniaux/feat/auto-patch-settings-json
feat(init): auto-patch settings.json for frictionless hook installation
2026-02-07 23:12:58 +01:00
patrick szymkowiak a3814fc3d3 Merge branch 'master' into feat/auto-patch-settings-json 2026-02-07 23:12:50 +01:00
patrick szymkowiak 3d686aa08c Merge pull request #67 from rtk-ai/release-please--branches--master--components--rtk
chore(master): release 0.10.0
v0.10.0
2026-02-07 17:45:11 +01:00
github-actions[bot] 109f5d66db chore(master): release 0.10.0 2026-02-07 16:01:00 +00:00
patrick szymkowiak e7f80ad294 Merge pull request #65 from FlorianBruniaux/master
feat: Hook-first installation with 99.5% token reduction
2026-02-07 17:00:43 +01: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
Florian BRUNIAUX 8c67a2f1e7 docs: update for hook-first installation mode
## README.md Updates

**Quick Start section:**
- Clear 3-step process: verify → install hook → test
- Prominently recommend `rtk init -g` (hook-first mode)
- Explain 99.5% token savings (2000 → 10 tokens)
- Show alternative modes (--claude-md, local init)

**Configuration section:**
- New comparison table: 4 modes with token costs
- Migration instructions for existing users
- Clarify hook vs CLAUDE.md injection differences

**Auto-Rewrite Hook section:**
- Promote automated install (`rtk init -g`) as primary method
- Keep manual install as fallback
- Add verification step (`rtk init --show`)

## INSTALL.md Updates

**Project Initialization:**
- Recommend global hook-first setup (with rationale)
- Show token savings: 99.5% reduction
- Document local setup as alternative
- Add upgrade/migration guide for existing users

## TROUBLESHOOTING.md Updates

**RTK not working section:**
- Option A: Automated (`rtk init -g`) - recommended
- Option B: Manual install - fallback
- Clarify absolute path requirement in settings.json
- Add verification step

## Fixes Documentation Gaps

Before:
- ❌ No mode comparison
- ❌ No migration guide
- ❌ Manual install only
- ❌ Unclear token impact

After:
- ✅ Clear mode comparison with use cases
- ✅ Automatic migration documented
- ✅ Automated install prioritized
- ✅ Quantified token savings (99.5%)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-07 15:28:39 +01:00
Florian BRUNIAUX 38fc860c31 refactor(init): eliminate DRY violations and improve error handling
## Code Quality Improvements

**Extracted helper functions:**
- `prepare_hook_paths()`: Prepare hook directory and paths (DRY)
- `ensure_hook_installed()`: Idempotent hook installation with chmod
- `write_if_changed()`: Generic file write with idempotence

**Before (duplicated):**
- Hook path logic repeated in default_mode + hook_only_mode
- Hook write logic repeated (lost idempotence in hook-only)
- RTK.md write logic duplicated

**After (DRY):**
- Single source of truth for each operation
- Consistent idempotence across all modes
- Reusable helpers for future file operations

## Error Handling Enhancements

**Improved error context:**
- `.with_context(|| format!("Failed to write hook to {}", path))`
- All fs operations now include the path that failed
- Migration warnings include line numbers and actionable steps

**Better Windows messaging:**
- Clear explanation of platform limitations
- Explicit fallback behavior

## API Improvements

**Idiomatic Rust:**
- `&PathBuf` → `&Path` for all function parameters
- Pattern match tuple instead of if/else chain
- `anyhow::bail!` for Windows hook-only error

## Impact

- **Maintainability**: Single place to update hook/file logic
- **Debuggability**: Error messages show exact paths
- **Robustness**: Consistent idempotence prevents conflicts

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-07 15:28:24 +01:00
Florian BRUNIAUX 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>
2026-02-07 15:11:24 +01:00
patrick szymkowiak 3436a39c04 Merge pull request #64 from rtk-ai/release-please--branches--master--components--rtk
chore(master): release 0.9.4
v0.9.4
2026-02-06 20:20:33 +01:00
github-actions[bot] 0cd8d6ea95 chore(master): release 0.9.4 2026-02-06 19:15:05 +00:00
patrick szymkowiak 89a57cf0fd Merge pull request #63 from FlorianBruniaux/fix/discover-cargo-check-passthrough-init
Fix discover cargo check + wire RtkStatus + enhance init
2026-02-06 20:14:46 +01:00
Florian BRUNIAUX d5f8a94604 fix(discover): add cargo check support, wire RtkStatus::Passthrough, enhance rtk init
## Discover Registry Fixes
- Add `check` to cargo pattern (registry.rs:52)
- Add `("check", 80.0)` savings to cargo rule
- Wire `RtkStatus::Passthrough` for `cargo fmt` (0% savings, passthrough mode)
- Add `status: RtkStatus` field to `Classification::Supported`
- Extract status from subcommand rules in classify_command()
- Fix UTF-8 truncation bug in report.rs truncate_str() (panic on multi-byte chars)

## Tests (7 new)
- test_classify_cargo_check()
- test_classify_cargo_check_all_targets()
- test_classify_cargo_fmt_passthrough() → status = Passthrough
- test_classify_cargo_clippy_savings()
- test_patterns_rules_length_match() → assert PATTERNS.len() == RULES.len()
- test_registry_covers_all_cargo_subcommands() → coupling test
- test_registry_covers_all_git_subcommands() → coupling test

## RTK Init Rewrite
- Rewrite template in English with 32+ commands grouped by workflow
- Add version marker `<!-- rtk-instructions v2 -->` for idempotency
- Fix idempotency detection: use marker instead of French text
- Add tests:
  - test_init_mentions_all_top_level_commands() → 15 key commands
  - test_init_has_version_marker()

## Documentation
- CLAUDE.md: dual format (raw + rtk) for all dev commands
- CLAUDE.md: pre-commit gate uses rtk
- ~/.claude/CLAUDE.md: add Cargo section (80-90% savings)

## Verification
✅ 229 tests pass (7 new)
✅ 88 smoke tests pass
✅ cargo fmt + clippy clean
✅ All coupling tests enforce registry/Commands alignment

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 16:28:13 +01:00
patrick szymkowiak b0a1b2c137 Merge pull request #62 from rtk-ai/release-please--branches--master--components--rtk
chore(master): release 0.9.3
v0.9.3
2026-02-06 14:37:18 +01:00
github-actions[bot] c072201629 chore(master): release 0.9.3 2026-02-06 13:36:27 +00:00
patrick szymkowiak 05078ff2da Merge pull request #61 from FlorianBruniaux/fix/crashes-check-dedup-discover
fix: P0 crashes + cargo check + dedup utilities + discover status
2026-02-06 14:36:07 +01:00
Florian BRUNIAUX 60d2d252ef fix: P0 crashes + cargo check + dedup utilities + discover status
Phase 1: Fix P0 crashes (3 bugs)
- Add external_subcommand fallback for cargo/docker/kubectl
- Fixes crashes on unsupported subcommands (e.g., cargo fmt, docker build)
- All passthroughs now route gracefully instead of Clap parse errors

Phase 2: cargo check handler + refactor (-40 lines)
- Add dedicated cargo check handler (most frequently used missing command)
- Extract run_cargo_filtered() to eliminate 90 lines of duplication
- Fix filter_cargo_build() to handle "Checking" prefix (not just "Compiling")
- Normalize exit code propagation in run_test()

Phase 3: Utility deduplication (-60 lines)
- Fix utils::truncate() Unicode handling (char-aware, not byte-based)
- Remove 5 duplicated utility functions across modules:
  - 3x truncate() → use crate::utils::truncate
  - 1x strip_ansi() → use crate::utils::strip_ansi
- Replace ~60 lines of inline package manager detection with utils::package_manager_exec()
- Clean: lint_cmd, prettier_cmd, playwright_cmd now use shared utils

Phase 4: Discover reporting improvements
- Add RtkStatus enum (Existing/Passthrough/NotSupported)
- Show status column in discover report to distinguish handler types
- Prevents future misleading "build 9 git subcommands" false analyses

Cleanup:
- Remove 2 unused imports (parser::ParseError, std::collections::HashMap)
- Reduce clippy warnings from 23 to 19

Testing:
- 220 tests pass
- 88 smoke tests pass
- All manual verification complete

Net: +10 lines, -3 P0 bugs, -5 duplications, +1 feature, +1 enum

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-06 10:37:50 +01:00
patrick szymkowiak 337ff36705 Merge pull request #60 from rtk-ai/release-please--branches--master--components--rtk
chore(master): release 0.9.2
v0.9.2
2026-02-05 17:31:20 +01:00
github-actions[bot] 459538c7a2 chore(master): release 0.9.2 2026-02-05 16:13:22 +00:00
patrick szymkowiak 2ade8fe030 Merge pull request #59 from FlorianBruniaux/fix/git-add-native-flags
fix(git): accept native git flags in add command (including -A)
2026-02-05 17:12:57 +01:00
Florian BRUNIAUX 40e7eadbaf fix(git): accept native git flags in add command (including -A)
Problem:
- `rtk git add -A` failed with "unexpected argument '-A' found"
- Git flags like -A, -p, --all were rejected by Clap parser
- Only filenames could be passed to `git add`

Solution:
- Add `allow_hyphen_values = true` to Add command args (following PR #5 pattern)
- Change Add enum variant from `Add { files }` to `Add` (unified with other git commands)
- Modify run_add() to accept args slice and pass all arguments to git
- Add exit code propagation for consistency with other git commands

Impact:
- All native git add flags now work: -A, -p, --all, --update, etc.
- Maintains RTK compact output format ("ok ✓ 2 files changed, ...")
- Preserves backward compatibility (no args defaults to ".")

Testing:
- Manual: `rtk git add -A` works correctly
- All existing tests pass (154 passed)
- Smoke tests unchanged (git add not included in test-all.sh)

Fixes: Argument parsing error for git add with native flags

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-05 15:54:20 +01:00
patrick szymkowiak 9d38986e8d Merge pull request #58 from rtk-ai/release-please--branches--master--components--rtk
chore(master): release 0.9.1
v0.9.1
2026-02-04 20:29:39 +01:00
github-actions[bot] 8c638e3782 chore(master): release 0.9.1 2026-02-04 17:24:08 +00:00
patrick szymkowiak 3df8ce5525 Merge pull request #57 from FlorianBruniaux/fix/rtk-tsc-show-all-errors
fix(tsc): show every TypeScript error instead of collapsing by code
2026-02-04 18:23:45 +01:00
Florian BRUNIAUX 67e8de8732 fix(tsc): show every TypeScript error instead of collapsing by code
The previous implementation grouped errors by error code within each
file, showing only the first message when multiple errors shared the
same code (e.g. TS2322). This hid critical debugging information and
forced users to bypass rtk entirely.

Changes:
- Show each error individually with line number and full message
- Capture and display tsc continuation/context lines
- Increase message truncation from 60 to 120 chars
- Remove artificial limits (was: 3 codes/file, 10 files max)
- Compact top-codes summary to a single line

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 18:12:46 +01:00
patrick szymkowiak a5d0fd19fd Merge pull request #55 from LivioGama/fix/rtk-init-global-path
Fix rtk init global path
2026-02-03 17:40:11 +01:00
patrick szymkowiak 690e58de8d Merge pull request #54 from LivioGama/master
Fix install script URL
2026-02-03 17:36:17 +01:00
patrick szymkowiak 8aef730965 Merge pull request #56 from rtk-ai/release-please--branches--master--components--rtk
chore(master): release 0.9.0
v0.9.0
2026-02-03 17:14:09 +01:00
github-actions[bot] ca53553501 chore(master): release 0.9.0 2026-02-03 16:12:12 +00:00
patrick szymkowiak cb83da104f Merge pull request #53 from FlorianBruniaux/feat/rtk-tree-clean
feat: rtk tree + fix rtk ls + full audit (phase 1-2-3)
2026-02-03 17:09:40 +01:00
Patrick szymkowiak ea7cdb7a3b fix(ls): compact output (-72% tokens) + fix discover panic
- ls: rewrite to strip permissions/owner/group/dates, show only
  names with dir/ suffix and human sizes. Properly handle flag
  ordering (path -l), -lh, multi-paths, --all.
- discover: remove orphan diff pattern that caused index out of
  bounds panic (PATTERNS had 22 entries vs RULES 21)
- benchmark: add 8 ls test cases
- test-all: add 5 ls smoke tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 17:05:01 +01:00
Patrick szymkowiak ffe0d2e037 chore: cleanup diff references, fix docker ps, widen diff truncation
- Remove rtk diff from docs, tests, discover registry (command exists
  but was over-promoted)
- docker ps: include container ID in compact output
- diff_cmd: widen truncation from 35 to 70 chars per side

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 15:38:56 +01:00
Patrick szymkowiak fcc14624f8 fix(find): rewrite with ignore crate + fix json stdin + benchmark pipeline
- find: replace fd/find subprocess with ignore::WalkBuilder for native
  .gitignore support, fix "." pattern, fix --max file counting
- json: add stdin support via "-" path (same pattern as read)
- benchmark: one-line-per-test format with icons for CI logs,
  local debug files only when not in CI, remove md upload/PR steps

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 15:38:17 +01:00
Florian BRUNIAUX b13d92c9ea fix(docs): escape HTML tags in rustdoc comments
Fixes 6 rustdoc warnings:
- Escape <action>, <detail>, <hash>, <branch>, <stats> tags
- Use backticks for [RTK:PASSTHROUGH] marker

All rustdoc warnings now resolved.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-03 11:33:40 +01:00
Florian BRUNIAUX 521eb1b9bc docs(tracking): complete API documentation + rustdoc comments
Add comprehensive documentation for tracking.rs public APIs:

**New Files:**
- docs/tracking.md (12 pages)
  - Architecture & data flow
  - All public APIs (12 methods, 7 types)
  - Usage examples (basic, CI/CD, dashboards, Rust lib)
  - JSON/CSV export schemas
  - Database schema & migrations
  - Integration examples (GitHub Actions, Python, Rust)
  - Security, performance, troubleshooting

- claudedocs/TRACKING_DOCUMENTATION.md
  - Documentation summary & metrics

**Updated Files:**
- src/tracking.rs
  - Module-level docs (//!)
  - Comprehensive doc comments (///) for all public APIs
  - Examples with error handling
  - Deprecation notices for legacy functions

- README.md
  - Pointer to docs/tracking.md after rtk gain section

**Coverage:**
- 7 public structs documented
- 12 public methods documented
- 3 utility functions documented
- 20+ code examples
- 3 integration examples (CI/CD, dashboards, Rust lib)
- JSON/CSV/SQL schemas

**Testing:**
- All 6 tracking tests still pass
- 100% coverage maintained

Closes gap: CLI was documented, but public APIs were not.
Now fully documented for external integration (CI/CD, dashboards, Rust lib usage).

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-03 11:22:20 +01:00
Florian BRUNIAUX 7975624d0a feat: audit phase 3 + tracking validation + rtk learn
## Audit Tracking Phase 3 (Steps 0-6)
- Systematic tracking integration across all command modules
- TimedExecution pattern enforcement (9 files)
- Passthrough timing support for interactive commands
- Exit code preservation for CI/CD reliability

## Tracking Validation Tests
- 6 unit tests in src/tracking.rs (was 0)
  - estimate_tokens, args_display, DB round-trip
  - Passthrough non-dilution, TimedExecution timing
- 2 UTF-8 tests for gh_cmd truncate() (emoji support)
- scripts/test-tracking.sh: end-to-end smoke tests (9 checks)

## rtk learn (CLI Correction Detector)
- New module: src/learn/ (detector, report, orchestration)
- Analyzes Claude Code JSONL sessions for CLI error patterns
- Auto-generates .claude/rules/cli-corrections.md
- 18 new tests (detector: 15, report: 3)
- Commands: rtk learn [--write-rules] [--since N] [--format json]

## Provider Extensions
- ExtractedCommand: +output_content, +is_error, +sequence_index
- Backward compatible with existing discover::run()
- 3 new provider tests (capture, error flag, sequence)

## Test Results
✓ 201 unit tests passed (183 existing + 18 new)
✓ 9 tracking smoke tests passed
✓ cargo fmt + clippy clean
✓ No deprecation warnings

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-03 10:05:06 +01:00
Livio Gamassia c58bd95062 Fix global init path and append behavior 2026-02-03 08:30:54 +00:00
Livio Gamassia abe024db63 Fix install script URL 2026-02-03 08:19:29 +00:00
Florian BRUNIAUX 11d9ccf670 chore: trigger CI
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-03 06:48:22 +01:00
Florian BRUNIAUX 060c38b3c1 feat(read): add stdin support via "-" path
Add ability to read from stdin using the special path "-", following
Unix conventions. Also fixes a pre-existing bug in git.rs push output.

Changes:
- src/main.rs: Check for Path::new("-") and route to run_stdin()
- src/read.rs: Add run_stdin() function for stdin processing
- src/read.rs: Use Language::Unknown for stdin (no file extension)
- src/git.rs: Fix unused format! result in push command
- Unit test: test_stdin_support_signature verifies function exists
- Smoke tests: 1 assertion for stdin pipe

Usage:
  echo "code" | rtk read -
  cat file.txt | rtk read - --level aggressive
  somecommand | rtk read - -n

Note: Stdin detection requires explicit "-" path to avoid hanging.
No automatic stdin detection is performed.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 23:33:45 +01:00
Florian BRUNIAUX a240d1a1ee feat(grep): add extra args passthrough (-i, -A/-B/-C, etc.)
Add support for passing additional ripgrep arguments to rtk grep
while preserving RTK's token-optimized output formatting.

Changes:
- src/main.rs: Add extra_args field to Grep command variant
- src/main.rs: Pass extra_args to grep_cmd::run()
- src/grep_cmd.rs: Add extra_args parameter to run() signature
- src/grep_cmd.rs: Inject extra_args into ripgrep command
- Unit test: test_extra_args_accepted verifies parameter exists
- Smoke tests: 2 assertions for -i and -A flags

Usage note: Extra args must come AFTER pattern and path:
  ✓ rtk grep "pattern" src/ -i
  ✗ rtk grep "pattern" -i  (clap interprets -i as path)

This enables full ripgrep functionality (case-insensitive, context
lines, word boundaries, globs) while maintaining RTK's compact output.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 23:19:43 +01:00
Florian BRUNIAUX 614ff5c13f feat(pnpm): add fallback passthrough for unsupported subcommands
Add external_subcommand variant to PnpmCommands enum to handle
unsupported pnpm operations by passing them through directly.

Changes:
- src/pnpm_cmd.rs: Add run_passthrough() function with OsString support
- src/pnpm_cmd.rs: Add OsString import
- src/main.rs: Add PnpmCommands::Other variant with external_subcommand
- src/main.rs: Add match arm for pnpm passthrough
- Unit test: test_run_passthrough_accepts_args verifies signature
- Smoke tests: Conditional test for pnpm help if pnpm is available

This maintains compatibility with all pnpm commands while preserving
RTK's token-optimized versions for list/outdated/install.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 22:21:03 +01:00
Florian BRUNIAUX 32bbd02534 feat(git): add fallback passthrough for unsupported subcommands
Add external_subcommand variant to GitCommands enum to handle
unsupported git operations (tag, remote, rev-parse, etc.) by
passing them through directly to git.

Changes:
- src/git.rs: Add run_passthrough() function with OsString support
- src/main.rs: Add GitCommands::Other variant with external_subcommand
- src/main.rs: Add OsString import and match arm for passthrough
- Unit test: test_run_passthrough_accepts_args verifies signature
- Smoke tests: 3 new assertions for tag, remote, rev-parse

This preserves all git functionality while maintaining RTK's
token-optimized commands for supported operations.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 21:58:09 +01:00
Florian BRUNIAUX addb79cc72 chore: untrack claudedocs files (keep local)
Removes claudedocs/ files from git tracking while preserving them locally.
These files are internal documentation and should remain local only.

Files removed from tracking:
- claudedocs/audit-feature-summary.md
- claudedocs/cc-economics-implementation.md
- claudedocs/refactoring-report.md

claudedocs/ is already in .gitignore (line 38).

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 21:01:19 +01:00
Florian BRUNIAUX 278cc5700b feat: add rtk tree + fix rtk ls + audit phase 1-2
⚠️ MERGE AFTER: Résoudre issues Patrick (curl, benchmark, bypass)

## Changes

### 1. rtk tree - NEW COMMAND ✨
- Proxy vers `tree` natif avec filtrage token-optimized
- Filtre ligne summary ("X directories, Y files")
- Support complet flags natifs (-L, -d, -a, etc.)
- Message installation si tree absent
- Tests: 5/5 passing

Files:
- src/tree.rs (new, 159 lines)
- src/main.rs (add Tree command)

### 2. rtk ls - FIX 🐛
- Fix: ne force plus `-la` par défaut
- Comportement: passthrough pur vers ls natif
- Permet `rtk ls` simple sans flags forcés

Files:
- src/ls.rs (remove default -la)

### 3. Tests - UPDATE ✅
- Fix 3 tests obsolètes rtk ls (--depth, -f tree)
- Add 4 tests rtk tree
- Results: 75 PASS, 0 FAIL, 1 SKIP (98.7%)

Files:
- scripts/test-all.sh

## Audit Phase 1-2 (local docs)

Inventaire complet + analyse paramètres (40+ commandes):
- claudedocs/COMMAND_AUDIT.md
- claudedocs/PARAMETER_ANALYSIS.md
- claudedocs/rtk-tree-implementation.md
- claudedocs/PATRICK_FEEDBACK.md

15+ gaps critiques identifiés (grep -i, git fallback, etc.)

## Issues Patrick à résoudre AVANT merge

1. curl global à remettre
2. Benchmark.sh à exécuter
3. Souci de token à investiguer
4. Erreur PR/bypass des commandes
5. Commandes cassées à identifier

## Test

```bash
# Tree
rtk tree -L 2 src/
rtk tree -d -L 1 .

# Ls (nouveau comportement)
rtk ls          # Simple listing
rtk ls -la      # Detailed
rtk ls -lh      # Human readable

# Tests
bash scripts/test-all.sh  # 75 PASS ✅
cargo test tree::tests    # 5 PASS ✅
```

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-02 21:01:19 +01:00