@hasna/terminal 2.0.5 → 2.3.0

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 (263) hide show
  1. package/dist/cli.js +52 -21
  2. package/package.json +1 -1
  3. package/src/ai.ts +77 -130
  4. package/src/cli.tsx +51 -21
  5. package/src/command-validator.ts +11 -0
  6. package/src/context-hints.ts +291 -0
  7. package/src/discover.ts +238 -0
  8. package/src/economy.ts +53 -0
  9. package/src/output-processor.ts +7 -18
  10. package/src/output-store.ts +65 -0
  11. package/src/providers/base.ts +3 -1
  12. package/src/providers/groq.ts +108 -0
  13. package/src/providers/index.ts +26 -2
  14. package/src/providers/providers.test.ts +4 -2
  15. package/src/providers/xai.ts +108 -0
  16. package/src/sessions-db.ts +81 -0
  17. package/temp/rtk/.claude/agents/code-reviewer.md +221 -0
  18. package/temp/rtk/.claude/agents/debugger.md +519 -0
  19. package/temp/rtk/.claude/agents/rtk-testing-specialist.md +461 -0
  20. package/temp/rtk/.claude/agents/rust-rtk.md +511 -0
  21. package/temp/rtk/.claude/agents/technical-writer.md +355 -0
  22. package/temp/rtk/.claude/commands/diagnose.md +352 -0
  23. package/temp/rtk/.claude/commands/test-routing.md +362 -0
  24. package/temp/rtk/.claude/hooks/bash/pre-commit-format.sh +16 -0
  25. package/temp/rtk/.claude/hooks/rtk-rewrite.sh +70 -0
  26. package/temp/rtk/.claude/hooks/rtk-suggest.sh +152 -0
  27. package/temp/rtk/.claude/rules/cli-testing.md +526 -0
  28. package/temp/rtk/.claude/skills/issue-triage/SKILL.md +348 -0
  29. package/temp/rtk/.claude/skills/issue-triage/templates/issue-comment.md +134 -0
  30. package/temp/rtk/.claude/skills/performance.md +435 -0
  31. package/temp/rtk/.claude/skills/pr-triage/SKILL.md +315 -0
  32. package/temp/rtk/.claude/skills/pr-triage/templates/review-comment.md +71 -0
  33. package/temp/rtk/.claude/skills/repo-recap.md +206 -0
  34. package/temp/rtk/.claude/skills/rtk-tdd/SKILL.md +78 -0
  35. package/temp/rtk/.claude/skills/rtk-tdd/references/testing-patterns.md +124 -0
  36. package/temp/rtk/.claude/skills/security-guardian.md +503 -0
  37. package/temp/rtk/.claude/skills/ship.md +404 -0
  38. package/temp/rtk/.github/workflows/benchmark.yml +34 -0
  39. package/temp/rtk/.github/workflows/dco-check.yaml +12 -0
  40. package/temp/rtk/.github/workflows/release-please.yml +51 -0
  41. package/temp/rtk/.github/workflows/release.yml +343 -0
  42. package/temp/rtk/.github/workflows/security-check.yml +135 -0
  43. package/temp/rtk/.github/workflows/validate-docs.yml +78 -0
  44. package/temp/rtk/.release-please-manifest.json +3 -0
  45. package/temp/rtk/ARCHITECTURE.md +1491 -0
  46. package/temp/rtk/CHANGELOG.md +640 -0
  47. package/temp/rtk/CLAUDE.md +605 -0
  48. package/temp/rtk/CONTRIBUTING.md +199 -0
  49. package/temp/rtk/Cargo.lock +1668 -0
  50. package/temp/rtk/Cargo.toml +64 -0
  51. package/temp/rtk/Formula/rtk.rb +43 -0
  52. package/temp/rtk/INSTALL.md +390 -0
  53. package/temp/rtk/LICENSE +21 -0
  54. package/temp/rtk/README.md +386 -0
  55. package/temp/rtk/README_es.md +159 -0
  56. package/temp/rtk/README_fr.md +197 -0
  57. package/temp/rtk/README_ja.md +159 -0
  58. package/temp/rtk/README_ko.md +159 -0
  59. package/temp/rtk/README_zh.md +167 -0
  60. package/temp/rtk/ROADMAP.md +15 -0
  61. package/temp/rtk/SECURITY.md +217 -0
  62. package/temp/rtk/TEST_EXEC_TIME.md +102 -0
  63. package/temp/rtk/build.rs +57 -0
  64. package/temp/rtk/docs/AUDIT_GUIDE.md +432 -0
  65. package/temp/rtk/docs/FEATURES.md +1410 -0
  66. package/temp/rtk/docs/TROUBLESHOOTING.md +309 -0
  67. package/temp/rtk/docs/filter-workflow.md +102 -0
  68. package/temp/rtk/docs/images/gain-dashboard.jpg +0 -0
  69. package/temp/rtk/docs/tracking.md +583 -0
  70. package/temp/rtk/hooks/opencode-rtk.ts +39 -0
  71. package/temp/rtk/hooks/rtk-awareness.md +29 -0
  72. package/temp/rtk/hooks/rtk-rewrite.sh +61 -0
  73. package/temp/rtk/hooks/test-rtk-rewrite.sh +442 -0
  74. package/temp/rtk/install.sh +124 -0
  75. package/temp/rtk/release-please-config.json +10 -0
  76. package/temp/rtk/scripts/benchmark.sh +592 -0
  77. package/temp/rtk/scripts/check-installation.sh +162 -0
  78. package/temp/rtk/scripts/install-local.sh +37 -0
  79. package/temp/rtk/scripts/rtk-economics.sh +137 -0
  80. package/temp/rtk/scripts/test-all.sh +561 -0
  81. package/temp/rtk/scripts/test-aristote.sh +227 -0
  82. package/temp/rtk/scripts/test-tracking.sh +79 -0
  83. package/temp/rtk/scripts/update-readme-metrics.sh +32 -0
  84. package/temp/rtk/scripts/validate-docs.sh +73 -0
  85. package/temp/rtk/src/aws_cmd.rs +880 -0
  86. package/temp/rtk/src/binlog.rs +1645 -0
  87. package/temp/rtk/src/cargo_cmd.rs +1727 -0
  88. package/temp/rtk/src/cc_economics.rs +1157 -0
  89. package/temp/rtk/src/ccusage.rs +340 -0
  90. package/temp/rtk/src/config.rs +187 -0
  91. package/temp/rtk/src/container.rs +855 -0
  92. package/temp/rtk/src/curl_cmd.rs +134 -0
  93. package/temp/rtk/src/deps.rs +268 -0
  94. package/temp/rtk/src/diff_cmd.rs +367 -0
  95. package/temp/rtk/src/discover/mod.rs +274 -0
  96. package/temp/rtk/src/discover/provider.rs +388 -0
  97. package/temp/rtk/src/discover/registry.rs +2022 -0
  98. package/temp/rtk/src/discover/report.rs +202 -0
  99. package/temp/rtk/src/discover/rules.rs +667 -0
  100. package/temp/rtk/src/display_helpers.rs +402 -0
  101. package/temp/rtk/src/dotnet_cmd.rs +1771 -0
  102. package/temp/rtk/src/dotnet_format_report.rs +133 -0
  103. package/temp/rtk/src/dotnet_trx.rs +593 -0
  104. package/temp/rtk/src/env_cmd.rs +204 -0
  105. package/temp/rtk/src/filter.rs +462 -0
  106. package/temp/rtk/src/filters/README.md +52 -0
  107. package/temp/rtk/src/filters/ansible-playbook.toml +34 -0
  108. package/temp/rtk/src/filters/basedpyright.toml +47 -0
  109. package/temp/rtk/src/filters/biome.toml +45 -0
  110. package/temp/rtk/src/filters/brew-install.toml +37 -0
  111. package/temp/rtk/src/filters/composer-install.toml +40 -0
  112. package/temp/rtk/src/filters/df.toml +16 -0
  113. package/temp/rtk/src/filters/dotnet-build.toml +64 -0
  114. package/temp/rtk/src/filters/du.toml +16 -0
  115. package/temp/rtk/src/filters/fail2ban-client.toml +15 -0
  116. package/temp/rtk/src/filters/gcc.toml +49 -0
  117. package/temp/rtk/src/filters/gcloud.toml +22 -0
  118. package/temp/rtk/src/filters/hadolint.toml +24 -0
  119. package/temp/rtk/src/filters/helm.toml +29 -0
  120. package/temp/rtk/src/filters/iptables.toml +27 -0
  121. package/temp/rtk/src/filters/jj.toml +28 -0
  122. package/temp/rtk/src/filters/jq.toml +24 -0
  123. package/temp/rtk/src/filters/make.toml +41 -0
  124. package/temp/rtk/src/filters/markdownlint.toml +24 -0
  125. package/temp/rtk/src/filters/mix-compile.toml +27 -0
  126. package/temp/rtk/src/filters/mix-format.toml +15 -0
  127. package/temp/rtk/src/filters/mvn-build.toml +44 -0
  128. package/temp/rtk/src/filters/oxlint.toml +43 -0
  129. package/temp/rtk/src/filters/ping.toml +63 -0
  130. package/temp/rtk/src/filters/pio-run.toml +40 -0
  131. package/temp/rtk/src/filters/poetry-install.toml +50 -0
  132. package/temp/rtk/src/filters/pre-commit.toml +35 -0
  133. package/temp/rtk/src/filters/ps.toml +16 -0
  134. package/temp/rtk/src/filters/quarto-render.toml +41 -0
  135. package/temp/rtk/src/filters/rsync.toml +48 -0
  136. package/temp/rtk/src/filters/shellcheck.toml +27 -0
  137. package/temp/rtk/src/filters/shopify-theme.toml +29 -0
  138. package/temp/rtk/src/filters/skopeo.toml +45 -0
  139. package/temp/rtk/src/filters/sops.toml +16 -0
  140. package/temp/rtk/src/filters/ssh.toml +44 -0
  141. package/temp/rtk/src/filters/stat.toml +34 -0
  142. package/temp/rtk/src/filters/swift-build.toml +41 -0
  143. package/temp/rtk/src/filters/systemctl-status.toml +33 -0
  144. package/temp/rtk/src/filters/terraform-plan.toml +35 -0
  145. package/temp/rtk/src/filters/tofu-fmt.toml +16 -0
  146. package/temp/rtk/src/filters/tofu-init.toml +38 -0
  147. package/temp/rtk/src/filters/tofu-plan.toml +35 -0
  148. package/temp/rtk/src/filters/tofu-validate.toml +17 -0
  149. package/temp/rtk/src/filters/trunk-build.toml +39 -0
  150. package/temp/rtk/src/filters/ty.toml +50 -0
  151. package/temp/rtk/src/filters/uv-sync.toml +37 -0
  152. package/temp/rtk/src/filters/xcodebuild.toml +99 -0
  153. package/temp/rtk/src/filters/yamllint.toml +25 -0
  154. package/temp/rtk/src/find_cmd.rs +598 -0
  155. package/temp/rtk/src/format_cmd.rs +386 -0
  156. package/temp/rtk/src/gain.rs +723 -0
  157. package/temp/rtk/src/gh_cmd.rs +1651 -0
  158. package/temp/rtk/src/git.rs +2012 -0
  159. package/temp/rtk/src/go_cmd.rs +592 -0
  160. package/temp/rtk/src/golangci_cmd.rs +254 -0
  161. package/temp/rtk/src/grep_cmd.rs +288 -0
  162. package/temp/rtk/src/gt_cmd.rs +810 -0
  163. package/temp/rtk/src/hook_audit_cmd.rs +283 -0
  164. package/temp/rtk/src/hook_check.rs +171 -0
  165. package/temp/rtk/src/init.rs +1859 -0
  166. package/temp/rtk/src/integrity.rs +537 -0
  167. package/temp/rtk/src/json_cmd.rs +231 -0
  168. package/temp/rtk/src/learn/detector.rs +628 -0
  169. package/temp/rtk/src/learn/mod.rs +119 -0
  170. package/temp/rtk/src/learn/report.rs +184 -0
  171. package/temp/rtk/src/lint_cmd.rs +694 -0
  172. package/temp/rtk/src/local_llm.rs +316 -0
  173. package/temp/rtk/src/log_cmd.rs +248 -0
  174. package/temp/rtk/src/ls.rs +324 -0
  175. package/temp/rtk/src/main.rs +2482 -0
  176. package/temp/rtk/src/mypy_cmd.rs +389 -0
  177. package/temp/rtk/src/next_cmd.rs +241 -0
  178. package/temp/rtk/src/npm_cmd.rs +236 -0
  179. package/temp/rtk/src/parser/README.md +267 -0
  180. package/temp/rtk/src/parser/error.rs +46 -0
  181. package/temp/rtk/src/parser/formatter.rs +336 -0
  182. package/temp/rtk/src/parser/mod.rs +311 -0
  183. package/temp/rtk/src/parser/types.rs +119 -0
  184. package/temp/rtk/src/pip_cmd.rs +302 -0
  185. package/temp/rtk/src/playwright_cmd.rs +479 -0
  186. package/temp/rtk/src/pnpm_cmd.rs +573 -0
  187. package/temp/rtk/src/prettier_cmd.rs +221 -0
  188. package/temp/rtk/src/prisma_cmd.rs +482 -0
  189. package/temp/rtk/src/psql_cmd.rs +382 -0
  190. package/temp/rtk/src/pytest_cmd.rs +384 -0
  191. package/temp/rtk/src/read.rs +217 -0
  192. package/temp/rtk/src/rewrite_cmd.rs +50 -0
  193. package/temp/rtk/src/ruff_cmd.rs +402 -0
  194. package/temp/rtk/src/runner.rs +271 -0
  195. package/temp/rtk/src/summary.rs +297 -0
  196. package/temp/rtk/src/tee.rs +405 -0
  197. package/temp/rtk/src/telemetry.rs +248 -0
  198. package/temp/rtk/src/toml_filter.rs +1655 -0
  199. package/temp/rtk/src/tracking.rs +1416 -0
  200. package/temp/rtk/src/tree.rs +209 -0
  201. package/temp/rtk/src/tsc_cmd.rs +259 -0
  202. package/temp/rtk/src/utils.rs +432 -0
  203. package/temp/rtk/src/verify_cmd.rs +47 -0
  204. package/temp/rtk/src/vitest_cmd.rs +385 -0
  205. package/temp/rtk/src/wc_cmd.rs +401 -0
  206. package/temp/rtk/src/wget_cmd.rs +260 -0
  207. package/temp/rtk/tests/fixtures/dotnet/build_failed.txt +11 -0
  208. package/temp/rtk/tests/fixtures/dotnet/format_changes.json +31 -0
  209. package/temp/rtk/tests/fixtures/dotnet/format_empty.json +1 -0
  210. package/temp/rtk/tests/fixtures/dotnet/format_success.json +12 -0
  211. package/temp/rtk/tests/fixtures/dotnet/test_failed.txt +18 -0
  212. package/dist/App.js +0 -404
  213. package/dist/Browse.js +0 -79
  214. package/dist/FuzzyPicker.js +0 -47
  215. package/dist/Onboarding.js +0 -51
  216. package/dist/Spinner.js +0 -12
  217. package/dist/StatusBar.js +0 -49
  218. package/dist/ai.js +0 -368
  219. package/dist/cache.js +0 -41
  220. package/dist/command-rewriter.js +0 -64
  221. package/dist/command-validator.js +0 -77
  222. package/dist/compression.js +0 -107
  223. package/dist/diff-cache.js +0 -107
  224. package/dist/economy.js +0 -79
  225. package/dist/expand-store.js +0 -38
  226. package/dist/file-cache.js +0 -72
  227. package/dist/file-index.js +0 -62
  228. package/dist/history.js +0 -62
  229. package/dist/lazy-executor.js +0 -54
  230. package/dist/line-dedup.js +0 -59
  231. package/dist/loop-detector.js +0 -75
  232. package/dist/mcp/install.js +0 -98
  233. package/dist/mcp/server.js +0 -569
  234. package/dist/noise-filter.js +0 -86
  235. package/dist/output-processor.js +0 -136
  236. package/dist/output-router.js +0 -41
  237. package/dist/parsers/base.js +0 -2
  238. package/dist/parsers/build.js +0 -64
  239. package/dist/parsers/errors.js +0 -101
  240. package/dist/parsers/files.js +0 -78
  241. package/dist/parsers/git.js +0 -99
  242. package/dist/parsers/index.js +0 -48
  243. package/dist/parsers/tests.js +0 -89
  244. package/dist/providers/anthropic.js +0 -39
  245. package/dist/providers/base.js +0 -4
  246. package/dist/providers/cerebras.js +0 -95
  247. package/dist/providers/index.js +0 -49
  248. package/dist/recipes/model.js +0 -20
  249. package/dist/recipes/storage.js +0 -136
  250. package/dist/search/content-search.js +0 -68
  251. package/dist/search/file-search.js +0 -61
  252. package/dist/search/filters.js +0 -34
  253. package/dist/search/index.js +0 -5
  254. package/dist/search/semantic.js +0 -320
  255. package/dist/session-boot.js +0 -59
  256. package/dist/session-context.js +0 -55
  257. package/dist/sessions-db.js +0 -120
  258. package/dist/smart-display.js +0 -286
  259. package/dist/snapshots.js +0 -51
  260. package/dist/supervisor.js +0 -112
  261. package/dist/test-watchlist.js +0 -131
  262. package/dist/tree.js +0 -94
  263. package/dist/usage-cache.js +0 -65
@@ -0,0 +1,404 @@
1
+ ---
2
+ description: Build, commit, push & version bump workflow - automates the complete release cycle
3
+ ---
4
+
5
+ # Ship Release
6
+
7
+ Systematic release workflow for RTK: build verification, version bump, changelog update, git tag, and push to trigger CI/CD.
8
+
9
+ ## When to Use
10
+
11
+ - **Manual invocation**: When ready to release a new version
12
+ - **After feature completion**: Before tagging and publishing
13
+ - **Before version bump**: To automate the release checklist
14
+
15
+ ## Pre-Release Checklist (Auto-Verified)
16
+
17
+ Before running `/ship`, verify:
18
+
19
+ ### 1. Quality Checks Pass
20
+ ```bash
21
+ cargo fmt --all --check # Code formatted
22
+ cargo clippy --all-targets # Zero warnings
23
+ cargo test --all # All tests pass
24
+ ```
25
+
26
+ ### 2. Performance Benchmarks Pass
27
+ ```bash
28
+ hyperfine 'target/release/rtk git status' --warmup 3
29
+ # Should show <10ms mean time
30
+
31
+ /usr/bin/time -l target/release/rtk git status
32
+ # Should show <5MB maximum resident set size
33
+ ```
34
+
35
+ ### 3. Integration Tests Pass
36
+ ```bash
37
+ cargo install --path . --force # Install locally
38
+ cargo test --ignored # Run integration tests
39
+ ```
40
+
41
+ ### 4. Git Clean State
42
+ ```bash
43
+ git status # Should show "nothing to commit, working tree clean"
44
+ ```
45
+
46
+ ## Release Workflow
47
+
48
+ ### Step 1: Determine Version Bump
49
+
50
+ **Semantic Versioning** (MAJOR.MINOR.PATCH):
51
+ - **MAJOR** (v1.0.0): Breaking changes (rare for RTK)
52
+ - **MINOR** (v0.X.0): New features, new filters, new commands
53
+ - **PATCH** (v0.0.X): Bug fixes, performance improvements
54
+
55
+ **Examples**:
56
+ - New filter added (`rtk pytest`) → **MINOR** bump (v0.16.0 → v0.17.0)
57
+ - Bug fix in `git log` filter → **PATCH** bump (v0.16.0 → v0.16.1)
58
+ - Breaking CLI arg change → **MAJOR** bump (v0.16.0 → v1.0.0)
59
+
60
+ ### Step 2: Update Version
61
+
62
+ **Files to update**:
63
+ 1. `Cargo.toml` (line 3): `version = "X.Y.Z"`
64
+ 2. `CHANGELOG.md` (add new section)
65
+ 3. `README.md` (if version mentioned)
66
+
67
+ **Example**:
68
+ ```toml
69
+ # Cargo.toml (before)
70
+ [package]
71
+ name = "rtk"
72
+ version = "0.16.0" # Current version
73
+
74
+ # Cargo.toml (after - MINOR bump)
75
+ [package]
76
+ name = "rtk"
77
+ version = "0.17.0" # New version
78
+ ```
79
+
80
+ **CHANGELOG.md template**:
81
+ ```markdown
82
+ ## [0.17.0] - 2026-02-15
83
+
84
+ ### Added
85
+ - `rtk pytest` command for Python test filtering (90% token reduction)
86
+ - Support for `pytest` JSON output parsing
87
+ - Integration with `uv` package manager auto-detection
88
+
89
+ ### Fixed
90
+ - Shell escaping for PowerShell on Windows
91
+ - Memory leak in regex pattern caching
92
+
93
+ ### Changed
94
+ - Updated `cargo test` filter to show test names in failures
95
+ ```
96
+
97
+ ### Step 3: Build and Verify
98
+
99
+ ```bash
100
+ # Clean build
101
+ cargo clean
102
+ cargo build --release
103
+
104
+ # Verify binary
105
+ target/release/rtk --version
106
+ # Should show new version
107
+
108
+ # Run full quality checks
109
+ cargo fmt --all --check
110
+ cargo clippy --all-targets
111
+ cargo test --all
112
+
113
+ # Benchmark performance
114
+ hyperfine 'target/release/rtk git status' --warmup 3
115
+ # Should still be <10ms
116
+ ```
117
+
118
+ ### Step 4: Commit Version Bump
119
+
120
+ ```bash
121
+ # Stage version files
122
+ git add Cargo.toml Cargo.lock CHANGELOG.md README.md
123
+
124
+ # Commit with version tag
125
+ git commit -m "chore(release): bump version to v0.17.0
126
+
127
+ - Updated Cargo.toml version
128
+ - Updated CHANGELOG.md with release notes
129
+ - Verified all quality checks pass
130
+ - Benchmarked performance (<10ms startup)
131
+
132
+ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
133
+ ```
134
+
135
+ ### Step 5: Create Git Tag
136
+
137
+ ```bash
138
+ # Create annotated tag with changelog excerpt
139
+ git tag -a v0.17.0 -m "Release v0.17.0
140
+
141
+ Added:
142
+ - rtk pytest command (90% token reduction)
143
+ - Support for uv package manager
144
+
145
+ Fixed:
146
+ - Shell escaping for PowerShell
147
+ - Memory leak in regex caching
148
+
149
+ Performance: <10ms startup, <5MB memory"
150
+ ```
151
+
152
+ ### Step 6: Push to Remote
153
+
154
+ ```bash
155
+ # Push commit and tags
156
+ git push origin main
157
+ git push origin v0.17.0
158
+
159
+ # Trigger GitHub Actions release workflow
160
+ # (CI/CD will build binaries, create GitHub release, publish to crates.io if configured)
161
+ ```
162
+
163
+ ## Post-Release Verification
164
+
165
+ After pushing, verify:
166
+
167
+ ### 1. GitHub Actions CI/CD Pass
168
+ ```bash
169
+ # Check GitHub Actions workflow status
170
+ gh run list --limit 1
171
+
172
+ # Watch latest run
173
+ gh run watch
174
+ ```
175
+
176
+ ### 2. GitHub Release Created
177
+ ```bash
178
+ # Check if release created
179
+ gh release view v0.17.0
180
+
181
+ # Should show:
182
+ # - Release notes from git tag
183
+ # - Binaries attached (macOS, Linux x86_64/ARM64, Windows)
184
+ # - Checksums for verification
185
+ ```
186
+
187
+ ### 3. Installation Verification
188
+ ```bash
189
+ # Test installation from release
190
+ curl -sSL https://github.com/rtk-ai/rtk/releases/download/v0.17.0/rtk-macos-latest -o rtk
191
+ chmod +x rtk
192
+ ./rtk --version
193
+ # Should show v0.17.0
194
+ ```
195
+
196
+ ## Rollback Plan
197
+
198
+ If release has critical issues:
199
+
200
+ ### Option 1: Patch Release (Preferred)
201
+ ```bash
202
+ # Fix issue in new branch
203
+ git checkout -b hotfix/v0.17.1
204
+ # Apply fix
205
+ cargo test --all
206
+ git commit -m "fix: critical issue in pytest filter"
207
+
208
+ # Release v0.17.1 (PATCH bump)
209
+ # Follow release workflow above
210
+ ```
211
+
212
+ ### Option 2: Yank Release (crates.io only)
213
+ ```bash
214
+ # Yank broken version from crates.io
215
+ cargo yank --vers 0.17.0
216
+
217
+ # Users can't download yanked version, but existing installs work
218
+ ```
219
+
220
+ ### Option 3: Revert Tag (Last Resort)
221
+ ```bash
222
+ # Delete tag locally
223
+ git tag -d v0.17.0
224
+
225
+ # Delete tag on remote
226
+ git push origin :refs/tags/v0.17.0
227
+
228
+ # Delete GitHub release
229
+ gh release delete v0.17.0 --yes
230
+
231
+ # Revert commit
232
+ git revert HEAD
233
+ git push origin main
234
+ ```
235
+
236
+ ## Automated Release Script (Optional)
237
+
238
+ Save as `scripts/ship.sh`:
239
+
240
+ ```bash
241
+ #!/bin/bash
242
+ set -euo pipefail
243
+
244
+ # Parse version argument
245
+ if [ $# -ne 1 ]; then
246
+ echo "Usage: $0 <version>"
247
+ echo "Example: $0 0.17.0"
248
+ exit 1
249
+ fi
250
+
251
+ NEW_VERSION=$1
252
+
253
+ echo "🚀 Starting release workflow for v$NEW_VERSION"
254
+
255
+ # 1. Quality checks
256
+ echo "📦 Running quality checks..."
257
+ cargo fmt --all --check
258
+ cargo clippy --all-targets
259
+ cargo test --all
260
+
261
+ # 2. Update version
262
+ echo "🔢 Updating version to $NEW_VERSION..."
263
+ sed -i '' "s/^version = .*/version = \"$NEW_VERSION\"/" Cargo.toml
264
+
265
+ # 3. Build
266
+ echo "🔨 Building release binary..."
267
+ cargo build --release
268
+
269
+ # 4. Verify version
270
+ echo "✅ Verifying version..."
271
+ target/release/rtk --version | grep "$NEW_VERSION"
272
+
273
+ # 5. Commit
274
+ echo "💾 Committing version bump..."
275
+ git add Cargo.toml Cargo.lock
276
+ git commit -m "chore(release): bump version to v$NEW_VERSION
277
+
278
+ Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>"
279
+
280
+ # 6. Tag
281
+ echo "🏷️ Creating git tag..."
282
+ git tag -a "v$NEW_VERSION" -m "Release v$NEW_VERSION"
283
+
284
+ # 7. Push
285
+ echo "🚢 Pushing to remote..."
286
+ git push origin main
287
+ git push origin "v$NEW_VERSION"
288
+
289
+ echo "✅ Release v$NEW_VERSION shipped!"
290
+ echo "Monitor CI/CD: gh run watch"
291
+ ```
292
+
293
+ **Usage**:
294
+ ```bash
295
+ chmod +x scripts/ship.sh
296
+ ./scripts/ship.sh 0.17.0
297
+ ```
298
+
299
+ ## Release Frequency
300
+
301
+ **Recommended cadence**:
302
+ - **PATCH releases**: As needed for critical bugs (24h turnaround)
303
+ - **MINOR releases**: Weekly or bi-weekly for new features
304
+ - **MAJOR releases**: Quarterly or when breaking changes necessary
305
+
306
+ ## Version History Reference
307
+
308
+ Check version history:
309
+ ```bash
310
+ git tag -l "v*" # List all version tags
311
+ git log --oneline --tags # Show commits with tags
312
+ ```
313
+
314
+ Example output:
315
+ ```
316
+ v0.17.0 (HEAD -> main, tag: v0.17.0, origin/main)
317
+ v0.16.0
318
+ v0.15.1
319
+ v0.15.0
320
+ ```
321
+
322
+ ## Common Issues
323
+
324
+ ### Issue: CI/CD Fails After Tag Push
325
+
326
+ **Symptom**: GitHub Actions workflow fails on release build
327
+
328
+ **Solution**:
329
+ ```bash
330
+ # Fix issue locally
331
+ git checkout main
332
+ # Apply fix
333
+ cargo test --all
334
+ git commit -m "fix: CI/CD build issue"
335
+ git push origin main
336
+
337
+ # Delete old tag
338
+ git tag -d v0.17.0
339
+ git push origin :refs/tags/v0.17.0
340
+
341
+ # Create new tag
342
+ git tag -a v0.17.0 -m "Release v0.17.0 (rebuild)"
343
+ git push origin v0.17.0
344
+ ```
345
+
346
+ ### Issue: Version Mismatch
347
+
348
+ **Symptom**: `rtk --version` shows old version after bump
349
+
350
+ **Solution**:
351
+ ```bash
352
+ # Cargo.lock might be out of sync
353
+ cargo update -p rtk
354
+ cargo build --release
355
+
356
+ # Verify
357
+ target/release/rtk --version
358
+ ```
359
+
360
+ ### Issue: Changelog Merge Conflict
361
+
362
+ **Symptom**: CHANGELOG.md has conflicts after rebase
363
+
364
+ **Solution**:
365
+ ```bash
366
+ # Always add new entries at top
367
+ # Manual merge:
368
+ # 1. Keep all entries from both branches
369
+ # 2. Sort by version (newest first)
370
+ # 3. Ensure date format consistency
371
+ ```
372
+
373
+ ## Security Considerations
374
+
375
+ **Before releasing**:
376
+ - [ ] No secrets in code (API keys, tokens)
377
+ - [ ] No `.env` files committed
378
+ - [ ] Dependencies scanned (`cargo audit`)
379
+ - [ ] Shell injection vulnerabilities reviewed
380
+ - [ ] Cross-platform shell escaping tested
381
+
382
+ **Dependency audit**:
383
+ ```bash
384
+ cargo install cargo-audit
385
+ cargo audit
386
+
387
+ # Example output:
388
+ # Crate: some-crate
389
+ # Version: 0.1.0
390
+ # Warning: vulnerability found
391
+ # Advisory: CVE-2024-XXXXX
392
+ ```
393
+
394
+ If vulnerabilities found:
395
+ ```bash
396
+ # Update vulnerable dependency
397
+ cargo update some-crate
398
+
399
+ # Verify fix
400
+ cargo audit
401
+
402
+ # Re-run quality checks
403
+ cargo test --all
404
+ ```
@@ -0,0 +1,34 @@
1
+ name: Benchmark Token Savings
2
+
3
+ on:
4
+ push:
5
+ branches: [master, main]
6
+ pull_request:
7
+
8
+ jobs:
9
+ benchmark:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+
14
+ - name: Install Rust
15
+ uses: dtolnay/rust-toolchain@stable
16
+
17
+ - name: Build rtk
18
+ run: cargo build --release
19
+
20
+ - name: Install Python tools
21
+ run: |
22
+ pip install ruff pytest
23
+
24
+ - name: Install Go
25
+ uses: actions/setup-go@v5
26
+ with:
27
+ go-version: 'stable'
28
+
29
+ - name: Install Go tools
30
+ run: |
31
+ go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
32
+
33
+ - name: Run benchmark
34
+ run: ./scripts/benchmark.sh
@@ -0,0 +1,12 @@
1
+ name: DCO Check
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ pull_request:
6
+ branches:
7
+ - develop
8
+ jobs:
9
+ check:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: KineticCafe/actions-dco@v1
@@ -0,0 +1,51 @@
1
+ name: Release Please
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+
8
+ permissions:
9
+ contents: write
10
+ pull-requests: write
11
+
12
+ jobs:
13
+ release-please:
14
+ runs-on: ubuntu-latest
15
+ outputs:
16
+ release_created: ${{ steps.release.outputs.release_created }}
17
+ tag_name: ${{ steps.release.outputs.tag_name }}
18
+ steps:
19
+ - uses: googleapis/release-please-action@v4
20
+ id: release
21
+ with:
22
+ release-type: rust
23
+ package-name: rtk
24
+
25
+ build-release:
26
+ name: Build and upload release assets
27
+ needs: release-please
28
+ if: ${{ needs.release-please.outputs.release_created == 'true' }}
29
+ uses: ./.github/workflows/release.yml
30
+ with:
31
+ tag: ${{ needs.release-please.outputs.tag_name }}
32
+ permissions:
33
+ contents: write
34
+ secrets: inherit
35
+
36
+ update-latest-tag:
37
+ name: Update 'latest' tag
38
+ needs: [release-please, build-release]
39
+ if: ${{ needs.release-please.outputs.release_created == 'true' }}
40
+ runs-on: ubuntu-latest
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+ with:
44
+ fetch-depth: 0
45
+
46
+ - name: Update latest tag
47
+ run: |
48
+ git config user.name "github-actions[bot]"
49
+ git config user.email "github-actions[bot]@users.noreply.github.com"
50
+ git tag -fa latest -m "Latest stable release (${{ needs.release-please.outputs.tag_name }})"
51
+ git push origin latest --force