@hasna/terminal 2.3.0 → 2.3.2

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 (267) hide show
  1. package/dist/App.js +404 -0
  2. package/dist/Browse.js +79 -0
  3. package/dist/FuzzyPicker.js +47 -0
  4. package/dist/Onboarding.js +51 -0
  5. package/dist/Spinner.js +12 -0
  6. package/dist/StatusBar.js +49 -0
  7. package/dist/ai.js +322 -0
  8. package/dist/cache.js +41 -0
  9. package/dist/cli.js +64 -16
  10. package/dist/command-rewriter.js +64 -0
  11. package/dist/command-validator.js +86 -0
  12. package/dist/compression.js +107 -0
  13. package/dist/context-hints.js +275 -0
  14. package/dist/diff-cache.js +107 -0
  15. package/dist/discover.js +212 -0
  16. package/dist/economy.js +123 -0
  17. package/dist/expand-store.js +38 -0
  18. package/dist/file-cache.js +72 -0
  19. package/dist/file-index.js +62 -0
  20. package/dist/history.js +62 -0
  21. package/dist/lazy-executor.js +54 -0
  22. package/dist/line-dedup.js +59 -0
  23. package/dist/loop-detector.js +75 -0
  24. package/dist/mcp/install.js +98 -0
  25. package/dist/mcp/server.js +569 -0
  26. package/dist/noise-filter.js +86 -0
  27. package/dist/output-processor.js +129 -0
  28. package/dist/output-router.js +41 -0
  29. package/dist/output-store.js +111 -0
  30. package/dist/parsers/base.js +2 -0
  31. package/dist/parsers/build.js +64 -0
  32. package/dist/parsers/errors.js +101 -0
  33. package/dist/parsers/files.js +78 -0
  34. package/dist/parsers/git.js +99 -0
  35. package/dist/parsers/index.js +48 -0
  36. package/dist/parsers/tests.js +89 -0
  37. package/dist/providers/anthropic.js +39 -0
  38. package/dist/providers/base.js +4 -0
  39. package/dist/providers/cerebras.js +95 -0
  40. package/dist/providers/groq.js +95 -0
  41. package/dist/providers/index.js +73 -0
  42. package/dist/providers/xai.js +95 -0
  43. package/dist/recipes/model.js +20 -0
  44. package/dist/recipes/storage.js +136 -0
  45. package/dist/search/content-search.js +68 -0
  46. package/dist/search/file-search.js +61 -0
  47. package/dist/search/filters.js +34 -0
  48. package/dist/search/index.js +5 -0
  49. package/dist/search/semantic.js +320 -0
  50. package/dist/session-boot.js +59 -0
  51. package/dist/session-context.js +55 -0
  52. package/dist/sessions-db.js +173 -0
  53. package/dist/smart-display.js +286 -0
  54. package/dist/snapshots.js +51 -0
  55. package/dist/supervisor.js +112 -0
  56. package/dist/test-watchlist.js +131 -0
  57. package/dist/tool-profiles.js +122 -0
  58. package/dist/tree.js +94 -0
  59. package/dist/usage-cache.js +65 -0
  60. package/package.json +8 -1
  61. package/src/ai.ts +8 -0
  62. package/src/cli.tsx +57 -18
  63. package/src/output-processor.ts +6 -1
  64. package/src/output-store.ts +58 -12
  65. package/src/tool-profiles.ts +139 -0
  66. package/.claude/scheduled_tasks.lock +0 -1
  67. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -20
  68. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -14
  69. package/CONTRIBUTING.md +0 -80
  70. package/benchmarks/benchmark.mjs +0 -115
  71. package/imported_modules.txt +0 -0
  72. package/temp/rtk/.claude/agents/code-reviewer.md +0 -221
  73. package/temp/rtk/.claude/agents/debugger.md +0 -519
  74. package/temp/rtk/.claude/agents/rtk-testing-specialist.md +0 -461
  75. package/temp/rtk/.claude/agents/rust-rtk.md +0 -511
  76. package/temp/rtk/.claude/agents/technical-writer.md +0 -355
  77. package/temp/rtk/.claude/commands/diagnose.md +0 -352
  78. package/temp/rtk/.claude/commands/test-routing.md +0 -362
  79. package/temp/rtk/.claude/hooks/bash/pre-commit-format.sh +0 -16
  80. package/temp/rtk/.claude/hooks/rtk-rewrite.sh +0 -70
  81. package/temp/rtk/.claude/hooks/rtk-suggest.sh +0 -152
  82. package/temp/rtk/.claude/rules/cli-testing.md +0 -526
  83. package/temp/rtk/.claude/skills/issue-triage/SKILL.md +0 -348
  84. package/temp/rtk/.claude/skills/issue-triage/templates/issue-comment.md +0 -134
  85. package/temp/rtk/.claude/skills/performance.md +0 -435
  86. package/temp/rtk/.claude/skills/pr-triage/SKILL.md +0 -315
  87. package/temp/rtk/.claude/skills/pr-triage/templates/review-comment.md +0 -71
  88. package/temp/rtk/.claude/skills/repo-recap.md +0 -206
  89. package/temp/rtk/.claude/skills/rtk-tdd/SKILL.md +0 -78
  90. package/temp/rtk/.claude/skills/rtk-tdd/references/testing-patterns.md +0 -124
  91. package/temp/rtk/.claude/skills/security-guardian.md +0 -503
  92. package/temp/rtk/.claude/skills/ship.md +0 -404
  93. package/temp/rtk/.github/workflows/benchmark.yml +0 -34
  94. package/temp/rtk/.github/workflows/dco-check.yaml +0 -12
  95. package/temp/rtk/.github/workflows/release-please.yml +0 -51
  96. package/temp/rtk/.github/workflows/release.yml +0 -343
  97. package/temp/rtk/.github/workflows/security-check.yml +0 -135
  98. package/temp/rtk/.github/workflows/validate-docs.yml +0 -78
  99. package/temp/rtk/.release-please-manifest.json +0 -3
  100. package/temp/rtk/ARCHITECTURE.md +0 -1491
  101. package/temp/rtk/CHANGELOG.md +0 -640
  102. package/temp/rtk/CLAUDE.md +0 -605
  103. package/temp/rtk/CONTRIBUTING.md +0 -199
  104. package/temp/rtk/Cargo.lock +0 -1668
  105. package/temp/rtk/Cargo.toml +0 -64
  106. package/temp/rtk/Formula/rtk.rb +0 -43
  107. package/temp/rtk/INSTALL.md +0 -390
  108. package/temp/rtk/LICENSE +0 -21
  109. package/temp/rtk/README.md +0 -386
  110. package/temp/rtk/README_es.md +0 -159
  111. package/temp/rtk/README_fr.md +0 -197
  112. package/temp/rtk/README_ja.md +0 -159
  113. package/temp/rtk/README_ko.md +0 -159
  114. package/temp/rtk/README_zh.md +0 -167
  115. package/temp/rtk/ROADMAP.md +0 -15
  116. package/temp/rtk/SECURITY.md +0 -217
  117. package/temp/rtk/TEST_EXEC_TIME.md +0 -102
  118. package/temp/rtk/build.rs +0 -57
  119. package/temp/rtk/docs/AUDIT_GUIDE.md +0 -432
  120. package/temp/rtk/docs/FEATURES.md +0 -1410
  121. package/temp/rtk/docs/TROUBLESHOOTING.md +0 -309
  122. package/temp/rtk/docs/filter-workflow.md +0 -102
  123. package/temp/rtk/docs/images/gain-dashboard.jpg +0 -0
  124. package/temp/rtk/docs/tracking.md +0 -583
  125. package/temp/rtk/hooks/opencode-rtk.ts +0 -39
  126. package/temp/rtk/hooks/rtk-awareness.md +0 -29
  127. package/temp/rtk/hooks/rtk-rewrite.sh +0 -61
  128. package/temp/rtk/hooks/test-rtk-rewrite.sh +0 -442
  129. package/temp/rtk/install.sh +0 -124
  130. package/temp/rtk/release-please-config.json +0 -10
  131. package/temp/rtk/scripts/benchmark.sh +0 -592
  132. package/temp/rtk/scripts/check-installation.sh +0 -162
  133. package/temp/rtk/scripts/install-local.sh +0 -37
  134. package/temp/rtk/scripts/rtk-economics.sh +0 -137
  135. package/temp/rtk/scripts/test-all.sh +0 -561
  136. package/temp/rtk/scripts/test-aristote.sh +0 -227
  137. package/temp/rtk/scripts/test-tracking.sh +0 -79
  138. package/temp/rtk/scripts/update-readme-metrics.sh +0 -32
  139. package/temp/rtk/scripts/validate-docs.sh +0 -73
  140. package/temp/rtk/src/aws_cmd.rs +0 -880
  141. package/temp/rtk/src/binlog.rs +0 -1645
  142. package/temp/rtk/src/cargo_cmd.rs +0 -1727
  143. package/temp/rtk/src/cc_economics.rs +0 -1157
  144. package/temp/rtk/src/ccusage.rs +0 -340
  145. package/temp/rtk/src/config.rs +0 -187
  146. package/temp/rtk/src/container.rs +0 -855
  147. package/temp/rtk/src/curl_cmd.rs +0 -134
  148. package/temp/rtk/src/deps.rs +0 -268
  149. package/temp/rtk/src/diff_cmd.rs +0 -367
  150. package/temp/rtk/src/discover/mod.rs +0 -274
  151. package/temp/rtk/src/discover/provider.rs +0 -388
  152. package/temp/rtk/src/discover/registry.rs +0 -2022
  153. package/temp/rtk/src/discover/report.rs +0 -202
  154. package/temp/rtk/src/discover/rules.rs +0 -667
  155. package/temp/rtk/src/display_helpers.rs +0 -402
  156. package/temp/rtk/src/dotnet_cmd.rs +0 -1771
  157. package/temp/rtk/src/dotnet_format_report.rs +0 -133
  158. package/temp/rtk/src/dotnet_trx.rs +0 -593
  159. package/temp/rtk/src/env_cmd.rs +0 -204
  160. package/temp/rtk/src/filter.rs +0 -462
  161. package/temp/rtk/src/filters/README.md +0 -52
  162. package/temp/rtk/src/filters/ansible-playbook.toml +0 -34
  163. package/temp/rtk/src/filters/basedpyright.toml +0 -47
  164. package/temp/rtk/src/filters/biome.toml +0 -45
  165. package/temp/rtk/src/filters/brew-install.toml +0 -37
  166. package/temp/rtk/src/filters/composer-install.toml +0 -40
  167. package/temp/rtk/src/filters/df.toml +0 -16
  168. package/temp/rtk/src/filters/dotnet-build.toml +0 -64
  169. package/temp/rtk/src/filters/du.toml +0 -16
  170. package/temp/rtk/src/filters/fail2ban-client.toml +0 -15
  171. package/temp/rtk/src/filters/gcc.toml +0 -49
  172. package/temp/rtk/src/filters/gcloud.toml +0 -22
  173. package/temp/rtk/src/filters/hadolint.toml +0 -24
  174. package/temp/rtk/src/filters/helm.toml +0 -29
  175. package/temp/rtk/src/filters/iptables.toml +0 -27
  176. package/temp/rtk/src/filters/jj.toml +0 -28
  177. package/temp/rtk/src/filters/jq.toml +0 -24
  178. package/temp/rtk/src/filters/make.toml +0 -41
  179. package/temp/rtk/src/filters/markdownlint.toml +0 -24
  180. package/temp/rtk/src/filters/mix-compile.toml +0 -27
  181. package/temp/rtk/src/filters/mix-format.toml +0 -15
  182. package/temp/rtk/src/filters/mvn-build.toml +0 -44
  183. package/temp/rtk/src/filters/oxlint.toml +0 -43
  184. package/temp/rtk/src/filters/ping.toml +0 -63
  185. package/temp/rtk/src/filters/pio-run.toml +0 -40
  186. package/temp/rtk/src/filters/poetry-install.toml +0 -50
  187. package/temp/rtk/src/filters/pre-commit.toml +0 -35
  188. package/temp/rtk/src/filters/ps.toml +0 -16
  189. package/temp/rtk/src/filters/quarto-render.toml +0 -41
  190. package/temp/rtk/src/filters/rsync.toml +0 -48
  191. package/temp/rtk/src/filters/shellcheck.toml +0 -27
  192. package/temp/rtk/src/filters/shopify-theme.toml +0 -29
  193. package/temp/rtk/src/filters/skopeo.toml +0 -45
  194. package/temp/rtk/src/filters/sops.toml +0 -16
  195. package/temp/rtk/src/filters/ssh.toml +0 -44
  196. package/temp/rtk/src/filters/stat.toml +0 -34
  197. package/temp/rtk/src/filters/swift-build.toml +0 -41
  198. package/temp/rtk/src/filters/systemctl-status.toml +0 -33
  199. package/temp/rtk/src/filters/terraform-plan.toml +0 -35
  200. package/temp/rtk/src/filters/tofu-fmt.toml +0 -16
  201. package/temp/rtk/src/filters/tofu-init.toml +0 -38
  202. package/temp/rtk/src/filters/tofu-plan.toml +0 -35
  203. package/temp/rtk/src/filters/tofu-validate.toml +0 -17
  204. package/temp/rtk/src/filters/trunk-build.toml +0 -39
  205. package/temp/rtk/src/filters/ty.toml +0 -50
  206. package/temp/rtk/src/filters/uv-sync.toml +0 -37
  207. package/temp/rtk/src/filters/xcodebuild.toml +0 -99
  208. package/temp/rtk/src/filters/yamllint.toml +0 -25
  209. package/temp/rtk/src/find_cmd.rs +0 -598
  210. package/temp/rtk/src/format_cmd.rs +0 -386
  211. package/temp/rtk/src/gain.rs +0 -723
  212. package/temp/rtk/src/gh_cmd.rs +0 -1651
  213. package/temp/rtk/src/git.rs +0 -2012
  214. package/temp/rtk/src/go_cmd.rs +0 -592
  215. package/temp/rtk/src/golangci_cmd.rs +0 -254
  216. package/temp/rtk/src/grep_cmd.rs +0 -288
  217. package/temp/rtk/src/gt_cmd.rs +0 -810
  218. package/temp/rtk/src/hook_audit_cmd.rs +0 -283
  219. package/temp/rtk/src/hook_check.rs +0 -171
  220. package/temp/rtk/src/init.rs +0 -1859
  221. package/temp/rtk/src/integrity.rs +0 -537
  222. package/temp/rtk/src/json_cmd.rs +0 -231
  223. package/temp/rtk/src/learn/detector.rs +0 -628
  224. package/temp/rtk/src/learn/mod.rs +0 -119
  225. package/temp/rtk/src/learn/report.rs +0 -184
  226. package/temp/rtk/src/lint_cmd.rs +0 -694
  227. package/temp/rtk/src/local_llm.rs +0 -316
  228. package/temp/rtk/src/log_cmd.rs +0 -248
  229. package/temp/rtk/src/ls.rs +0 -324
  230. package/temp/rtk/src/main.rs +0 -2482
  231. package/temp/rtk/src/mypy_cmd.rs +0 -389
  232. package/temp/rtk/src/next_cmd.rs +0 -241
  233. package/temp/rtk/src/npm_cmd.rs +0 -236
  234. package/temp/rtk/src/parser/README.md +0 -267
  235. package/temp/rtk/src/parser/error.rs +0 -46
  236. package/temp/rtk/src/parser/formatter.rs +0 -336
  237. package/temp/rtk/src/parser/mod.rs +0 -311
  238. package/temp/rtk/src/parser/types.rs +0 -119
  239. package/temp/rtk/src/pip_cmd.rs +0 -302
  240. package/temp/rtk/src/playwright_cmd.rs +0 -479
  241. package/temp/rtk/src/pnpm_cmd.rs +0 -573
  242. package/temp/rtk/src/prettier_cmd.rs +0 -221
  243. package/temp/rtk/src/prisma_cmd.rs +0 -482
  244. package/temp/rtk/src/psql_cmd.rs +0 -382
  245. package/temp/rtk/src/pytest_cmd.rs +0 -384
  246. package/temp/rtk/src/read.rs +0 -217
  247. package/temp/rtk/src/rewrite_cmd.rs +0 -50
  248. package/temp/rtk/src/ruff_cmd.rs +0 -402
  249. package/temp/rtk/src/runner.rs +0 -271
  250. package/temp/rtk/src/summary.rs +0 -297
  251. package/temp/rtk/src/tee.rs +0 -405
  252. package/temp/rtk/src/telemetry.rs +0 -248
  253. package/temp/rtk/src/toml_filter.rs +0 -1655
  254. package/temp/rtk/src/tracking.rs +0 -1416
  255. package/temp/rtk/src/tree.rs +0 -209
  256. package/temp/rtk/src/tsc_cmd.rs +0 -259
  257. package/temp/rtk/src/utils.rs +0 -432
  258. package/temp/rtk/src/verify_cmd.rs +0 -47
  259. package/temp/rtk/src/vitest_cmd.rs +0 -385
  260. package/temp/rtk/src/wc_cmd.rs +0 -401
  261. package/temp/rtk/src/wget_cmd.rs +0 -260
  262. package/temp/rtk/tests/fixtures/dotnet/build_failed.txt +0 -11
  263. package/temp/rtk/tests/fixtures/dotnet/format_changes.json +0 -31
  264. package/temp/rtk/tests/fixtures/dotnet/format_empty.json +0 -1
  265. package/temp/rtk/tests/fixtures/dotnet/format_success.json +0 -12
  266. package/temp/rtk/tests/fixtures/dotnet/test_failed.txt +0 -18
  267. package/tsconfig.json +0 -15
@@ -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