@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.
- package/dist/cli.js +52 -21
- package/package.json +1 -1
- package/src/ai.ts +77 -130
- package/src/cli.tsx +51 -21
- package/src/command-validator.ts +11 -0
- package/src/context-hints.ts +291 -0
- package/src/discover.ts +238 -0
- package/src/economy.ts +53 -0
- package/src/output-processor.ts +7 -18
- package/src/output-store.ts +65 -0
- package/src/providers/base.ts +3 -1
- package/src/providers/groq.ts +108 -0
- package/src/providers/index.ts +26 -2
- package/src/providers/providers.test.ts +4 -2
- package/src/providers/xai.ts +108 -0
- package/src/sessions-db.ts +81 -0
- package/temp/rtk/.claude/agents/code-reviewer.md +221 -0
- package/temp/rtk/.claude/agents/debugger.md +519 -0
- package/temp/rtk/.claude/agents/rtk-testing-specialist.md +461 -0
- package/temp/rtk/.claude/agents/rust-rtk.md +511 -0
- package/temp/rtk/.claude/agents/technical-writer.md +355 -0
- package/temp/rtk/.claude/commands/diagnose.md +352 -0
- package/temp/rtk/.claude/commands/test-routing.md +362 -0
- package/temp/rtk/.claude/hooks/bash/pre-commit-format.sh +16 -0
- package/temp/rtk/.claude/hooks/rtk-rewrite.sh +70 -0
- package/temp/rtk/.claude/hooks/rtk-suggest.sh +152 -0
- package/temp/rtk/.claude/rules/cli-testing.md +526 -0
- package/temp/rtk/.claude/skills/issue-triage/SKILL.md +348 -0
- package/temp/rtk/.claude/skills/issue-triage/templates/issue-comment.md +134 -0
- package/temp/rtk/.claude/skills/performance.md +435 -0
- package/temp/rtk/.claude/skills/pr-triage/SKILL.md +315 -0
- package/temp/rtk/.claude/skills/pr-triage/templates/review-comment.md +71 -0
- package/temp/rtk/.claude/skills/repo-recap.md +206 -0
- package/temp/rtk/.claude/skills/rtk-tdd/SKILL.md +78 -0
- package/temp/rtk/.claude/skills/rtk-tdd/references/testing-patterns.md +124 -0
- package/temp/rtk/.claude/skills/security-guardian.md +503 -0
- package/temp/rtk/.claude/skills/ship.md +404 -0
- package/temp/rtk/.github/workflows/benchmark.yml +34 -0
- package/temp/rtk/.github/workflows/dco-check.yaml +12 -0
- package/temp/rtk/.github/workflows/release-please.yml +51 -0
- package/temp/rtk/.github/workflows/release.yml +343 -0
- package/temp/rtk/.github/workflows/security-check.yml +135 -0
- package/temp/rtk/.github/workflows/validate-docs.yml +78 -0
- package/temp/rtk/.release-please-manifest.json +3 -0
- package/temp/rtk/ARCHITECTURE.md +1491 -0
- package/temp/rtk/CHANGELOG.md +640 -0
- package/temp/rtk/CLAUDE.md +605 -0
- package/temp/rtk/CONTRIBUTING.md +199 -0
- package/temp/rtk/Cargo.lock +1668 -0
- package/temp/rtk/Cargo.toml +64 -0
- package/temp/rtk/Formula/rtk.rb +43 -0
- package/temp/rtk/INSTALL.md +390 -0
- package/temp/rtk/LICENSE +21 -0
- package/temp/rtk/README.md +386 -0
- package/temp/rtk/README_es.md +159 -0
- package/temp/rtk/README_fr.md +197 -0
- package/temp/rtk/README_ja.md +159 -0
- package/temp/rtk/README_ko.md +159 -0
- package/temp/rtk/README_zh.md +167 -0
- package/temp/rtk/ROADMAP.md +15 -0
- package/temp/rtk/SECURITY.md +217 -0
- package/temp/rtk/TEST_EXEC_TIME.md +102 -0
- package/temp/rtk/build.rs +57 -0
- package/temp/rtk/docs/AUDIT_GUIDE.md +432 -0
- package/temp/rtk/docs/FEATURES.md +1410 -0
- package/temp/rtk/docs/TROUBLESHOOTING.md +309 -0
- package/temp/rtk/docs/filter-workflow.md +102 -0
- package/temp/rtk/docs/images/gain-dashboard.jpg +0 -0
- package/temp/rtk/docs/tracking.md +583 -0
- package/temp/rtk/hooks/opencode-rtk.ts +39 -0
- package/temp/rtk/hooks/rtk-awareness.md +29 -0
- package/temp/rtk/hooks/rtk-rewrite.sh +61 -0
- package/temp/rtk/hooks/test-rtk-rewrite.sh +442 -0
- package/temp/rtk/install.sh +124 -0
- package/temp/rtk/release-please-config.json +10 -0
- package/temp/rtk/scripts/benchmark.sh +592 -0
- package/temp/rtk/scripts/check-installation.sh +162 -0
- package/temp/rtk/scripts/install-local.sh +37 -0
- package/temp/rtk/scripts/rtk-economics.sh +137 -0
- package/temp/rtk/scripts/test-all.sh +561 -0
- package/temp/rtk/scripts/test-aristote.sh +227 -0
- package/temp/rtk/scripts/test-tracking.sh +79 -0
- package/temp/rtk/scripts/update-readme-metrics.sh +32 -0
- package/temp/rtk/scripts/validate-docs.sh +73 -0
- package/temp/rtk/src/aws_cmd.rs +880 -0
- package/temp/rtk/src/binlog.rs +1645 -0
- package/temp/rtk/src/cargo_cmd.rs +1727 -0
- package/temp/rtk/src/cc_economics.rs +1157 -0
- package/temp/rtk/src/ccusage.rs +340 -0
- package/temp/rtk/src/config.rs +187 -0
- package/temp/rtk/src/container.rs +855 -0
- package/temp/rtk/src/curl_cmd.rs +134 -0
- package/temp/rtk/src/deps.rs +268 -0
- package/temp/rtk/src/diff_cmd.rs +367 -0
- package/temp/rtk/src/discover/mod.rs +274 -0
- package/temp/rtk/src/discover/provider.rs +388 -0
- package/temp/rtk/src/discover/registry.rs +2022 -0
- package/temp/rtk/src/discover/report.rs +202 -0
- package/temp/rtk/src/discover/rules.rs +667 -0
- package/temp/rtk/src/display_helpers.rs +402 -0
- package/temp/rtk/src/dotnet_cmd.rs +1771 -0
- package/temp/rtk/src/dotnet_format_report.rs +133 -0
- package/temp/rtk/src/dotnet_trx.rs +593 -0
- package/temp/rtk/src/env_cmd.rs +204 -0
- package/temp/rtk/src/filter.rs +462 -0
- package/temp/rtk/src/filters/README.md +52 -0
- package/temp/rtk/src/filters/ansible-playbook.toml +34 -0
- package/temp/rtk/src/filters/basedpyright.toml +47 -0
- package/temp/rtk/src/filters/biome.toml +45 -0
- package/temp/rtk/src/filters/brew-install.toml +37 -0
- package/temp/rtk/src/filters/composer-install.toml +40 -0
- package/temp/rtk/src/filters/df.toml +16 -0
- package/temp/rtk/src/filters/dotnet-build.toml +64 -0
- package/temp/rtk/src/filters/du.toml +16 -0
- package/temp/rtk/src/filters/fail2ban-client.toml +15 -0
- package/temp/rtk/src/filters/gcc.toml +49 -0
- package/temp/rtk/src/filters/gcloud.toml +22 -0
- package/temp/rtk/src/filters/hadolint.toml +24 -0
- package/temp/rtk/src/filters/helm.toml +29 -0
- package/temp/rtk/src/filters/iptables.toml +27 -0
- package/temp/rtk/src/filters/jj.toml +28 -0
- package/temp/rtk/src/filters/jq.toml +24 -0
- package/temp/rtk/src/filters/make.toml +41 -0
- package/temp/rtk/src/filters/markdownlint.toml +24 -0
- package/temp/rtk/src/filters/mix-compile.toml +27 -0
- package/temp/rtk/src/filters/mix-format.toml +15 -0
- package/temp/rtk/src/filters/mvn-build.toml +44 -0
- package/temp/rtk/src/filters/oxlint.toml +43 -0
- package/temp/rtk/src/filters/ping.toml +63 -0
- package/temp/rtk/src/filters/pio-run.toml +40 -0
- package/temp/rtk/src/filters/poetry-install.toml +50 -0
- package/temp/rtk/src/filters/pre-commit.toml +35 -0
- package/temp/rtk/src/filters/ps.toml +16 -0
- package/temp/rtk/src/filters/quarto-render.toml +41 -0
- package/temp/rtk/src/filters/rsync.toml +48 -0
- package/temp/rtk/src/filters/shellcheck.toml +27 -0
- package/temp/rtk/src/filters/shopify-theme.toml +29 -0
- package/temp/rtk/src/filters/skopeo.toml +45 -0
- package/temp/rtk/src/filters/sops.toml +16 -0
- package/temp/rtk/src/filters/ssh.toml +44 -0
- package/temp/rtk/src/filters/stat.toml +34 -0
- package/temp/rtk/src/filters/swift-build.toml +41 -0
- package/temp/rtk/src/filters/systemctl-status.toml +33 -0
- package/temp/rtk/src/filters/terraform-plan.toml +35 -0
- package/temp/rtk/src/filters/tofu-fmt.toml +16 -0
- package/temp/rtk/src/filters/tofu-init.toml +38 -0
- package/temp/rtk/src/filters/tofu-plan.toml +35 -0
- package/temp/rtk/src/filters/tofu-validate.toml +17 -0
- package/temp/rtk/src/filters/trunk-build.toml +39 -0
- package/temp/rtk/src/filters/ty.toml +50 -0
- package/temp/rtk/src/filters/uv-sync.toml +37 -0
- package/temp/rtk/src/filters/xcodebuild.toml +99 -0
- package/temp/rtk/src/filters/yamllint.toml +25 -0
- package/temp/rtk/src/find_cmd.rs +598 -0
- package/temp/rtk/src/format_cmd.rs +386 -0
- package/temp/rtk/src/gain.rs +723 -0
- package/temp/rtk/src/gh_cmd.rs +1651 -0
- package/temp/rtk/src/git.rs +2012 -0
- package/temp/rtk/src/go_cmd.rs +592 -0
- package/temp/rtk/src/golangci_cmd.rs +254 -0
- package/temp/rtk/src/grep_cmd.rs +288 -0
- package/temp/rtk/src/gt_cmd.rs +810 -0
- package/temp/rtk/src/hook_audit_cmd.rs +283 -0
- package/temp/rtk/src/hook_check.rs +171 -0
- package/temp/rtk/src/init.rs +1859 -0
- package/temp/rtk/src/integrity.rs +537 -0
- package/temp/rtk/src/json_cmd.rs +231 -0
- package/temp/rtk/src/learn/detector.rs +628 -0
- package/temp/rtk/src/learn/mod.rs +119 -0
- package/temp/rtk/src/learn/report.rs +184 -0
- package/temp/rtk/src/lint_cmd.rs +694 -0
- package/temp/rtk/src/local_llm.rs +316 -0
- package/temp/rtk/src/log_cmd.rs +248 -0
- package/temp/rtk/src/ls.rs +324 -0
- package/temp/rtk/src/main.rs +2482 -0
- package/temp/rtk/src/mypy_cmd.rs +389 -0
- package/temp/rtk/src/next_cmd.rs +241 -0
- package/temp/rtk/src/npm_cmd.rs +236 -0
- package/temp/rtk/src/parser/README.md +267 -0
- package/temp/rtk/src/parser/error.rs +46 -0
- package/temp/rtk/src/parser/formatter.rs +336 -0
- package/temp/rtk/src/parser/mod.rs +311 -0
- package/temp/rtk/src/parser/types.rs +119 -0
- package/temp/rtk/src/pip_cmd.rs +302 -0
- package/temp/rtk/src/playwright_cmd.rs +479 -0
- package/temp/rtk/src/pnpm_cmd.rs +573 -0
- package/temp/rtk/src/prettier_cmd.rs +221 -0
- package/temp/rtk/src/prisma_cmd.rs +482 -0
- package/temp/rtk/src/psql_cmd.rs +382 -0
- package/temp/rtk/src/pytest_cmd.rs +384 -0
- package/temp/rtk/src/read.rs +217 -0
- package/temp/rtk/src/rewrite_cmd.rs +50 -0
- package/temp/rtk/src/ruff_cmd.rs +402 -0
- package/temp/rtk/src/runner.rs +271 -0
- package/temp/rtk/src/summary.rs +297 -0
- package/temp/rtk/src/tee.rs +405 -0
- package/temp/rtk/src/telemetry.rs +248 -0
- package/temp/rtk/src/toml_filter.rs +1655 -0
- package/temp/rtk/src/tracking.rs +1416 -0
- package/temp/rtk/src/tree.rs +209 -0
- package/temp/rtk/src/tsc_cmd.rs +259 -0
- package/temp/rtk/src/utils.rs +432 -0
- package/temp/rtk/src/verify_cmd.rs +47 -0
- package/temp/rtk/src/vitest_cmd.rs +385 -0
- package/temp/rtk/src/wc_cmd.rs +401 -0
- package/temp/rtk/src/wget_cmd.rs +260 -0
- package/temp/rtk/tests/fixtures/dotnet/build_failed.txt +11 -0
- package/temp/rtk/tests/fixtures/dotnet/format_changes.json +31 -0
- package/temp/rtk/tests/fixtures/dotnet/format_empty.json +1 -0
- package/temp/rtk/tests/fixtures/dotnet/format_success.json +12 -0
- package/temp/rtk/tests/fixtures/dotnet/test_failed.txt +18 -0
- package/dist/App.js +0 -404
- package/dist/Browse.js +0 -79
- package/dist/FuzzyPicker.js +0 -47
- package/dist/Onboarding.js +0 -51
- package/dist/Spinner.js +0 -12
- package/dist/StatusBar.js +0 -49
- package/dist/ai.js +0 -368
- package/dist/cache.js +0 -41
- package/dist/command-rewriter.js +0 -64
- package/dist/command-validator.js +0 -77
- package/dist/compression.js +0 -107
- package/dist/diff-cache.js +0 -107
- package/dist/economy.js +0 -79
- package/dist/expand-store.js +0 -38
- package/dist/file-cache.js +0 -72
- package/dist/file-index.js +0 -62
- package/dist/history.js +0 -62
- package/dist/lazy-executor.js +0 -54
- package/dist/line-dedup.js +0 -59
- package/dist/loop-detector.js +0 -75
- package/dist/mcp/install.js +0 -98
- package/dist/mcp/server.js +0 -569
- package/dist/noise-filter.js +0 -86
- package/dist/output-processor.js +0 -136
- package/dist/output-router.js +0 -41
- package/dist/parsers/base.js +0 -2
- package/dist/parsers/build.js +0 -64
- package/dist/parsers/errors.js +0 -101
- package/dist/parsers/files.js +0 -78
- package/dist/parsers/git.js +0 -99
- package/dist/parsers/index.js +0 -48
- package/dist/parsers/tests.js +0 -89
- package/dist/providers/anthropic.js +0 -39
- package/dist/providers/base.js +0 -4
- package/dist/providers/cerebras.js +0 -95
- package/dist/providers/index.js +0 -49
- package/dist/recipes/model.js +0 -20
- package/dist/recipes/storage.js +0 -136
- package/dist/search/content-search.js +0 -68
- package/dist/search/file-search.js +0 -61
- package/dist/search/filters.js +0 -34
- package/dist/search/index.js +0 -5
- package/dist/search/semantic.js +0 -320
- package/dist/session-boot.js +0 -59
- package/dist/session-context.js +0 -55
- package/dist/sessions-db.js +0 -120
- package/dist/smart-display.js +0 -286
- package/dist/snapshots.js +0 -51
- package/dist/supervisor.js +0 -112
- package/dist/test-watchlist.js +0 -131
- package/dist/tree.js +0 -94
- package/dist/usage-cache.js +0 -65
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
inputs:
|
|
6
|
+
tag:
|
|
7
|
+
description: 'Tag to release'
|
|
8
|
+
required: true
|
|
9
|
+
type: string
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
inputs:
|
|
12
|
+
tag:
|
|
13
|
+
description: 'Tag to release (e.g., v0.1.0)'
|
|
14
|
+
required: true
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
contents: write
|
|
18
|
+
|
|
19
|
+
env:
|
|
20
|
+
CARGO_TERM_COLOR: always
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
build:
|
|
24
|
+
name: Build ${{ matrix.target }}
|
|
25
|
+
runs-on: ${{ matrix.os }}
|
|
26
|
+
strategy:
|
|
27
|
+
fail-fast: false
|
|
28
|
+
matrix:
|
|
29
|
+
include:
|
|
30
|
+
# macOS
|
|
31
|
+
- target: x86_64-apple-darwin
|
|
32
|
+
os: macos-latest
|
|
33
|
+
archive: tar.gz
|
|
34
|
+
- target: aarch64-apple-darwin
|
|
35
|
+
os: macos-latest
|
|
36
|
+
archive: tar.gz
|
|
37
|
+
# Linux
|
|
38
|
+
- target: x86_64-unknown-linux-musl
|
|
39
|
+
os: ubuntu-latest
|
|
40
|
+
archive: tar.gz
|
|
41
|
+
musl: true
|
|
42
|
+
- target: aarch64-unknown-linux-gnu
|
|
43
|
+
os: ubuntu-latest
|
|
44
|
+
archive: tar.gz
|
|
45
|
+
cross: true
|
|
46
|
+
# Windows
|
|
47
|
+
- target: x86_64-pc-windows-msvc
|
|
48
|
+
os: windows-latest
|
|
49
|
+
archive: zip
|
|
50
|
+
|
|
51
|
+
steps:
|
|
52
|
+
- name: Checkout
|
|
53
|
+
uses: actions/checkout@v4
|
|
54
|
+
|
|
55
|
+
- name: Install Rust
|
|
56
|
+
uses: dtolnay/rust-toolchain@stable
|
|
57
|
+
with:
|
|
58
|
+
targets: ${{ matrix.target }}
|
|
59
|
+
|
|
60
|
+
- name: Install cross-compilation tools
|
|
61
|
+
if: matrix.cross
|
|
62
|
+
run: |
|
|
63
|
+
sudo apt-get update
|
|
64
|
+
sudo apt-get install -y gcc-aarch64-linux-gnu
|
|
65
|
+
echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
|
|
66
|
+
|
|
67
|
+
- name: Install musl tools
|
|
68
|
+
if: matrix.musl
|
|
69
|
+
run: |
|
|
70
|
+
sudo apt-get update
|
|
71
|
+
sudo apt-get install -y musl-tools
|
|
72
|
+
|
|
73
|
+
- name: Build
|
|
74
|
+
run: cargo build --release --target ${{ matrix.target }}
|
|
75
|
+
env:
|
|
76
|
+
RTK_TELEMETRY_URL: ${{ vars.RTK_TELEMETRY_URL }}
|
|
77
|
+
RTK_TELEMETRY_TOKEN: ${{ secrets.RTK_TELEMETRY_TOKEN }}
|
|
78
|
+
|
|
79
|
+
- name: Package (Unix)
|
|
80
|
+
if: matrix.os != 'windows-latest'
|
|
81
|
+
run: |
|
|
82
|
+
cd target/${{ matrix.target }}/release
|
|
83
|
+
tar -czvf ../../../rtk-${{ matrix.target }}.${{ matrix.archive }} rtk
|
|
84
|
+
cd ../../..
|
|
85
|
+
|
|
86
|
+
- name: Package (Windows)
|
|
87
|
+
if: matrix.os == 'windows-latest'
|
|
88
|
+
run: |
|
|
89
|
+
cd target/${{ matrix.target }}/release
|
|
90
|
+
7z a ../../../rtk-${{ matrix.target }}.${{ matrix.archive }} rtk.exe
|
|
91
|
+
cd ../../..
|
|
92
|
+
|
|
93
|
+
- name: Upload artifact
|
|
94
|
+
uses: actions/upload-artifact@v4
|
|
95
|
+
with:
|
|
96
|
+
name: rtk-${{ matrix.target }}
|
|
97
|
+
path: rtk-${{ matrix.target }}.${{ matrix.archive }}
|
|
98
|
+
|
|
99
|
+
build-deb:
|
|
100
|
+
name: Build DEB package
|
|
101
|
+
runs-on: ubuntu-latest
|
|
102
|
+
steps:
|
|
103
|
+
- name: Checkout
|
|
104
|
+
uses: actions/checkout@v4
|
|
105
|
+
|
|
106
|
+
- name: Install Rust
|
|
107
|
+
uses: dtolnay/rust-toolchain@stable
|
|
108
|
+
|
|
109
|
+
- name: Install cargo-deb
|
|
110
|
+
run: cargo install cargo-deb
|
|
111
|
+
|
|
112
|
+
- name: Build DEB
|
|
113
|
+
run: cargo deb
|
|
114
|
+
env:
|
|
115
|
+
RTK_TELEMETRY_URL: ${{ vars.RTK_TELEMETRY_URL }}
|
|
116
|
+
RTK_TELEMETRY_TOKEN: ${{ secrets.RTK_TELEMETRY_TOKEN }}
|
|
117
|
+
|
|
118
|
+
- name: Upload DEB
|
|
119
|
+
uses: actions/upload-artifact@v4
|
|
120
|
+
with:
|
|
121
|
+
name: rtk-deb
|
|
122
|
+
path: target/debian/*.deb
|
|
123
|
+
|
|
124
|
+
build-rpm:
|
|
125
|
+
name: Build RPM package
|
|
126
|
+
runs-on: ubuntu-latest
|
|
127
|
+
container: fedora:latest
|
|
128
|
+
steps:
|
|
129
|
+
- name: Checkout
|
|
130
|
+
uses: actions/checkout@v4
|
|
131
|
+
|
|
132
|
+
- name: Install dependencies
|
|
133
|
+
run: |
|
|
134
|
+
dnf install -y rust cargo rpm-build
|
|
135
|
+
|
|
136
|
+
- name: Install cargo-generate-rpm
|
|
137
|
+
run: cargo install cargo-generate-rpm
|
|
138
|
+
|
|
139
|
+
- name: Build release
|
|
140
|
+
run: cargo build --release
|
|
141
|
+
env:
|
|
142
|
+
RTK_TELEMETRY_URL: ${{ vars.RTK_TELEMETRY_URL }}
|
|
143
|
+
RTK_TELEMETRY_TOKEN: ${{ secrets.RTK_TELEMETRY_TOKEN }}
|
|
144
|
+
|
|
145
|
+
- name: Generate RPM
|
|
146
|
+
run: cargo generate-rpm
|
|
147
|
+
|
|
148
|
+
- name: Upload RPM
|
|
149
|
+
uses: actions/upload-artifact@v4
|
|
150
|
+
with:
|
|
151
|
+
name: rtk-rpm
|
|
152
|
+
path: target/generate-rpm/*.rpm
|
|
153
|
+
|
|
154
|
+
release:
|
|
155
|
+
name: Create Release
|
|
156
|
+
needs: [build, build-deb, build-rpm]
|
|
157
|
+
runs-on: ubuntu-latest
|
|
158
|
+
steps:
|
|
159
|
+
- name: Checkout
|
|
160
|
+
uses: actions/checkout@v4
|
|
161
|
+
|
|
162
|
+
- name: Download all artifacts
|
|
163
|
+
uses: actions/download-artifact@v4
|
|
164
|
+
with:
|
|
165
|
+
path: artifacts
|
|
166
|
+
|
|
167
|
+
- name: Get version
|
|
168
|
+
id: version
|
|
169
|
+
run: |
|
|
170
|
+
TAG="${{ inputs.tag }}"
|
|
171
|
+
if [ -z "$TAG" ]; then
|
|
172
|
+
TAG="${{ github.event.release.tag_name }}"
|
|
173
|
+
fi
|
|
174
|
+
echo "version=$TAG" >> $GITHUB_OUTPUT
|
|
175
|
+
|
|
176
|
+
- name: Flatten artifacts
|
|
177
|
+
run: |
|
|
178
|
+
mkdir -p release
|
|
179
|
+
find artifacts -type f \( -name "*.tar.gz" -o -name "*.zip" -o -name "*.deb" -o -name "*.rpm" \) -exec cp {} release/ \;
|
|
180
|
+
|
|
181
|
+
- name: Create version-agnostic package names
|
|
182
|
+
run: |
|
|
183
|
+
cd release
|
|
184
|
+
for f in *.deb; do
|
|
185
|
+
[ -f "$f" ] && cp "$f" "rtk_amd64.deb"
|
|
186
|
+
done
|
|
187
|
+
for f in *.rpm; do
|
|
188
|
+
[ -f "$f" ] && cp "$f" "rtk.x86_64.rpm"
|
|
189
|
+
done
|
|
190
|
+
|
|
191
|
+
- name: Create checksums
|
|
192
|
+
run: |
|
|
193
|
+
cd release
|
|
194
|
+
sha256sum * > checksums.txt
|
|
195
|
+
|
|
196
|
+
- name: Upload Release Assets
|
|
197
|
+
uses: softprops/action-gh-release@v2
|
|
198
|
+
with:
|
|
199
|
+
tag_name: ${{ steps.version.outputs.version }}
|
|
200
|
+
files: release/*
|
|
201
|
+
env:
|
|
202
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
203
|
+
|
|
204
|
+
notify-discord:
|
|
205
|
+
name: Notify Discord
|
|
206
|
+
needs: [release]
|
|
207
|
+
runs-on: ubuntu-latest
|
|
208
|
+
steps:
|
|
209
|
+
- name: Get version
|
|
210
|
+
id: version
|
|
211
|
+
run: |
|
|
212
|
+
TAG="${{ inputs.tag }}"
|
|
213
|
+
if [ -z "$TAG" ]; then
|
|
214
|
+
TAG="${{ github.event.release.tag_name }}"
|
|
215
|
+
fi
|
|
216
|
+
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
|
217
|
+
|
|
218
|
+
- name: Send Discord notification
|
|
219
|
+
env:
|
|
220
|
+
DISCORD_WEBHOOK: ${{ secrets.RTK_DISCORD_RELEASE }}
|
|
221
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
222
|
+
run: |
|
|
223
|
+
TAG="${{ steps.version.outputs.tag }}"
|
|
224
|
+
RELEASE_URL="https://github.com/rtk-ai/rtk/releases/tag/${TAG}"
|
|
225
|
+
|
|
226
|
+
# Fetch release notes from GitHub API
|
|
227
|
+
NOTES=$(gh api "repos/rtk-ai/rtk/releases/tags/${TAG}" --jq '.body' 2>/dev/null | head -c 1800 || echo "")
|
|
228
|
+
DESC=$(echo "${NOTES:-No release notes}" | jq -Rs .)
|
|
229
|
+
|
|
230
|
+
jq -n \
|
|
231
|
+
--arg title "RTK ${TAG} released" \
|
|
232
|
+
--arg url "$RELEASE_URL" \
|
|
233
|
+
--argjson desc "$DESC" \
|
|
234
|
+
'{embeds: [{title: $title, url: $url, description: $desc, color: 5814783, footer: {text: "Rust Token Killer"}}]}' \
|
|
235
|
+
| curl -sf -H "Content-Type: application/json" -d @- "$DISCORD_WEBHOOK"
|
|
236
|
+
|
|
237
|
+
homebrew:
|
|
238
|
+
name: Update Homebrew formula
|
|
239
|
+
needs: [release]
|
|
240
|
+
runs-on: ubuntu-latest
|
|
241
|
+
steps:
|
|
242
|
+
- name: Get version
|
|
243
|
+
id: version
|
|
244
|
+
run: |
|
|
245
|
+
TAG="${{ inputs.tag }}"
|
|
246
|
+
if [ -z "$TAG" ]; then
|
|
247
|
+
TAG="${{ github.event.release.tag_name }}"
|
|
248
|
+
fi
|
|
249
|
+
VERSION="${TAG#v}"
|
|
250
|
+
echo "tag=$TAG" >> $GITHUB_OUTPUT
|
|
251
|
+
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
252
|
+
|
|
253
|
+
- name: Download checksums
|
|
254
|
+
run: |
|
|
255
|
+
gh release download "${{ steps.version.outputs.tag }}" \
|
|
256
|
+
--repo rtk-ai/rtk \
|
|
257
|
+
--pattern checksums.txt
|
|
258
|
+
env:
|
|
259
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
260
|
+
|
|
261
|
+
- name: Parse checksums
|
|
262
|
+
id: sha
|
|
263
|
+
run: |
|
|
264
|
+
echo "mac_arm=$(grep aarch64-apple-darwin.tar.gz checksums.txt | head -1 | awk '{print $1}')" >> $GITHUB_OUTPUT
|
|
265
|
+
echo "mac_intel=$(grep x86_64-apple-darwin.tar.gz checksums.txt | head -1 | awk '{print $1}')" >> $GITHUB_OUTPUT
|
|
266
|
+
echo "linux_arm=$(grep aarch64-unknown-linux-gnu.tar.gz checksums.txt | head -1 | awk '{print $1}')" >> $GITHUB_OUTPUT
|
|
267
|
+
echo "linux_intel=$(grep x86_64-unknown-linux-musl.tar.gz checksums.txt | head -1 | awk '{print $1}')" >> $GITHUB_OUTPUT
|
|
268
|
+
|
|
269
|
+
- name: Generate formula
|
|
270
|
+
run: |
|
|
271
|
+
cat > rtk.rb << 'FORMULA'
|
|
272
|
+
class Rtk < Formula
|
|
273
|
+
desc "Rust Token Killer - High-performance CLI proxy to minimize LLM token consumption"
|
|
274
|
+
homepage "https://www.rtk-ai.app"
|
|
275
|
+
version "VERSION_PLACEHOLDER"
|
|
276
|
+
license "MIT"
|
|
277
|
+
|
|
278
|
+
if OS.mac? && Hardware::CPU.arm?
|
|
279
|
+
url "https://github.com/rtk-ai/rtk/releases/download/TAG_PLACEHOLDER/rtk-aarch64-apple-darwin.tar.gz"
|
|
280
|
+
sha256 "SHA_MAC_ARM_PLACEHOLDER"
|
|
281
|
+
elsif OS.mac? && Hardware::CPU.intel?
|
|
282
|
+
url "https://github.com/rtk-ai/rtk/releases/download/TAG_PLACEHOLDER/rtk-x86_64-apple-darwin.tar.gz"
|
|
283
|
+
sha256 "SHA_MAC_INTEL_PLACEHOLDER"
|
|
284
|
+
elsif OS.linux? && Hardware::CPU.arm?
|
|
285
|
+
url "https://github.com/rtk-ai/rtk/releases/download/TAG_PLACEHOLDER/rtk-aarch64-unknown-linux-gnu.tar.gz"
|
|
286
|
+
sha256 "SHA_LINUX_ARM_PLACEHOLDER"
|
|
287
|
+
elsif OS.linux? && Hardware::CPU.intel?
|
|
288
|
+
url "https://github.com/rtk-ai/rtk/releases/download/TAG_PLACEHOLDER/rtk-x86_64-unknown-linux-musl.tar.gz"
|
|
289
|
+
sha256 "SHA_LINUX_INTEL_PLACEHOLDER"
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
def install
|
|
293
|
+
bin.install "rtk"
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
def caveats
|
|
297
|
+
<<~EOS
|
|
298
|
+
rtk is installed! Get started:
|
|
299
|
+
|
|
300
|
+
# Initialize for Claude Code
|
|
301
|
+
rtk init -g # Global hook-first setup (recommended)
|
|
302
|
+
rtk init # Add to ./CLAUDE.md (this project only)
|
|
303
|
+
|
|
304
|
+
# See all commands
|
|
305
|
+
rtk --help
|
|
306
|
+
|
|
307
|
+
# Measure your token savings
|
|
308
|
+
rtk gain
|
|
309
|
+
|
|
310
|
+
Full documentation: https://www.rtk-ai.app
|
|
311
|
+
EOS
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
test do
|
|
315
|
+
system "#{bin}/rtk", "--version"
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
FORMULA
|
|
319
|
+
sed -i "s/VERSION_PLACEHOLDER/${{ steps.version.outputs.version }}/g" rtk.rb
|
|
320
|
+
sed -i "s/TAG_PLACEHOLDER/${{ steps.version.outputs.tag }}/g" rtk.rb
|
|
321
|
+
sed -i "s/SHA_MAC_ARM_PLACEHOLDER/${{ steps.sha.outputs.mac_arm }}/g" rtk.rb
|
|
322
|
+
sed -i "s/SHA_MAC_INTEL_PLACEHOLDER/${{ steps.sha.outputs.mac_intel }}/g" rtk.rb
|
|
323
|
+
sed -i "s/SHA_LINUX_ARM_PLACEHOLDER/${{ steps.sha.outputs.linux_arm }}/g" rtk.rb
|
|
324
|
+
sed -i "s/SHA_LINUX_INTEL_PLACEHOLDER/${{ steps.sha.outputs.linux_intel }}/g" rtk.rb
|
|
325
|
+
# Remove leading spaces from heredoc
|
|
326
|
+
sed -i 's/^ //' rtk.rb
|
|
327
|
+
|
|
328
|
+
- name: Push to homebrew-tap
|
|
329
|
+
run: |
|
|
330
|
+
CONTENT=$(base64 -w 0 rtk.rb)
|
|
331
|
+
SHA=$(gh api repos/rtk-ai/homebrew-tap/contents/Formula/rtk.rb --jq '.sha' 2>/dev/null || echo "")
|
|
332
|
+
if [ -n "$SHA" ]; then
|
|
333
|
+
gh api -X PUT repos/rtk-ai/homebrew-tap/contents/Formula/rtk.rb \
|
|
334
|
+
-f message="rtk ${{ steps.version.outputs.version }}" \
|
|
335
|
+
-f content="$CONTENT" \
|
|
336
|
+
-f sha="$SHA"
|
|
337
|
+
else
|
|
338
|
+
gh api -X PUT repos/rtk-ai/homebrew-tap/contents/Formula/rtk.rb \
|
|
339
|
+
-f message="rtk ${{ steps.version.outputs.version }}" \
|
|
340
|
+
-f content="$CONTENT"
|
|
341
|
+
fi
|
|
342
|
+
env:
|
|
343
|
+
GH_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
name: Security Check
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [ master ]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
pull-requests: write
|
|
10
|
+
|
|
11
|
+
env:
|
|
12
|
+
CARGO_TERM_COLOR: always
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
security:
|
|
16
|
+
name: Security Scan
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- name: Checkout PR
|
|
20
|
+
uses: actions/checkout@v4
|
|
21
|
+
with:
|
|
22
|
+
fetch-depth: 0
|
|
23
|
+
|
|
24
|
+
- name: Install Rust
|
|
25
|
+
uses: dtolnay/rust-toolchain@stable
|
|
26
|
+
|
|
27
|
+
- name: Install cargo-audit
|
|
28
|
+
run: cargo install cargo-audit
|
|
29
|
+
|
|
30
|
+
- name: Cargo Audit (CVE check)
|
|
31
|
+
run: |
|
|
32
|
+
echo "## 🔍 Security Scan Results" >> $GITHUB_STEP_SUMMARY
|
|
33
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
34
|
+
echo "### 📦 Dependency Vulnerabilities" >> $GITHUB_STEP_SUMMARY
|
|
35
|
+
if cargo audit 2>&1 | tee audit.log; then
|
|
36
|
+
echo "✅ No known vulnerabilities detected" >> $GITHUB_STEP_SUMMARY
|
|
37
|
+
else
|
|
38
|
+
echo "⚠️ Vulnerabilities found:" >> $GITHUB_STEP_SUMMARY
|
|
39
|
+
echo '```' >> $GITHUB_STEP_SUMMARY
|
|
40
|
+
cat audit.log >> $GITHUB_STEP_SUMMARY
|
|
41
|
+
echo '```' >> $GITHUB_STEP_SUMMARY
|
|
42
|
+
echo "::warning::Dependency vulnerabilities detected - review required"
|
|
43
|
+
fi
|
|
44
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
45
|
+
|
|
46
|
+
- name: Critical files check
|
|
47
|
+
run: |
|
|
48
|
+
echo "### 🎯 Critical Files Modified" >> $GITHUB_STEP_SUMMARY
|
|
49
|
+
CRITICAL=$(git diff --name-only origin/master...HEAD | grep -E "(runner|summary|tracking|init|pnpm_cmd|container)\.rs|Cargo\.toml|workflows/.*\.yml" || true)
|
|
50
|
+
if [ -n "$CRITICAL" ]; then
|
|
51
|
+
echo "⚠️ **HIGH RISK**: The following critical files were modified:" >> $GITHUB_STEP_SUMMARY
|
|
52
|
+
echo '```' >> $GITHUB_STEP_SUMMARY
|
|
53
|
+
echo "$CRITICAL" >> $GITHUB_STEP_SUMMARY
|
|
54
|
+
echo '```' >> $GITHUB_STEP_SUMMARY
|
|
55
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
56
|
+
echo "**Required Actions:**" >> $GITHUB_STEP_SUMMARY
|
|
57
|
+
echo "- [ ] Manual security review by 2 maintainers" >> $GITHUB_STEP_SUMMARY
|
|
58
|
+
echo "- [ ] Verify no shell injection vectors" >> $GITHUB_STEP_SUMMARY
|
|
59
|
+
echo "- [ ] Check input validation remains intact" >> $GITHUB_STEP_SUMMARY
|
|
60
|
+
echo "::warning::Critical RTK files modified - enhanced review required"
|
|
61
|
+
else
|
|
62
|
+
echo "✅ No critical files modified" >> $GITHUB_STEP_SUMMARY
|
|
63
|
+
fi
|
|
64
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
65
|
+
|
|
66
|
+
- name: Dangerous patterns scan
|
|
67
|
+
run: |
|
|
68
|
+
echo "### 🚨 Dangerous Code Patterns" >> $GITHUB_STEP_SUMMARY
|
|
69
|
+
PATTERNS=$(git diff origin/master...HEAD | grep -E "Command::new\(\"sh\"|Command::new\(\"bash\"|\.env\(\"LD_PRELOAD|\.env\(\"PATH|reqwest::|std::net::|TcpStream|UdpSocket|unsafe \{|\.unwrap\(\) |panic!\(|todo!\(|unimplemented!\(" || true)
|
|
70
|
+
if [ -n "$PATTERNS" ]; then
|
|
71
|
+
echo "⚠️ **Potentially dangerous patterns detected:**" >> $GITHUB_STEP_SUMMARY
|
|
72
|
+
echo '```diff' >> $GITHUB_STEP_SUMMARY
|
|
73
|
+
echo "$PATTERNS" | head -30 >> $GITHUB_STEP_SUMMARY
|
|
74
|
+
echo '```' >> $GITHUB_STEP_SUMMARY
|
|
75
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
76
|
+
echo "**Security Concerns:**" >> $GITHUB_STEP_SUMMARY
|
|
77
|
+
echo "$PATTERNS" | grep -q "Command::new" && echo "- Shell command execution detected" >> $GITHUB_STEP_SUMMARY || true
|
|
78
|
+
echo "$PATTERNS" | grep -q "\.env\(\"" && echo "- Environment variable manipulation" >> $GITHUB_STEP_SUMMARY || true
|
|
79
|
+
echo "$PATTERNS" | grep -q "reqwest::\|std::net::\|TcpStream\|UdpSocket" && echo "- Network operations added" >> $GITHUB_STEP_SUMMARY || true
|
|
80
|
+
echo "$PATTERNS" | grep -q "unsafe" && echo "- Unsafe code blocks" >> $GITHUB_STEP_SUMMARY || true
|
|
81
|
+
echo "$PATTERNS" | grep -q "\.unwrap\(\)\|panic!\(" && echo "- Panic-inducing code" >> $GITHUB_STEP_SUMMARY || true
|
|
82
|
+
echo "::warning::Dangerous code patterns detected - manual review required"
|
|
83
|
+
else
|
|
84
|
+
echo "✅ No dangerous patterns detected" >> $GITHUB_STEP_SUMMARY
|
|
85
|
+
fi
|
|
86
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
87
|
+
|
|
88
|
+
- name: New dependencies check
|
|
89
|
+
run: |
|
|
90
|
+
echo "### 📚 Dependencies Changes" >> $GITHUB_STEP_SUMMARY
|
|
91
|
+
if git diff origin/master...HEAD Cargo.toml | grep -E "^\+.*=" | grep -v "^\+\+\+" > new_deps.txt; then
|
|
92
|
+
echo "⚠️ **New dependencies added:**" >> $GITHUB_STEP_SUMMARY
|
|
93
|
+
echo '```toml' >> $GITHUB_STEP_SUMMARY
|
|
94
|
+
cat new_deps.txt >> $GITHUB_STEP_SUMMARY
|
|
95
|
+
echo '```' >> $GITHUB_STEP_SUMMARY
|
|
96
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
97
|
+
echo "**Required Actions:**" >> $GITHUB_STEP_SUMMARY
|
|
98
|
+
echo "- [ ] Audit each new dependency on crates.io" >> $GITHUB_STEP_SUMMARY
|
|
99
|
+
echo "- [ ] Check maintainer reputation and download counts" >> $GITHUB_STEP_SUMMARY
|
|
100
|
+
echo "- [ ] Verify no typosquatting (e.g., 'reqwest' vs 'request')" >> $GITHUB_STEP_SUMMARY
|
|
101
|
+
echo "::warning::New dependencies require supply chain audit"
|
|
102
|
+
else
|
|
103
|
+
echo "✅ No new dependencies added" >> $GITHUB_STEP_SUMMARY
|
|
104
|
+
fi
|
|
105
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
106
|
+
|
|
107
|
+
- name: Clippy security lints
|
|
108
|
+
run: |
|
|
109
|
+
echo "### 🔧 Clippy Security Lints" >> $GITHUB_STEP_SUMMARY
|
|
110
|
+
if cargo clippy --all-targets -- -W clippy::unwrap_used -W clippy::panic -W clippy::expect_used 2>&1 | tee clippy.log | grep -E "warning:|error:"; then
|
|
111
|
+
echo "⚠️ Security-related lints triggered:" >> $GITHUB_STEP_SUMMARY
|
|
112
|
+
echo '```' >> $GITHUB_STEP_SUMMARY
|
|
113
|
+
grep -E "warning:|error:" clippy.log | head -20 >> $GITHUB_STEP_SUMMARY
|
|
114
|
+
echo '```' >> $GITHUB_STEP_SUMMARY
|
|
115
|
+
echo "::warning::Clippy security lints failed"
|
|
116
|
+
else
|
|
117
|
+
echo "✅ All security lints passed" >> $GITHUB_STEP_SUMMARY
|
|
118
|
+
fi
|
|
119
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
120
|
+
|
|
121
|
+
- name: Summary verdict
|
|
122
|
+
run: |
|
|
123
|
+
echo "---" >> $GITHUB_STEP_SUMMARY
|
|
124
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
125
|
+
echo "### 🎯 Security Review Verdict" >> $GITHUB_STEP_SUMMARY
|
|
126
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
127
|
+
echo "**This is an automated security scan. A human maintainer must:**" >> $GITHUB_STEP_SUMMARY
|
|
128
|
+
echo "1. Review all warnings above" >> $GITHUB_STEP_SUMMARY
|
|
129
|
+
echo "2. Verify PR intent matches actual code changes" >> $GITHUB_STEP_SUMMARY
|
|
130
|
+
echo "3. Check for subtle backdoors or logic bombs" >> $GITHUB_STEP_SUMMARY
|
|
131
|
+
echo "4. Use \`/rtk-pr-security\` skill for comprehensive analysis" >> $GITHUB_STEP_SUMMARY
|
|
132
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
133
|
+
echo "**For high-risk PRs (critical files modified):**" >> $GITHUB_STEP_SUMMARY
|
|
134
|
+
echo "- Require approval from 2 maintainers" >> $GITHUB_STEP_SUMMARY
|
|
135
|
+
echo "- Test in isolated environment before merge" >> $GITHUB_STEP_SUMMARY
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
name: Documentation Validation
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
paths:
|
|
6
|
+
- 'src/**/*.rs'
|
|
7
|
+
- 'Cargo.toml'
|
|
8
|
+
- '**.md'
|
|
9
|
+
- '.claude/hooks/*.sh'
|
|
10
|
+
push:
|
|
11
|
+
branches:
|
|
12
|
+
- master
|
|
13
|
+
- feat/**
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
validate:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: Validate documentation consistency
|
|
22
|
+
run: bash scripts/validate-docs.sh
|
|
23
|
+
|
|
24
|
+
- name: Check module count consistency
|
|
25
|
+
run: |
|
|
26
|
+
MAIN_MODULES=$(grep -c '^mod ' src/main.rs)
|
|
27
|
+
|
|
28
|
+
# Check ARCHITECTURE.md if it exists
|
|
29
|
+
if [ -f "ARCHITECTURE.md" ]; then
|
|
30
|
+
ARCH_MODULES=$(grep 'Total:.*modules' ARCHITECTURE.md | grep -o '[0-9]\+' | head -1)
|
|
31
|
+
if [ -n "$ARCH_MODULES" ] && [ "$MAIN_MODULES" != "$ARCH_MODULES" ]; then
|
|
32
|
+
echo "❌ Module count mismatch"
|
|
33
|
+
echo "main.rs: $MAIN_MODULES modules"
|
|
34
|
+
echo "ARCHITECTURE.md: $ARCH_MODULES modules"
|
|
35
|
+
exit 1
|
|
36
|
+
fi
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
echo "✅ Module count consistent: $MAIN_MODULES modules"
|
|
40
|
+
|
|
41
|
+
- name: Verify Python/Go commands documented
|
|
42
|
+
run: |
|
|
43
|
+
for cmd in ruff pytest pip go golangci; do
|
|
44
|
+
if ! grep -q "$cmd" README.md; then
|
|
45
|
+
echo "❌ README.md missing Python/Go command: $cmd"
|
|
46
|
+
exit 1
|
|
47
|
+
fi
|
|
48
|
+
if ! grep -q "$cmd" CLAUDE.md; then
|
|
49
|
+
echo "❌ CLAUDE.md missing Python/Go command: $cmd"
|
|
50
|
+
exit 1
|
|
51
|
+
fi
|
|
52
|
+
done
|
|
53
|
+
echo "✅ All Python/Go commands documented"
|
|
54
|
+
|
|
55
|
+
- name: Verify hook coverage
|
|
56
|
+
run: |
|
|
57
|
+
HOOK_FILE=".claude/hooks/rtk-rewrite.sh"
|
|
58
|
+
if [ ! -f "$HOOK_FILE" ]; then
|
|
59
|
+
echo "❌ Hook file not found: $HOOK_FILE"
|
|
60
|
+
exit 1
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
# Since PR #241, the hook delegates to `rtk rewrite` (single source of truth).
|
|
64
|
+
# Command coverage is now in src/discover/registry.rs, not the hook bash script.
|
|
65
|
+
if ! grep -q "rtk rewrite" "$HOOK_FILE"; then
|
|
66
|
+
echo "❌ Hook does not delegate to 'rtk rewrite'"
|
|
67
|
+
exit 1
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
# Verify all Python/Go commands are covered in the registry
|
|
71
|
+
# Since PR #241, constants live in src/discover/rules.rs (extracted from registry.rs)
|
|
72
|
+
for cmd in ruff pytest pip golangci; do
|
|
73
|
+
if ! grep -qr "\"$cmd\"" src/discover/; then
|
|
74
|
+
echo "❌ Registry missing rewrite_prefixes for: $cmd"
|
|
75
|
+
exit 1
|
|
76
|
+
fi
|
|
77
|
+
done
|
|
78
|
+
echo "✅ Hook delegates to rtk rewrite, registry covers all Python/Go commands"
|