@hasna/terminal 2.3.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/dist/cli.js +64 -16
  2. package/package.json +1 -1
  3. package/src/ai.ts +8 -0
  4. package/src/cli.tsx +57 -18
  5. package/src/output-processor.ts +6 -1
  6. package/src/output-store.ts +58 -12
  7. package/src/tool-profiles.ts +139 -0
  8. package/temp/rtk/.claude/agents/code-reviewer.md +0 -221
  9. package/temp/rtk/.claude/agents/debugger.md +0 -519
  10. package/temp/rtk/.claude/agents/rtk-testing-specialist.md +0 -461
  11. package/temp/rtk/.claude/agents/rust-rtk.md +0 -511
  12. package/temp/rtk/.claude/agents/technical-writer.md +0 -355
  13. package/temp/rtk/.claude/commands/diagnose.md +0 -352
  14. package/temp/rtk/.claude/commands/test-routing.md +0 -362
  15. package/temp/rtk/.claude/hooks/bash/pre-commit-format.sh +0 -16
  16. package/temp/rtk/.claude/hooks/rtk-rewrite.sh +0 -70
  17. package/temp/rtk/.claude/hooks/rtk-suggest.sh +0 -152
  18. package/temp/rtk/.claude/rules/cli-testing.md +0 -526
  19. package/temp/rtk/.claude/skills/issue-triage/SKILL.md +0 -348
  20. package/temp/rtk/.claude/skills/issue-triage/templates/issue-comment.md +0 -134
  21. package/temp/rtk/.claude/skills/performance.md +0 -435
  22. package/temp/rtk/.claude/skills/pr-triage/SKILL.md +0 -315
  23. package/temp/rtk/.claude/skills/pr-triage/templates/review-comment.md +0 -71
  24. package/temp/rtk/.claude/skills/repo-recap.md +0 -206
  25. package/temp/rtk/.claude/skills/rtk-tdd/SKILL.md +0 -78
  26. package/temp/rtk/.claude/skills/rtk-tdd/references/testing-patterns.md +0 -124
  27. package/temp/rtk/.claude/skills/security-guardian.md +0 -503
  28. package/temp/rtk/.claude/skills/ship.md +0 -404
  29. package/temp/rtk/.github/workflows/benchmark.yml +0 -34
  30. package/temp/rtk/.github/workflows/dco-check.yaml +0 -12
  31. package/temp/rtk/.github/workflows/release-please.yml +0 -51
  32. package/temp/rtk/.github/workflows/release.yml +0 -343
  33. package/temp/rtk/.github/workflows/security-check.yml +0 -135
  34. package/temp/rtk/.github/workflows/validate-docs.yml +0 -78
  35. package/temp/rtk/.release-please-manifest.json +0 -3
  36. package/temp/rtk/ARCHITECTURE.md +0 -1491
  37. package/temp/rtk/CHANGELOG.md +0 -640
  38. package/temp/rtk/CLAUDE.md +0 -605
  39. package/temp/rtk/CONTRIBUTING.md +0 -199
  40. package/temp/rtk/Cargo.lock +0 -1668
  41. package/temp/rtk/Cargo.toml +0 -64
  42. package/temp/rtk/Formula/rtk.rb +0 -43
  43. package/temp/rtk/INSTALL.md +0 -390
  44. package/temp/rtk/LICENSE +0 -21
  45. package/temp/rtk/README.md +0 -386
  46. package/temp/rtk/README_es.md +0 -159
  47. package/temp/rtk/README_fr.md +0 -197
  48. package/temp/rtk/README_ja.md +0 -159
  49. package/temp/rtk/README_ko.md +0 -159
  50. package/temp/rtk/README_zh.md +0 -167
  51. package/temp/rtk/ROADMAP.md +0 -15
  52. package/temp/rtk/SECURITY.md +0 -217
  53. package/temp/rtk/TEST_EXEC_TIME.md +0 -102
  54. package/temp/rtk/build.rs +0 -57
  55. package/temp/rtk/docs/AUDIT_GUIDE.md +0 -432
  56. package/temp/rtk/docs/FEATURES.md +0 -1410
  57. package/temp/rtk/docs/TROUBLESHOOTING.md +0 -309
  58. package/temp/rtk/docs/filter-workflow.md +0 -102
  59. package/temp/rtk/docs/images/gain-dashboard.jpg +0 -0
  60. package/temp/rtk/docs/tracking.md +0 -583
  61. package/temp/rtk/hooks/opencode-rtk.ts +0 -39
  62. package/temp/rtk/hooks/rtk-awareness.md +0 -29
  63. package/temp/rtk/hooks/rtk-rewrite.sh +0 -61
  64. package/temp/rtk/hooks/test-rtk-rewrite.sh +0 -442
  65. package/temp/rtk/install.sh +0 -124
  66. package/temp/rtk/release-please-config.json +0 -10
  67. package/temp/rtk/scripts/benchmark.sh +0 -592
  68. package/temp/rtk/scripts/check-installation.sh +0 -162
  69. package/temp/rtk/scripts/install-local.sh +0 -37
  70. package/temp/rtk/scripts/rtk-economics.sh +0 -137
  71. package/temp/rtk/scripts/test-all.sh +0 -561
  72. package/temp/rtk/scripts/test-aristote.sh +0 -227
  73. package/temp/rtk/scripts/test-tracking.sh +0 -79
  74. package/temp/rtk/scripts/update-readme-metrics.sh +0 -32
  75. package/temp/rtk/scripts/validate-docs.sh +0 -73
  76. package/temp/rtk/src/aws_cmd.rs +0 -880
  77. package/temp/rtk/src/binlog.rs +0 -1645
  78. package/temp/rtk/src/cargo_cmd.rs +0 -1727
  79. package/temp/rtk/src/cc_economics.rs +0 -1157
  80. package/temp/rtk/src/ccusage.rs +0 -340
  81. package/temp/rtk/src/config.rs +0 -187
  82. package/temp/rtk/src/container.rs +0 -855
  83. package/temp/rtk/src/curl_cmd.rs +0 -134
  84. package/temp/rtk/src/deps.rs +0 -268
  85. package/temp/rtk/src/diff_cmd.rs +0 -367
  86. package/temp/rtk/src/discover/mod.rs +0 -274
  87. package/temp/rtk/src/discover/provider.rs +0 -388
  88. package/temp/rtk/src/discover/registry.rs +0 -2022
  89. package/temp/rtk/src/discover/report.rs +0 -202
  90. package/temp/rtk/src/discover/rules.rs +0 -667
  91. package/temp/rtk/src/display_helpers.rs +0 -402
  92. package/temp/rtk/src/dotnet_cmd.rs +0 -1771
  93. package/temp/rtk/src/dotnet_format_report.rs +0 -133
  94. package/temp/rtk/src/dotnet_trx.rs +0 -593
  95. package/temp/rtk/src/env_cmd.rs +0 -204
  96. package/temp/rtk/src/filter.rs +0 -462
  97. package/temp/rtk/src/filters/README.md +0 -52
  98. package/temp/rtk/src/filters/ansible-playbook.toml +0 -34
  99. package/temp/rtk/src/filters/basedpyright.toml +0 -47
  100. package/temp/rtk/src/filters/biome.toml +0 -45
  101. package/temp/rtk/src/filters/brew-install.toml +0 -37
  102. package/temp/rtk/src/filters/composer-install.toml +0 -40
  103. package/temp/rtk/src/filters/df.toml +0 -16
  104. package/temp/rtk/src/filters/dotnet-build.toml +0 -64
  105. package/temp/rtk/src/filters/du.toml +0 -16
  106. package/temp/rtk/src/filters/fail2ban-client.toml +0 -15
  107. package/temp/rtk/src/filters/gcc.toml +0 -49
  108. package/temp/rtk/src/filters/gcloud.toml +0 -22
  109. package/temp/rtk/src/filters/hadolint.toml +0 -24
  110. package/temp/rtk/src/filters/helm.toml +0 -29
  111. package/temp/rtk/src/filters/iptables.toml +0 -27
  112. package/temp/rtk/src/filters/jj.toml +0 -28
  113. package/temp/rtk/src/filters/jq.toml +0 -24
  114. package/temp/rtk/src/filters/make.toml +0 -41
  115. package/temp/rtk/src/filters/markdownlint.toml +0 -24
  116. package/temp/rtk/src/filters/mix-compile.toml +0 -27
  117. package/temp/rtk/src/filters/mix-format.toml +0 -15
  118. package/temp/rtk/src/filters/mvn-build.toml +0 -44
  119. package/temp/rtk/src/filters/oxlint.toml +0 -43
  120. package/temp/rtk/src/filters/ping.toml +0 -63
  121. package/temp/rtk/src/filters/pio-run.toml +0 -40
  122. package/temp/rtk/src/filters/poetry-install.toml +0 -50
  123. package/temp/rtk/src/filters/pre-commit.toml +0 -35
  124. package/temp/rtk/src/filters/ps.toml +0 -16
  125. package/temp/rtk/src/filters/quarto-render.toml +0 -41
  126. package/temp/rtk/src/filters/rsync.toml +0 -48
  127. package/temp/rtk/src/filters/shellcheck.toml +0 -27
  128. package/temp/rtk/src/filters/shopify-theme.toml +0 -29
  129. package/temp/rtk/src/filters/skopeo.toml +0 -45
  130. package/temp/rtk/src/filters/sops.toml +0 -16
  131. package/temp/rtk/src/filters/ssh.toml +0 -44
  132. package/temp/rtk/src/filters/stat.toml +0 -34
  133. package/temp/rtk/src/filters/swift-build.toml +0 -41
  134. package/temp/rtk/src/filters/systemctl-status.toml +0 -33
  135. package/temp/rtk/src/filters/terraform-plan.toml +0 -35
  136. package/temp/rtk/src/filters/tofu-fmt.toml +0 -16
  137. package/temp/rtk/src/filters/tofu-init.toml +0 -38
  138. package/temp/rtk/src/filters/tofu-plan.toml +0 -35
  139. package/temp/rtk/src/filters/tofu-validate.toml +0 -17
  140. package/temp/rtk/src/filters/trunk-build.toml +0 -39
  141. package/temp/rtk/src/filters/ty.toml +0 -50
  142. package/temp/rtk/src/filters/uv-sync.toml +0 -37
  143. package/temp/rtk/src/filters/xcodebuild.toml +0 -99
  144. package/temp/rtk/src/filters/yamllint.toml +0 -25
  145. package/temp/rtk/src/find_cmd.rs +0 -598
  146. package/temp/rtk/src/format_cmd.rs +0 -386
  147. package/temp/rtk/src/gain.rs +0 -723
  148. package/temp/rtk/src/gh_cmd.rs +0 -1651
  149. package/temp/rtk/src/git.rs +0 -2012
  150. package/temp/rtk/src/go_cmd.rs +0 -592
  151. package/temp/rtk/src/golangci_cmd.rs +0 -254
  152. package/temp/rtk/src/grep_cmd.rs +0 -288
  153. package/temp/rtk/src/gt_cmd.rs +0 -810
  154. package/temp/rtk/src/hook_audit_cmd.rs +0 -283
  155. package/temp/rtk/src/hook_check.rs +0 -171
  156. package/temp/rtk/src/init.rs +0 -1859
  157. package/temp/rtk/src/integrity.rs +0 -537
  158. package/temp/rtk/src/json_cmd.rs +0 -231
  159. package/temp/rtk/src/learn/detector.rs +0 -628
  160. package/temp/rtk/src/learn/mod.rs +0 -119
  161. package/temp/rtk/src/learn/report.rs +0 -184
  162. package/temp/rtk/src/lint_cmd.rs +0 -694
  163. package/temp/rtk/src/local_llm.rs +0 -316
  164. package/temp/rtk/src/log_cmd.rs +0 -248
  165. package/temp/rtk/src/ls.rs +0 -324
  166. package/temp/rtk/src/main.rs +0 -2482
  167. package/temp/rtk/src/mypy_cmd.rs +0 -389
  168. package/temp/rtk/src/next_cmd.rs +0 -241
  169. package/temp/rtk/src/npm_cmd.rs +0 -236
  170. package/temp/rtk/src/parser/README.md +0 -267
  171. package/temp/rtk/src/parser/error.rs +0 -46
  172. package/temp/rtk/src/parser/formatter.rs +0 -336
  173. package/temp/rtk/src/parser/mod.rs +0 -311
  174. package/temp/rtk/src/parser/types.rs +0 -119
  175. package/temp/rtk/src/pip_cmd.rs +0 -302
  176. package/temp/rtk/src/playwright_cmd.rs +0 -479
  177. package/temp/rtk/src/pnpm_cmd.rs +0 -573
  178. package/temp/rtk/src/prettier_cmd.rs +0 -221
  179. package/temp/rtk/src/prisma_cmd.rs +0 -482
  180. package/temp/rtk/src/psql_cmd.rs +0 -382
  181. package/temp/rtk/src/pytest_cmd.rs +0 -384
  182. package/temp/rtk/src/read.rs +0 -217
  183. package/temp/rtk/src/rewrite_cmd.rs +0 -50
  184. package/temp/rtk/src/ruff_cmd.rs +0 -402
  185. package/temp/rtk/src/runner.rs +0 -271
  186. package/temp/rtk/src/summary.rs +0 -297
  187. package/temp/rtk/src/tee.rs +0 -405
  188. package/temp/rtk/src/telemetry.rs +0 -248
  189. package/temp/rtk/src/toml_filter.rs +0 -1655
  190. package/temp/rtk/src/tracking.rs +0 -1416
  191. package/temp/rtk/src/tree.rs +0 -209
  192. package/temp/rtk/src/tsc_cmd.rs +0 -259
  193. package/temp/rtk/src/utils.rs +0 -432
  194. package/temp/rtk/src/verify_cmd.rs +0 -47
  195. package/temp/rtk/src/vitest_cmd.rs +0 -385
  196. package/temp/rtk/src/wc_cmd.rs +0 -401
  197. package/temp/rtk/src/wget_cmd.rs +0 -260
  198. package/temp/rtk/tests/fixtures/dotnet/build_failed.txt +0 -11
  199. package/temp/rtk/tests/fixtures/dotnet/format_changes.json +0 -31
  200. package/temp/rtk/tests/fixtures/dotnet/format_empty.json +0 -1
  201. package/temp/rtk/tests/fixtures/dotnet/format_success.json +0 -12
  202. package/temp/rtk/tests/fixtures/dotnet/test_failed.txt +0 -18
@@ -1,592 +0,0 @@
1
- #!/bin/bash
2
- set -e
3
-
4
- # Use local release build if available, otherwise fall back to installed rtk
5
- if [ -f "./target/release/rtk" ]; then
6
- RTK="$(cd "$(dirname ./target/release/rtk)" && pwd)/$(basename ./target/release/rtk)"
7
- elif command -v rtk &> /dev/null; then
8
- RTK="$(command -v rtk)"
9
- else
10
- echo "Error: rtk not found. Run 'cargo build --release' or install rtk."
11
- exit 1
12
- fi
13
- BENCH_DIR="$(pwd)/scripts/benchmark"
14
-
15
- # Mode local : générer les fichiers debug
16
- if [ -z "$CI" ]; then
17
- rm -rf "$BENCH_DIR"
18
- mkdir -p "$BENCH_DIR/unix" "$BENCH_DIR/rtk" "$BENCH_DIR/diff"
19
- fi
20
-
21
- # Nom de fichier safe
22
- safe_name() {
23
- echo "$1" | tr ' /' '_-' | tr -cd 'a-zA-Z0-9_-'
24
- }
25
-
26
- # Fonction pour compter les tokens (~4 chars = 1 token)
27
- count_tokens() {
28
- local input="$1"
29
- local len=${#input}
30
- echo $(( (len + 3) / 4 ))
31
- }
32
-
33
- # Compteurs globaux
34
- TOTAL_UNIX=0
35
- TOTAL_RTK=0
36
- TOTAL_TESTS=0
37
- GOOD_TESTS=0
38
- FAIL_TESTS=0
39
- SKIP_TESTS=0
40
-
41
- # Fonction de benchmark — une ligne par test
42
- bench() {
43
- local name="$1"
44
- local unix_cmd="$2"
45
- local rtk_cmd="$3"
46
-
47
- unix_out=$(eval "$unix_cmd" 2>/dev/null || true)
48
- rtk_out=$(eval "$rtk_cmd" 2>/dev/null || true)
49
-
50
- unix_tokens=$(count_tokens "$unix_out")
51
- rtk_tokens=$(count_tokens "$rtk_out")
52
-
53
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
54
-
55
- local icon=""
56
- local tag=""
57
-
58
- if [ -z "$rtk_out" ]; then
59
- icon="❌"
60
- tag="FAIL"
61
- FAIL_TESTS=$((FAIL_TESTS + 1))
62
- TOTAL_UNIX=$((TOTAL_UNIX + unix_tokens))
63
- TOTAL_RTK=$((TOTAL_RTK + unix_tokens))
64
- elif [ "$rtk_tokens" -ge "$unix_tokens" ] && [ "$unix_tokens" -gt 0 ]; then
65
- icon="⚠️"
66
- tag="SKIP"
67
- SKIP_TESTS=$((SKIP_TESTS + 1))
68
- TOTAL_UNIX=$((TOTAL_UNIX + unix_tokens))
69
- TOTAL_RTK=$((TOTAL_RTK + unix_tokens))
70
- else
71
- icon="✅"
72
- tag="GOOD"
73
- GOOD_TESTS=$((GOOD_TESTS + 1))
74
- TOTAL_UNIX=$((TOTAL_UNIX + unix_tokens))
75
- TOTAL_RTK=$((TOTAL_RTK + rtk_tokens))
76
- fi
77
-
78
- if [ "$tag" = "FAIL" ]; then
79
- printf "%s %-24s │ %-40s │ %-40s │ %6d → %6s (--)\n" \
80
- "$icon" "$name" "$unix_cmd" "$rtk_cmd" "$unix_tokens" "-"
81
- else
82
- if [ "$unix_tokens" -gt 0 ]; then
83
- local pct=$(( (unix_tokens - rtk_tokens) * 100 / unix_tokens ))
84
- else
85
- local pct=0
86
- fi
87
- printf "%s %-24s │ %-40s │ %-40s │ %6d → %6d (%+d%%)\n" \
88
- "$icon" "$name" "$unix_cmd" "$rtk_cmd" "$unix_tokens" "$rtk_tokens" "$pct"
89
- fi
90
-
91
- # Fichiers debug en local uniquement
92
- if [ -z "$CI" ]; then
93
- local filename=$(safe_name "$name")
94
- local prefix="GOOD"
95
- [ "$tag" = "FAIL" ] && prefix="FAIL"
96
- [ "$tag" = "SKIP" ] && prefix="BAD"
97
-
98
- local ts=$(date "+%d/%m/%Y %H:%M:%S")
99
-
100
- printf "# %s\n> %s\n\n\`\`\`bash\n$ %s\n\`\`\`\n\n\`\`\`\n%s\n\`\`\`\n" \
101
- "$name" "$ts" "$unix_cmd" "$unix_out" > "$BENCH_DIR/unix/${filename}.md"
102
-
103
- printf "# %s\n> %s\n\n\`\`\`bash\n$ %s\n\`\`\`\n\n\`\`\`\n%s\n\`\`\`\n" \
104
- "$name" "$ts" "$rtk_cmd" "$rtk_out" > "$BENCH_DIR/rtk/${filename}.md"
105
-
106
- {
107
- echo "# Diff: $name"
108
- echo "> $ts"
109
- echo ""
110
- echo "| Metric | Unix | RTK |"
111
- echo "|--------|------|-----|"
112
- echo "| Tokens | $unix_tokens | $rtk_tokens |"
113
- echo ""
114
- echo "## Unix"
115
- echo "\`\`\`"
116
- echo "$unix_out"
117
- echo "\`\`\`"
118
- echo ""
119
- echo "## RTK"
120
- echo "\`\`\`"
121
- echo "$rtk_out"
122
- echo "\`\`\`"
123
- } > "$BENCH_DIR/diff/${prefix}-${filename}.md"
124
- fi
125
- }
126
-
127
- # Section header
128
- section() {
129
- echo ""
130
- echo "── $1 ──"
131
- }
132
-
133
- # ═══════════════════════════════════════════
134
- echo "RTK Benchmark"
135
- echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════"
136
- printf " %-24s │ %-40s │ %-40s │ %s\n" "TEST" "SHELL" "RTK" "TOKENS"
137
- echo "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────"
138
-
139
- # ===================
140
- # ls
141
- # ===================
142
- section "ls"
143
- bench "ls" "ls -la" "$RTK ls"
144
- bench "ls src/" "ls -la src/" "$RTK ls src/"
145
- bench "ls -l src/" "ls -l src/" "$RTK ls -l src/"
146
- bench "ls -la src/" "ls -la src/" "$RTK ls -la src/"
147
- bench "ls -lh src/" "ls -lh src/" "$RTK ls -lh src/"
148
- bench "ls src/ -l" "ls -l src/" "$RTK ls src/ -l"
149
- bench "ls -a" "ls -la" "$RTK ls -a"
150
- bench "ls multi" "ls -la src/ scripts/" "$RTK ls src/ scripts/"
151
-
152
- # ===================
153
- # read
154
- # ===================
155
- section "read"
156
- bench "read" "cat src/main.rs" "$RTK read src/main.rs"
157
- bench "read -l minimal" "cat src/main.rs" "$RTK read src/main.rs -l minimal"
158
- bench "read -l aggressive" "cat src/main.rs" "$RTK read src/main.rs -l aggressive"
159
- bench "read -n" "cat -n src/main.rs" "$RTK read src/main.rs -n"
160
-
161
- # ===================
162
- # find
163
- # ===================
164
- section "find"
165
- bench "find *" "find . -type f" "$RTK find '*'"
166
- bench "find *.rs" "find . -name '*.rs' -type f" "$RTK find '*.rs'"
167
- bench "find --max 10" "find . -not -path './target/*' -not -path './.git/*' -type f | head -10" "$RTK find '*' --max 10"
168
- bench "find --max 100" "find . -not -path './target/*' -not -path './.git/*' -type f | head -100" "$RTK find '*' --max 100"
169
-
170
- # ===================
171
- # git
172
- # ===================
173
- section "git"
174
- bench "git status" "git status" "$RTK git status"
175
- bench "git log -n 10" "git log -10" "$RTK git log -n 10"
176
- bench "git log -n 5" "git log -5" "$RTK git log -n 5"
177
- bench "git diff" "git diff HEAD~1 2>/dev/null || echo ''" "$RTK git diff HEAD~1"
178
-
179
- # ===================
180
- # grep
181
- # ===================
182
- section "grep"
183
- bench "grep fn" "grep -rn 'fn ' src/ || true" "$RTK grep 'fn ' src/"
184
- bench "grep struct" "grep -rn 'struct ' src/ || true" "$RTK grep 'struct ' src/"
185
- bench "grep -l 40" "grep -rn 'fn ' src/ || true" "$RTK grep 'fn ' src/ -l 40"
186
- bench "grep --max 20" "grep -rn 'fn ' src/ | head -20 || true" "$RTK grep 'fn ' src/ --max 20"
187
- bench "grep -c" "grep -ron 'fn ' src/ || true" "$RTK grep 'fn ' src/ -c"
188
-
189
- # ===================
190
- # json
191
- # ===================
192
- section "json"
193
- cat > /tmp/rtk_bench.json << 'JSONEOF'
194
- {
195
- "name": "rtk",
196
- "version": "0.2.1",
197
- "config": {
198
- "debug": false,
199
- "max_depth": 10,
200
- "filters": ["node_modules", "target", ".git"]
201
- },
202
- "dependencies": {
203
- "serde": "1.0",
204
- "clap": "4.0",
205
- "anyhow": "1.0"
206
- }
207
- }
208
- JSONEOF
209
- bench "json" "cat /tmp/rtk_bench.json" "$RTK json /tmp/rtk_bench.json"
210
- bench "json -d 2" "cat /tmp/rtk_bench.json" "$RTK json /tmp/rtk_bench.json -d 2"
211
- rm -f /tmp/rtk_bench.json
212
-
213
- # ===================
214
- # deps
215
- # ===================
216
- section "deps"
217
- bench "deps" "cat Cargo.toml" "$RTK deps"
218
-
219
- # ===================
220
- # env
221
- # ===================
222
- section "env"
223
- bench "env" "env" "$RTK env"
224
- bench "env -f PATH" "env | grep PATH" "$RTK env -f PATH"
225
- bench "env --show-all" "env" "$RTK env --show-all"
226
-
227
- # ===================
228
- # err
229
- # ===================
230
- section "err"
231
- if command -v cargo &>/dev/null; then
232
- bench "err cargo build" "cargo build 2>&1 || true" "$RTK err cargo build"
233
- else
234
- echo "⏭️ err cargo build (cargo not in PATH, skipped)"
235
- fi
236
-
237
- # ===================
238
- # test
239
- # ===================
240
- section "test"
241
- if command -v cargo &>/dev/null; then
242
- bench "test cargo test" "cargo test 2>&1 || true" "$RTK test cargo test"
243
- else
244
- echo "⏭️ test cargo test (cargo not in PATH, skipped)"
245
- fi
246
-
247
- # ===================
248
- # log
249
- # ===================
250
- section "log"
251
- LOG_FILE="/tmp/rtk_bench_sample.log"
252
- cat > "$LOG_FILE" << 'LOGEOF'
253
- 2024-01-15 10:00:01 INFO Application started
254
- 2024-01-15 10:00:02 INFO Loading configuration
255
- 2024-01-15 10:00:03 ERROR Connection failed: timeout
256
- 2024-01-15 10:00:04 ERROR Connection failed: timeout
257
- 2024-01-15 10:00:05 ERROR Connection failed: timeout
258
- 2024-01-15 10:00:06 ERROR Connection failed: timeout
259
- 2024-01-15 10:00:07 ERROR Connection failed: timeout
260
- 2024-01-15 10:00:08 WARN Retrying connection
261
- 2024-01-15 10:00:09 INFO Connection established
262
- 2024-01-15 10:00:10 INFO Processing request
263
- 2024-01-15 10:00:11 INFO Processing request
264
- 2024-01-15 10:00:12 INFO Processing request
265
- 2024-01-15 10:00:13 INFO Request completed
266
- LOGEOF
267
- bench "log" "cat $LOG_FILE" "$RTK log $LOG_FILE"
268
- rm -f "$LOG_FILE"
269
-
270
- # ===================
271
- # summary
272
- # ===================
273
- section "summary"
274
- if command -v cargo &>/dev/null; then
275
- bench "summary cargo --help" "cargo --help" "$RTK summary cargo --help"
276
- else
277
- echo "⏭️ summary cargo --help (cargo not in PATH, skipped)"
278
- fi
279
- if command -v rustc &>/dev/null; then
280
- bench "summary rustc --help" "rustc --help 2>/dev/null || echo 'rustc not found'" "$RTK summary rustc --help"
281
- else
282
- echo "⏭️ summary rustc --help (rustc not in PATH, skipped)"
283
- fi
284
-
285
- # ===================
286
- # cargo
287
- # ===================
288
- section "cargo"
289
- if command -v cargo &>/dev/null; then
290
- bench "cargo build" "cargo build 2>&1 || true" "$RTK cargo build"
291
- bench "cargo test" "cargo test 2>&1 || true" "$RTK cargo test"
292
- bench "cargo clippy" "cargo clippy 2>&1 || true" "$RTK cargo clippy"
293
- bench "cargo check" "cargo check 2>&1 || true" "$RTK cargo check"
294
- else
295
- echo "⏭️ cargo build/test/clippy/check (cargo not in PATH, skipped)"
296
- fi
297
-
298
- # ===================
299
- # diff
300
- # ===================
301
- section "diff"
302
- bench "diff" "diff Cargo.toml LICENSE 2>&1 || true" "$RTK diff Cargo.toml LICENSE"
303
-
304
- # ===================
305
- # smart
306
- # ===================
307
- section "smart"
308
- bench "smart main.rs" "cat src/main.rs" "$RTK smart src/main.rs"
309
-
310
- # ===================
311
- # wc
312
- # ===================
313
- section "wc"
314
- bench "wc" "wc Cargo.toml src/main.rs" "$RTK wc Cargo.toml src/main.rs"
315
-
316
- # ===================
317
- # curl
318
- # ===================
319
- section "curl"
320
- if command -v curl &> /dev/null; then
321
- bench "curl json" "curl -s https://httpbin.org/json" "$RTK curl https://httpbin.org/json"
322
- bench "curl text" "curl -s https://httpbin.org/robots.txt" "$RTK curl https://httpbin.org/robots.txt"
323
- fi
324
-
325
- # ===================
326
- # wget
327
- # ===================
328
- if command -v wget &> /dev/null; then
329
- section "wget"
330
- bench "wget" "wget -qO- https://httpbin.org/robots.txt" "$RTK wget https://httpbin.org/robots.txt -O"
331
- fi
332
-
333
- # ===================
334
- # Modern JavaScript Stack (skip si pas de package.json)
335
- # ===================
336
- if [ -f "package.json" ]; then
337
- section "modern JS stack"
338
-
339
- if command -v tsc &> /dev/null || [ -f "node_modules/.bin/tsc" ]; then
340
- bench "tsc" "tsc --noEmit 2>&1 || true" "$RTK tsc --noEmit"
341
- fi
342
-
343
- if command -v prettier &> /dev/null || [ -f "node_modules/.bin/prettier" ]; then
344
- bench "prettier --check" "prettier --check . 2>&1 || true" "$RTK prettier --check ."
345
- fi
346
-
347
- if command -v eslint &> /dev/null || [ -f "node_modules/.bin/eslint" ]; then
348
- bench "lint" "eslint . 2>&1 || true" "$RTK lint ."
349
- fi
350
-
351
- if [ -f "next.config.js" ] || [ -f "next.config.mjs" ] || [ -f "next.config.ts" ]; then
352
- if command -v next &> /dev/null || [ -f "node_modules/.bin/next" ]; then
353
- bench "next build" "next build 2>&1 || true" "$RTK next build"
354
- fi
355
- fi
356
-
357
- if [ -f "playwright.config.ts" ] || [ -f "playwright.config.js" ]; then
358
- if command -v playwright &> /dev/null || [ -f "node_modules/.bin/playwright" ]; then
359
- bench "playwright test" "playwright test 2>&1 || true" "$RTK playwright test"
360
- fi
361
- fi
362
-
363
- if [ -f "prisma/schema.prisma" ]; then
364
- if command -v prisma &> /dev/null || [ -f "node_modules/.bin/prisma" ]; then
365
- bench "prisma generate" "prisma generate 2>&1 || true" "$RTK prisma generate"
366
- fi
367
- fi
368
-
369
- if command -v vitest &> /dev/null || [ -f "node_modules/.bin/vitest" ]; then
370
- bench "vitest run" "vitest run --reporter=json 2>&1 || true" "$RTK vitest run"
371
- fi
372
-
373
- if command -v pnpm &> /dev/null; then
374
- bench "pnpm list" "pnpm list --depth 0 2>&1 || true" "$RTK pnpm list --depth 0"
375
- bench "pnpm outdated" "pnpm outdated 2>&1 || true" "$RTK pnpm outdated"
376
- fi
377
- fi
378
-
379
- # ===================
380
- # gh (skip si pas dispo ou pas dans un repo)
381
- # ===================
382
- if command -v gh &> /dev/null && git rev-parse --git-dir &> /dev/null; then
383
- section "gh"
384
- bench "gh pr list" "gh pr list 2>&1 || true" "$RTK gh pr list"
385
- bench "gh run list" "gh run list 2>&1 || true" "$RTK gh run list"
386
- fi
387
-
388
- # ===================
389
- # docker (skip si pas dispo)
390
- # ===================
391
- if command -v docker &> /dev/null; then
392
- section "docker"
393
- bench "docker ps" "docker ps 2>/dev/null || true" "$RTK docker ps"
394
- bench "docker images" "docker images 2>/dev/null || true" "$RTK docker images"
395
- fi
396
-
397
- # ===================
398
- # kubectl (skip si pas dispo)
399
- # ===================
400
- if command -v kubectl &> /dev/null; then
401
- section "kubectl"
402
- bench "kubectl pods" "kubectl get pods 2>/dev/null || true" "$RTK kubectl pods"
403
- bench "kubectl services" "kubectl get services 2>/dev/null || true" "$RTK kubectl services"
404
- fi
405
-
406
- # ===================
407
- # Python (avec fixtures temporaires)
408
- # ===================
409
- if command -v python3 &> /dev/null && command -v ruff &> /dev/null && command -v pytest &> /dev/null; then
410
- section "python"
411
-
412
- PYTHON_FIXTURE=$(mktemp -d)
413
- cd "$PYTHON_FIXTURE"
414
-
415
- # pyproject.toml
416
- cat > pyproject.toml << 'PYEOF'
417
- [project]
418
- name = "rtk-bench"
419
- version = "0.1.0"
420
-
421
- [tool.ruff]
422
- line-length = 88
423
- PYEOF
424
-
425
- # sample.py avec quelques issues ruff
426
- cat > sample.py << 'PYEOF'
427
- import os
428
- import sys
429
- import json
430
-
431
-
432
- def process_data(x):
433
- if x == None: # E711: comparison to None
434
- return []
435
- result = []
436
- for i in range(len(x)): # C416: unnecessary list comprehension
437
- result.append(x[i] * 2)
438
- return result
439
-
440
- def unused_function(): # F841: local variable assigned but never used
441
- temp = 42
442
- return None
443
- PYEOF
444
-
445
- # test_sample.py
446
- cat > test_sample.py << 'PYEOF'
447
- from sample import process_data
448
-
449
- def test_process_data():
450
- assert process_data([1, 2, 3]) == [2, 4, 6]
451
-
452
- def test_process_data_none():
453
- assert process_data(None) == []
454
- PYEOF
455
-
456
- bench "ruff check" "ruff check . 2>&1 || true" "$RTK ruff check ."
457
- bench "pytest" "pytest -v 2>&1 || true" "$RTK pytest -v"
458
-
459
- cd - > /dev/null
460
- rm -rf "$PYTHON_FIXTURE"
461
- fi
462
-
463
- # ===================
464
- # Go (avec fixtures temporaires)
465
- # ===================
466
- if command -v go &> /dev/null && command -v golangci-lint &> /dev/null; then
467
- section "go"
468
-
469
- GO_FIXTURE=$(mktemp -d)
470
- cd "$GO_FIXTURE"
471
-
472
- # go.mod
473
- cat > go.mod << 'GOEOF'
474
- module bench
475
-
476
- go 1.21
477
- GOEOF
478
-
479
- # main.go
480
- cat > main.go << 'GOEOF'
481
- package main
482
-
483
- import "fmt"
484
-
485
- func Add(a, b int) int {
486
- return a + b
487
- }
488
-
489
- func Multiply(a, b int) int {
490
- return a * b
491
- }
492
-
493
- func main() {
494
- fmt.Println(Add(2, 3))
495
- fmt.Println(Multiply(4, 5))
496
- }
497
- GOEOF
498
-
499
- # main_test.go
500
- cat > main_test.go << 'GOEOF'
501
- package main
502
-
503
- import "testing"
504
-
505
- func TestAdd(t *testing.T) {
506
- result := Add(2, 3)
507
- if result != 5 {
508
- t.Errorf("Add(2, 3) = %d; want 5", result)
509
- }
510
- }
511
-
512
- func TestMultiply(t *testing.T) {
513
- result := Multiply(4, 5)
514
- if result != 20 {
515
- t.Errorf("Multiply(4, 5) = %d; want 20", result)
516
- }
517
- }
518
- GOEOF
519
-
520
- bench "golangci-lint" "golangci-lint run 2>&1 || true" "$RTK golangci-lint run"
521
- bench "go test" "go test -v 2>&1 || true" "$RTK go test -v"
522
- bench "go build" "go build ./... 2>&1 || true" "$RTK go build ./..."
523
- bench "go vet" "go vet ./... 2>&1 || true" "$RTK go vet ./..."
524
-
525
- cd - > /dev/null
526
- rm -rf "$GO_FIXTURE"
527
- fi
528
-
529
- # ===================
530
- # rewrite (verify rewrite works with and without quotes)
531
- # ===================
532
- section "rewrite"
533
-
534
- # bench_rewrite: verifies rewrite produces expected output (not token comparison)
535
- bench_rewrite() {
536
- local name="$1"
537
- local cmd="$2"
538
- local expected="$3"
539
-
540
- result=$(eval "$cmd" 2>&1 || true)
541
-
542
- TOTAL_TESTS=$((TOTAL_TESTS + 1))
543
-
544
- if [ "$result" = "$expected" ]; then
545
- printf "✅ %-24s │ %-40s │ %s\n" "$name" "$cmd" "$result"
546
- GOOD_TESTS=$((GOOD_TESTS + 1))
547
- else
548
- printf "❌ %-24s │ %-40s │ got: %s (expected: %s)\n" "$name" "$cmd" "$result" "$expected"
549
- FAIL_TESTS=$((FAIL_TESTS + 1))
550
- fi
551
- }
552
-
553
- bench_rewrite "rewrite quoted" "$RTK rewrite 'git status'" "rtk git status"
554
- bench_rewrite "rewrite unquoted" "$RTK rewrite git status" "rtk git status"
555
- bench_rewrite "rewrite ls -al" "$RTK rewrite ls -al" "rtk ls -al"
556
- bench_rewrite "rewrite npm exec" "$RTK rewrite npm exec" "rtk npm exec"
557
- bench_rewrite "rewrite cargo test" "$RTK rewrite cargo test" "rtk cargo test"
558
- bench_rewrite "rewrite compound" "$RTK rewrite 'cargo test && git push'" "rtk cargo test && rtk git push"
559
-
560
- # ===================
561
- # Résumé global
562
- # ===================
563
- echo ""
564
- echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════"
565
-
566
- if [ "$TOTAL_TESTS" -gt 0 ]; then
567
- GOOD_PCT=$((GOOD_TESTS * 100 / TOTAL_TESTS))
568
- if [ "$TOTAL_UNIX" -gt 0 ]; then
569
- TOTAL_SAVED=$((TOTAL_UNIX - TOTAL_RTK))
570
- TOTAL_SAVE_PCT=$((TOTAL_SAVED * 100 / TOTAL_UNIX))
571
- else
572
- TOTAL_SAVED=0
573
- TOTAL_SAVE_PCT=0
574
- fi
575
-
576
- echo ""
577
- echo " ✅ $GOOD_TESTS good ⚠️ $SKIP_TESTS skip ❌ $FAIL_TESTS fail $GOOD_TESTS/$TOTAL_TESTS ($GOOD_PCT%)"
578
- echo " Tokens: $TOTAL_UNIX → $TOTAL_RTK (-$TOTAL_SAVE_PCT%)"
579
- echo ""
580
-
581
- # Fichiers debug en local
582
- if [ -z "$CI" ]; then
583
- echo " Debug: $BENCH_DIR/{unix,rtk,diff}/"
584
- fi
585
- echo ""
586
-
587
- # Exit code non-zero si moins de 80% good
588
- if [ "$GOOD_PCT" -lt 80 ]; then
589
- echo " BENCHMARK FAILED: $GOOD_PCT% good (minimum 80%)"
590
- exit 1
591
- fi
592
- fi