@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,561 +0,0 @@
1
- #!/usr/bin/env bash
2
- #
3
- # RTK Smoke Test Suite
4
- # Exercises every command to catch regressions after merge.
5
- # Exit code: number of failures (0 = all green)
6
- #
7
- set -euo pipefail
8
-
9
- PASS=0
10
- FAIL=0
11
- SKIP=0
12
- FAILURES=()
13
-
14
- # Colors
15
- RED='\033[0;31m'
16
- GREEN='\033[0;32m'
17
- YELLOW='\033[0;33m'
18
- CYAN='\033[0;36m'
19
- BOLD='\033[1m'
20
- NC='\033[0m'
21
-
22
- # ── Helpers ──────────────────────────────────────────
23
-
24
- assert_ok() {
25
- local name="$1"
26
- shift
27
- local output
28
- if output=$("$@" 2>&1); then
29
- PASS=$((PASS + 1))
30
- printf " ${GREEN}PASS${NC} %s\n" "$name"
31
- else
32
- FAIL=$((FAIL + 1))
33
- FAILURES+=("$name")
34
- printf " ${RED}FAIL${NC} %s\n" "$name"
35
- printf " cmd: %s\n" "$*"
36
- printf " out: %s\n" "$(echo "$output" | head -3)"
37
- fi
38
- }
39
-
40
- assert_contains() {
41
- local name="$1"
42
- local needle="$2"
43
- shift 2
44
- local output
45
- if output=$("$@" 2>&1) && echo "$output" | grep -q "$needle"; then
46
- PASS=$((PASS + 1))
47
- printf " ${GREEN}PASS${NC} %s\n" "$name"
48
- else
49
- FAIL=$((FAIL + 1))
50
- FAILURES+=("$name")
51
- printf " ${RED}FAIL${NC} %s\n" "$name"
52
- printf " expected: '%s'\n" "$needle"
53
- printf " got: %s\n" "$(echo "$output" | head -3)"
54
- fi
55
- }
56
-
57
- assert_exit_ok() {
58
- local name="$1"
59
- shift
60
- if "$@" >/dev/null 2>&1; then
61
- PASS=$((PASS + 1))
62
- printf " ${GREEN}PASS${NC} %s\n" "$name"
63
- else
64
- FAIL=$((FAIL + 1))
65
- FAILURES+=("$name")
66
- printf " ${RED}FAIL${NC} %s\n" "$name"
67
- printf " cmd: %s\n" "$*"
68
- fi
69
- }
70
-
71
- assert_fails() {
72
- local name="$1"
73
- shift
74
- if "$@" >/dev/null 2>&1; then
75
- FAIL=$((FAIL + 1))
76
- FAILURES+=("$name (expected failure, got success)")
77
- printf " ${RED}FAIL${NC} %s (expected failure)\n" "$name"
78
- else
79
- PASS=$((PASS + 1))
80
- printf " ${GREEN}PASS${NC} %s\n" "$name"
81
- fi
82
- }
83
-
84
- assert_help() {
85
- local name="$1"
86
- shift
87
- assert_contains "$name --help" "Usage:" "$@" --help
88
- }
89
-
90
- skip_test() {
91
- local name="$1"
92
- local reason="$2"
93
- SKIP=$((SKIP + 1))
94
- printf " ${YELLOW}SKIP${NC} %s (%s)\n" "$name" "$reason"
95
- }
96
-
97
- section() {
98
- printf "\n${BOLD}${CYAN}── %s ──${NC}\n" "$1"
99
- }
100
-
101
- # ── Preamble ─────────────────────────────────────────
102
-
103
- RTK=$(command -v rtk || echo "")
104
- if [[ -z "$RTK" ]]; then
105
- echo "rtk not found in PATH. Run: cargo install --path ."
106
- exit 1
107
- fi
108
-
109
- printf "${BOLD}RTK Smoke Test Suite${NC}\n"
110
- printf "Binary: %s\n" "$RTK"
111
- printf "Version: %s\n" "$(rtk --version)"
112
- printf "Date: %s\n" "$(date '+%Y-%m-%d %H:%M')"
113
-
114
- # Need a git repo to test git commands
115
- if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
116
- echo "Must run from inside a git repository."
117
- exit 1
118
- fi
119
-
120
- REPO_ROOT=$(git rev-parse --show-toplevel)
121
-
122
- # ── 1. Version & Help ───────────────────────────────
123
-
124
- section "Version & Help"
125
-
126
- assert_contains "rtk --version" "rtk" rtk --version
127
- assert_contains "rtk --help" "Usage:" rtk --help
128
-
129
- # ── 2. Ls ────────────────────────────────────────────
130
-
131
- section "Ls"
132
-
133
- assert_ok "rtk ls ." rtk ls .
134
- assert_ok "rtk ls -la ." rtk ls -la .
135
- assert_ok "rtk ls -lh ." rtk ls -lh .
136
- assert_ok "rtk ls -l src/" rtk ls -l src/
137
- assert_ok "rtk ls src/ -l (flag after)" rtk ls src/ -l
138
- assert_ok "rtk ls multi paths" rtk ls src/ scripts/
139
- assert_contains "rtk ls -a shows hidden" ".git" rtk ls -a .
140
- assert_contains "rtk ls shows sizes" "K" rtk ls src/
141
- assert_contains "rtk ls shows dirs with /" "/" rtk ls .
142
-
143
- # ── 2b. Tree ─────────────────────────────────────────
144
-
145
- section "Tree"
146
-
147
- if command -v tree >/dev/null 2>&1; then
148
- assert_ok "rtk tree ." rtk tree .
149
- assert_ok "rtk tree -L 2 ." rtk tree -L 2 .
150
- assert_ok "rtk tree -d -L 1 ." rtk tree -d -L 1 .
151
- assert_contains "rtk tree shows src/" "src" rtk tree -L 1 .
152
- else
153
- skip_test "rtk tree" "tree not installed"
154
- fi
155
-
156
- # ── 3. Read ──────────────────────────────────────────
157
-
158
- section "Read"
159
-
160
- assert_ok "rtk read Cargo.toml" rtk read Cargo.toml
161
- assert_ok "rtk read --level none Cargo.toml" rtk read --level none Cargo.toml
162
- assert_ok "rtk read --level aggressive Cargo.toml" rtk read --level aggressive Cargo.toml
163
- assert_ok "rtk read -n Cargo.toml" rtk read -n Cargo.toml
164
- assert_ok "rtk read --max-lines 5 Cargo.toml" rtk read --max-lines 5 Cargo.toml
165
-
166
- section "Read (stdin support)"
167
-
168
- assert_ok "rtk read stdin pipe" bash -c 'echo "fn main() {}" | rtk read -'
169
-
170
- # ── 4. Git ───────────────────────────────────────────
171
-
172
- section "Git (existing)"
173
-
174
- assert_ok "rtk git status" rtk git status
175
- assert_ok "rtk git status --short" rtk git status --short
176
- assert_ok "rtk git status -s" rtk git status -s
177
- assert_ok "rtk git status --porcelain" rtk git status --porcelain
178
- assert_ok "rtk git log" rtk git log
179
- assert_ok "rtk git log -5" rtk git log -- -5
180
- assert_ok "rtk git diff" rtk git diff
181
- assert_ok "rtk git diff --stat" rtk git diff --stat
182
-
183
- section "Git (new: branch, fetch, stash, worktree)"
184
-
185
- assert_ok "rtk git branch" rtk git branch
186
- assert_ok "rtk git fetch" rtk git fetch
187
- assert_ok "rtk git stash list" rtk git stash list
188
- assert_ok "rtk git worktree" rtk git worktree
189
-
190
- section "Git (passthrough: unsupported subcommands)"
191
-
192
- assert_ok "rtk git tag --list" rtk git tag --list
193
- assert_ok "rtk git remote -v" rtk git remote -v
194
- assert_ok "rtk git rev-parse HEAD" rtk git rev-parse HEAD
195
-
196
- # ── 5. GitHub CLI ────────────────────────────────────
197
-
198
- section "GitHub CLI"
199
-
200
- if command -v gh >/dev/null 2>&1 && gh auth status >/dev/null 2>&1; then
201
- assert_ok "rtk gh pr list" rtk gh pr list
202
- assert_ok "rtk gh run list" rtk gh run list
203
- assert_ok "rtk gh issue list" rtk gh issue list
204
- # pr create/merge/diff/comment/edit are write ops, test help only
205
- assert_help "rtk gh" rtk gh
206
- else
207
- skip_test "gh commands" "gh not authenticated"
208
- fi
209
-
210
- # ── 6. Cargo ─────────────────────────────────────────
211
-
212
- section "Cargo (new)"
213
-
214
- assert_ok "rtk cargo build" rtk cargo build
215
- assert_ok "rtk cargo clippy" rtk cargo clippy
216
- # cargo test exits non-zero due to pre-existing failures; check output ignoring exit code
217
- output_cargo_test=$(rtk cargo test 2>&1 || true)
218
- if echo "$output_cargo_test" | grep -q "FAILURES\|test result:\|passed"; then
219
- PASS=$((PASS + 1))
220
- printf " ${GREEN}PASS${NC} %s\n" "rtk cargo test"
221
- else
222
- FAIL=$((FAIL + 1))
223
- FAILURES+=("rtk cargo test")
224
- printf " ${RED}FAIL${NC} %s\n" "rtk cargo test"
225
- printf " got: %s\n" "$(echo "$output_cargo_test" | head -3)"
226
- fi
227
- assert_help "rtk cargo" rtk cargo
228
-
229
- # ── 7. Curl ──────────────────────────────────────────
230
-
231
- section "Curl (new)"
232
-
233
- assert_contains "rtk curl JSON detect" "string" rtk curl https://httpbin.org/json
234
- assert_ok "rtk curl plain text" rtk curl https://httpbin.org/robots.txt
235
- assert_help "rtk curl" rtk curl
236
-
237
- # ── 8. Npm / Npx ────────────────────────────────────
238
-
239
- section "Npm / Npx (new)"
240
-
241
- assert_help "rtk npm" rtk npm
242
- assert_help "rtk npx" rtk npx
243
-
244
- # ── 9. Pnpm ─────────────────────────────────────────
245
-
246
- section "Pnpm"
247
-
248
- assert_help "rtk pnpm" rtk pnpm
249
- assert_help "rtk pnpm build" rtk pnpm build
250
- assert_help "rtk pnpm typecheck" rtk pnpm typecheck
251
-
252
- if command -v pnpm >/dev/null 2>&1; then
253
- assert_ok "rtk pnpm help" rtk pnpm help
254
- fi
255
-
256
- # ── 10. Grep ─────────────────────────────────────────
257
-
258
- section "Grep"
259
-
260
- assert_ok "rtk grep pattern" rtk grep "pub fn" src/
261
- assert_contains "rtk grep finds results" "pub fn" rtk grep "pub fn" src/
262
- assert_ok "rtk grep with file type" rtk grep "pub fn" src/ -t rust
263
-
264
- section "Grep (extra args passthrough)"
265
-
266
- assert_ok "rtk grep -i case insensitive" rtk grep "fn" src/ -i
267
- assert_ok "rtk grep -A context lines" rtk grep "fn run" src/ -A 2
268
-
269
- # ── 11. Find ─────────────────────────────────────────
270
-
271
- section "Find"
272
-
273
- assert_ok "rtk find *.rs" rtk find "*.rs" src/
274
- assert_contains "rtk find shows files" ".rs" rtk find "*.rs" src/
275
-
276
- # ── 12. Json ─────────────────────────────────────────
277
-
278
- section "Json"
279
-
280
- # Create temp JSON file for testing
281
- TMPJSON=$(mktemp /tmp/rtk-test-XXXXX.json)
282
- echo '{"name":"test","count":42,"items":[1,2,3]}' > "$TMPJSON"
283
-
284
- assert_ok "rtk json file" rtk json "$TMPJSON"
285
- assert_contains "rtk json shows schema" "string" rtk json "$TMPJSON"
286
-
287
- rm -f "$TMPJSON"
288
-
289
- # ── 13. Deps ─────────────────────────────────────────
290
-
291
- section "Deps"
292
-
293
- assert_ok "rtk deps ." rtk deps .
294
- assert_contains "rtk deps shows Cargo" "Cargo" rtk deps .
295
-
296
- # ── 14. Env ──────────────────────────────────────────
297
-
298
- section "Env"
299
-
300
- assert_ok "rtk env" rtk env
301
- assert_ok "rtk env --filter PATH" rtk env --filter PATH
302
-
303
- # ── 16. Log ──────────────────────────────────────────
304
-
305
- section "Log"
306
-
307
- TMPLOG=$(mktemp /tmp/rtk-log-XXXXX.log)
308
- for i in $(seq 1 20); do
309
- echo "[2025-01-01 12:00:00] INFO: repeated message" >> "$TMPLOG"
310
- done
311
- echo "[2025-01-01 12:00:01] ERROR: something failed" >> "$TMPLOG"
312
-
313
- assert_ok "rtk log file" rtk log "$TMPLOG"
314
-
315
- rm -f "$TMPLOG"
316
-
317
- # ── 17. Summary ──────────────────────────────────────
318
-
319
- section "Summary"
320
-
321
- assert_ok "rtk summary echo hello" rtk summary echo hello
322
-
323
- # ── 18. Err ──────────────────────────────────────────
324
-
325
- section "Err"
326
-
327
- assert_ok "rtk err echo ok" rtk err echo ok
328
-
329
- # ── 19. Test runner ──────────────────────────────────
330
-
331
- section "Test runner"
332
-
333
- assert_ok "rtk test echo ok" rtk test echo ok
334
-
335
- # ── 20. Gain ─────────────────────────────────────────
336
-
337
- section "Gain"
338
-
339
- assert_ok "rtk gain" rtk gain
340
- assert_ok "rtk gain --history" rtk gain --history
341
-
342
- # ── 21. Config & Init ────────────────────────────────
343
-
344
- section "Config & Init"
345
-
346
- assert_ok "rtk config" rtk config
347
- assert_ok "rtk init --show" rtk init --show
348
-
349
- # ── 22. Wget ─────────────────────────────────────────
350
-
351
- section "Wget"
352
-
353
- if command -v wget >/dev/null 2>&1; then
354
- assert_ok "rtk wget stdout" rtk wget https://httpbin.org/robots.txt -O
355
- else
356
- skip_test "rtk wget" "wget not installed"
357
- fi
358
-
359
- # ── 23. Tsc / Lint / Prettier / Next / Playwright ───
360
-
361
- section "JS Tooling (help only, no project context)"
362
-
363
- assert_help "rtk tsc" rtk tsc
364
- assert_help "rtk lint" rtk lint
365
- assert_help "rtk prettier" rtk prettier
366
- assert_help "rtk next" rtk next
367
- assert_help "rtk playwright" rtk playwright
368
-
369
- # ── 24. Prisma ───────────────────────────────────────
370
-
371
- section "Prisma (help only)"
372
-
373
- assert_help "rtk prisma" rtk prisma
374
-
375
- # ── 25. Vitest ───────────────────────────────────────
376
-
377
- section "Vitest (help only)"
378
-
379
- assert_help "rtk vitest" rtk vitest
380
-
381
- # ── 26. Docker / Kubectl (help only) ────────────────
382
-
383
- section "Docker / Kubectl (help only)"
384
-
385
- assert_help "rtk docker" rtk docker
386
- assert_help "rtk kubectl" rtk kubectl
387
-
388
- # ── 27. Python (conditional) ────────────────────────
389
-
390
- section "Python (conditional)"
391
-
392
- if command -v pytest &>/dev/null; then
393
- assert_help "rtk pytest" rtk pytest --help
394
- else
395
- skip_test "rtk pytest" "pytest not installed"
396
- fi
397
-
398
- if command -v ruff &>/dev/null; then
399
- assert_help "rtk ruff" rtk ruff --help
400
- else
401
- skip_test "rtk ruff" "ruff not installed"
402
- fi
403
-
404
- if command -v pip &>/dev/null; then
405
- assert_help "rtk pip" rtk pip --help
406
- else
407
- skip_test "rtk pip" "pip not installed"
408
- fi
409
-
410
- # ── 28. Go (conditional) ────────────────────────────
411
-
412
- section "Go (conditional)"
413
-
414
- if command -v go &>/dev/null; then
415
- assert_help "rtk go" rtk go --help
416
- assert_help "rtk go test" rtk go test -h
417
- assert_help "rtk go build" rtk go build -h
418
- assert_help "rtk go vet" rtk go vet -h
419
- else
420
- skip_test "rtk go" "go not installed"
421
- fi
422
-
423
- if command -v golangci-lint &>/dev/null; then
424
- assert_help "rtk golangci-lint" rtk golangci-lint --help
425
- else
426
- skip_test "rtk golangci-lint" "golangci-lint not installed"
427
- fi
428
-
429
- # ── 29. Graphite (conditional) ─────────────────────
430
-
431
- section "Graphite (conditional)"
432
-
433
- if command -v gt &>/dev/null; then
434
- assert_help "rtk gt" rtk gt --help
435
- assert_ok "rtk gt log short" rtk gt log short
436
- else
437
- skip "gt not installed"
438
- fi
439
-
440
- # ── 30. Global flags ────────────────────────────────
441
-
442
- section "Global flags"
443
-
444
- assert_ok "rtk -u ls ." rtk -u ls .
445
- assert_ok "rtk --skip-env npm --help" rtk --skip-env npm --help
446
-
447
- # ── 31. CcEconomics ─────────────────────────────────
448
-
449
- section "CcEconomics"
450
-
451
- assert_ok "rtk cc-economics" rtk cc-economics
452
-
453
- # ── 32. Learn ───────────────────────────────────────
454
-
455
- section "Learn"
456
-
457
- assert_ok "rtk learn --help" rtk learn --help
458
- assert_ok "rtk learn (no sessions)" rtk learn --since 0 2>&1 || true
459
-
460
- # ── 32. Rewrite ───────────────────────────────────────
461
-
462
- section "Rewrite"
463
-
464
- assert_contains "rewrite git status" "rtk git status" rtk rewrite "git status"
465
- assert_contains "rewrite cargo test" "rtk cargo test" rtk rewrite "cargo test"
466
- assert_contains "rewrite compound &&" "rtk git status" rtk rewrite "git status && cargo test"
467
- assert_contains "rewrite pipe preserves" "| head" rtk rewrite "git log | head"
468
-
469
- section "Rewrite (#345: RTK_DISABLED skip)"
470
-
471
- assert_fails "rewrite RTK_DISABLED=1 skip" rtk rewrite "RTK_DISABLED=1 git status"
472
- assert_fails "rewrite env RTK_DISABLED skip" rtk rewrite "FOO=1 RTK_DISABLED=1 cargo test"
473
-
474
- section "Rewrite (#346: 2>&1 preserved)"
475
-
476
- assert_contains "rewrite 2>&1 preserved" "2>&1" rtk rewrite "cargo test 2>&1 | head"
477
-
478
- section "Rewrite (#196: gh --json skip)"
479
-
480
- assert_fails "rewrite gh --json skip" rtk rewrite "gh pr list --json number"
481
- assert_fails "rewrite gh --jq skip" rtk rewrite "gh api /repos --jq .name"
482
- assert_fails "rewrite gh --template skip" rtk rewrite "gh pr view 1 --template '{{.title}}'"
483
- assert_contains "rewrite gh normal works" "rtk gh pr list" rtk rewrite "gh pr list"
484
-
485
- # ── 33. Verify ────────────────────────────────────────
486
-
487
- section "Verify"
488
-
489
- assert_ok "rtk verify" rtk verify
490
-
491
- # ── 34. Proxy ─────────────────────────────────────────
492
-
493
- section "Proxy"
494
-
495
- assert_ok "rtk proxy echo hello" rtk proxy echo hello
496
- assert_contains "rtk proxy passthrough" "hello" rtk proxy echo hello
497
-
498
- # ── 35. Discover ──────────────────────────────────────
499
-
500
- section "Discover"
501
-
502
- assert_ok "rtk discover" rtk discover
503
-
504
- # ── 36. Diff ──────────────────────────────────────────
505
-
506
- section "Diff"
507
-
508
- assert_ok "rtk diff two files" rtk diff Cargo.toml LICENSE
509
-
510
- # ── 37. Wc ────────────────────────────────────────────
511
-
512
- section "Wc"
513
-
514
- assert_ok "rtk wc Cargo.toml" rtk wc Cargo.toml
515
-
516
- # ── 38. Smart ─────────────────────────────────────────
517
-
518
- section "Smart"
519
-
520
- assert_ok "rtk smart src/main.rs" rtk smart src/main.rs
521
-
522
- # ── 39. Json edge cases ──────────────────────────────
523
-
524
- section "Json (edge cases)"
525
-
526
- assert_fails "rtk json on TOML (#347)" rtk json Cargo.toml
527
-
528
- # ── 40. Docker (conditional) ─────────────────────────
529
-
530
- section "Docker (conditional)"
531
-
532
- if command -v docker >/dev/null 2>&1 && docker info >/dev/null 2>&1; then
533
- assert_ok "rtk docker ps" rtk docker ps
534
- assert_ok "rtk docker images" rtk docker images
535
- else
536
- skip_test "rtk docker" "docker not running"
537
- fi
538
-
539
- # ── 41. Hook check ───────────────────────────────────
540
-
541
- section "Hook check (#344)"
542
-
543
- assert_contains "rtk init --show hook version" "version" rtk init --show
544
-
545
- # ══════════════════════════════════════════════════════
546
- # Report
547
- # ══════════════════════════════════════════════════════
548
-
549
- printf "\n${BOLD}══════════════════════════════════════${NC}\n"
550
- printf "${BOLD}Results: ${GREEN}%d passed${NC}, ${RED}%d failed${NC}, ${YELLOW}%d skipped${NC}\n" "$PASS" "$FAIL" "$SKIP"
551
-
552
- if [[ ${#FAILURES[@]} -gt 0 ]]; then
553
- printf "\n${RED}Failures:${NC}\n"
554
- for f in "${FAILURES[@]}"; do
555
- printf " - %s\n" "$f"
556
- done
557
- fi
558
-
559
- printf "${BOLD}══════════════════════════════════════${NC}\n"
560
-
561
- exit "$FAIL"