Métriques du dépôt
- Stars
- (48 085 stars)
- Métriques de merge PR
- (Merge moyen 11j 1h) (45 PRs mergées en 30 j)
Description
Problem
Monorepo Node.js users (pnpm workspaces) get zero token savings from RTK because all their commands go through pnpm --filter <workspace> <tool>:
pnpm --filter web prettier --check .
pnpm --filter web tsc --noEmit
pnpm -F @scope/pkg vitest run
The rewrite layer and Clap parsing both fail to match these patterns. Root cause: every PATTERN regex assumes pnpm <subcommand> with no flags between pnpm and the subcommand. pnpm --filter web breaks all matching.
Strategy: Rewrite-Layer Normalization
Strip pnpm (--filter|-F) <workspace> in the rewrite layer before classification, then propagate the workspace value to tool modules via a hidden --pnpm-filter Clap global arg.
Why not pattern expansion: Adding pnpm --filter \S+ <tool> variants to every PATTERN regex and rewrite_prefixes array is combinatorial (7+ tools × 2 flag forms). Doesn't scale.
Expected behavior
# Hook rewrites transparently
pnpm --filter web prettier --check . → rtk prettier --pnpm-filter web --check .
pnpm -F web tsc --noEmit → rtk tsc --pnpm-filter web --noEmit
pnpm --filter web vitest run → rtk vitest --pnpm-filter web run
pnpm --filter web list → rtk pnpm --pnpm-filter web list
# rtk discover correctly classifies these as Supported (not Unsupported)
rtk discover → pnpm --filter web prettier [Supported, ~70% savings]
Files to modify (10 total)
| File | Change |
|---|---|
src/discover/registry.rs |
Rewrite core extraction, pnpm filter strip/inject, classify_command update |
src/main.rs |
--pnpm-filter global Clap arg + 8 dispatch updates |
src/utils.rs |
New package_manager_filtered_exec() |
src/prettier_cmd.rs |
Add pnpm_filter param |
src/format_cmd.rs |
Add pnpm_filter param |
src/tsc_cmd.rs |
Add pnpm_filter param |
src/vitest_cmd.rs |
Add pnpm_filter param |
src/lint_cmd.rs |
Add pnpm_filter param |
src/playwright_cmd.rs |
Add pnpm_filter param |
src/pnpm_cmd.rs |
Add pnpm_filter param |
Edge cases
- Scoped packages:
@scope/pkg—\S+regex handles it - Glob patterns:
./packages/*—\S+handles it - No filter: all existing behavior unchanged (
pnpm_filter = Nonethroughout) - Env prefixes:
sudo pnpm --filter web prettier— env prefix stripped first, re-added after rewrite - Unknown commands:
pnpm --filter web unknown-cmd→ no rewrite (passthrough)
Out of scope (future)
pnpm -w(workspace root flag)pnpm -r/--recursivepnpm --filter-prod
Related
Reported by Stephane (monorepo Node user via Slack).
Sub-issues: Phase 1 (#registry), Phase 2 (#main), Phase 3 (#utils), Phase 4 (#tool-modules)