@hasna/terminal 2.3.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/dist/cli.js +64 -16
  2. package/package.json +1 -1
  3. package/src/ai.ts +8 -0
  4. package/src/cli.tsx +57 -18
  5. package/src/output-processor.ts +6 -1
  6. package/src/output-store.ts +58 -12
  7. package/src/tool-profiles.ts +139 -0
  8. package/temp/rtk/.claude/agents/code-reviewer.md +0 -221
  9. package/temp/rtk/.claude/agents/debugger.md +0 -519
  10. package/temp/rtk/.claude/agents/rtk-testing-specialist.md +0 -461
  11. package/temp/rtk/.claude/agents/rust-rtk.md +0 -511
  12. package/temp/rtk/.claude/agents/technical-writer.md +0 -355
  13. package/temp/rtk/.claude/commands/diagnose.md +0 -352
  14. package/temp/rtk/.claude/commands/test-routing.md +0 -362
  15. package/temp/rtk/.claude/hooks/bash/pre-commit-format.sh +0 -16
  16. package/temp/rtk/.claude/hooks/rtk-rewrite.sh +0 -70
  17. package/temp/rtk/.claude/hooks/rtk-suggest.sh +0 -152
  18. package/temp/rtk/.claude/rules/cli-testing.md +0 -526
  19. package/temp/rtk/.claude/skills/issue-triage/SKILL.md +0 -348
  20. package/temp/rtk/.claude/skills/issue-triage/templates/issue-comment.md +0 -134
  21. package/temp/rtk/.claude/skills/performance.md +0 -435
  22. package/temp/rtk/.claude/skills/pr-triage/SKILL.md +0 -315
  23. package/temp/rtk/.claude/skills/pr-triage/templates/review-comment.md +0 -71
  24. package/temp/rtk/.claude/skills/repo-recap.md +0 -206
  25. package/temp/rtk/.claude/skills/rtk-tdd/SKILL.md +0 -78
  26. package/temp/rtk/.claude/skills/rtk-tdd/references/testing-patterns.md +0 -124
  27. package/temp/rtk/.claude/skills/security-guardian.md +0 -503
  28. package/temp/rtk/.claude/skills/ship.md +0 -404
  29. package/temp/rtk/.github/workflows/benchmark.yml +0 -34
  30. package/temp/rtk/.github/workflows/dco-check.yaml +0 -12
  31. package/temp/rtk/.github/workflows/release-please.yml +0 -51
  32. package/temp/rtk/.github/workflows/release.yml +0 -343
  33. package/temp/rtk/.github/workflows/security-check.yml +0 -135
  34. package/temp/rtk/.github/workflows/validate-docs.yml +0 -78
  35. package/temp/rtk/.release-please-manifest.json +0 -3
  36. package/temp/rtk/ARCHITECTURE.md +0 -1491
  37. package/temp/rtk/CHANGELOG.md +0 -640
  38. package/temp/rtk/CLAUDE.md +0 -605
  39. package/temp/rtk/CONTRIBUTING.md +0 -199
  40. package/temp/rtk/Cargo.lock +0 -1668
  41. package/temp/rtk/Cargo.toml +0 -64
  42. package/temp/rtk/Formula/rtk.rb +0 -43
  43. package/temp/rtk/INSTALL.md +0 -390
  44. package/temp/rtk/LICENSE +0 -21
  45. package/temp/rtk/README.md +0 -386
  46. package/temp/rtk/README_es.md +0 -159
  47. package/temp/rtk/README_fr.md +0 -197
  48. package/temp/rtk/README_ja.md +0 -159
  49. package/temp/rtk/README_ko.md +0 -159
  50. package/temp/rtk/README_zh.md +0 -167
  51. package/temp/rtk/ROADMAP.md +0 -15
  52. package/temp/rtk/SECURITY.md +0 -217
  53. package/temp/rtk/TEST_EXEC_TIME.md +0 -102
  54. package/temp/rtk/build.rs +0 -57
  55. package/temp/rtk/docs/AUDIT_GUIDE.md +0 -432
  56. package/temp/rtk/docs/FEATURES.md +0 -1410
  57. package/temp/rtk/docs/TROUBLESHOOTING.md +0 -309
  58. package/temp/rtk/docs/filter-workflow.md +0 -102
  59. package/temp/rtk/docs/images/gain-dashboard.jpg +0 -0
  60. package/temp/rtk/docs/tracking.md +0 -583
  61. package/temp/rtk/hooks/opencode-rtk.ts +0 -39
  62. package/temp/rtk/hooks/rtk-awareness.md +0 -29
  63. package/temp/rtk/hooks/rtk-rewrite.sh +0 -61
  64. package/temp/rtk/hooks/test-rtk-rewrite.sh +0 -442
  65. package/temp/rtk/install.sh +0 -124
  66. package/temp/rtk/release-please-config.json +0 -10
  67. package/temp/rtk/scripts/benchmark.sh +0 -592
  68. package/temp/rtk/scripts/check-installation.sh +0 -162
  69. package/temp/rtk/scripts/install-local.sh +0 -37
  70. package/temp/rtk/scripts/rtk-economics.sh +0 -137
  71. package/temp/rtk/scripts/test-all.sh +0 -561
  72. package/temp/rtk/scripts/test-aristote.sh +0 -227
  73. package/temp/rtk/scripts/test-tracking.sh +0 -79
  74. package/temp/rtk/scripts/update-readme-metrics.sh +0 -32
  75. package/temp/rtk/scripts/validate-docs.sh +0 -73
  76. package/temp/rtk/src/aws_cmd.rs +0 -880
  77. package/temp/rtk/src/binlog.rs +0 -1645
  78. package/temp/rtk/src/cargo_cmd.rs +0 -1727
  79. package/temp/rtk/src/cc_economics.rs +0 -1157
  80. package/temp/rtk/src/ccusage.rs +0 -340
  81. package/temp/rtk/src/config.rs +0 -187
  82. package/temp/rtk/src/container.rs +0 -855
  83. package/temp/rtk/src/curl_cmd.rs +0 -134
  84. package/temp/rtk/src/deps.rs +0 -268
  85. package/temp/rtk/src/diff_cmd.rs +0 -367
  86. package/temp/rtk/src/discover/mod.rs +0 -274
  87. package/temp/rtk/src/discover/provider.rs +0 -388
  88. package/temp/rtk/src/discover/registry.rs +0 -2022
  89. package/temp/rtk/src/discover/report.rs +0 -202
  90. package/temp/rtk/src/discover/rules.rs +0 -667
  91. package/temp/rtk/src/display_helpers.rs +0 -402
  92. package/temp/rtk/src/dotnet_cmd.rs +0 -1771
  93. package/temp/rtk/src/dotnet_format_report.rs +0 -133
  94. package/temp/rtk/src/dotnet_trx.rs +0 -593
  95. package/temp/rtk/src/env_cmd.rs +0 -204
  96. package/temp/rtk/src/filter.rs +0 -462
  97. package/temp/rtk/src/filters/README.md +0 -52
  98. package/temp/rtk/src/filters/ansible-playbook.toml +0 -34
  99. package/temp/rtk/src/filters/basedpyright.toml +0 -47
  100. package/temp/rtk/src/filters/biome.toml +0 -45
  101. package/temp/rtk/src/filters/brew-install.toml +0 -37
  102. package/temp/rtk/src/filters/composer-install.toml +0 -40
  103. package/temp/rtk/src/filters/df.toml +0 -16
  104. package/temp/rtk/src/filters/dotnet-build.toml +0 -64
  105. package/temp/rtk/src/filters/du.toml +0 -16
  106. package/temp/rtk/src/filters/fail2ban-client.toml +0 -15
  107. package/temp/rtk/src/filters/gcc.toml +0 -49
  108. package/temp/rtk/src/filters/gcloud.toml +0 -22
  109. package/temp/rtk/src/filters/hadolint.toml +0 -24
  110. package/temp/rtk/src/filters/helm.toml +0 -29
  111. package/temp/rtk/src/filters/iptables.toml +0 -27
  112. package/temp/rtk/src/filters/jj.toml +0 -28
  113. package/temp/rtk/src/filters/jq.toml +0 -24
  114. package/temp/rtk/src/filters/make.toml +0 -41
  115. package/temp/rtk/src/filters/markdownlint.toml +0 -24
  116. package/temp/rtk/src/filters/mix-compile.toml +0 -27
  117. package/temp/rtk/src/filters/mix-format.toml +0 -15
  118. package/temp/rtk/src/filters/mvn-build.toml +0 -44
  119. package/temp/rtk/src/filters/oxlint.toml +0 -43
  120. package/temp/rtk/src/filters/ping.toml +0 -63
  121. package/temp/rtk/src/filters/pio-run.toml +0 -40
  122. package/temp/rtk/src/filters/poetry-install.toml +0 -50
  123. package/temp/rtk/src/filters/pre-commit.toml +0 -35
  124. package/temp/rtk/src/filters/ps.toml +0 -16
  125. package/temp/rtk/src/filters/quarto-render.toml +0 -41
  126. package/temp/rtk/src/filters/rsync.toml +0 -48
  127. package/temp/rtk/src/filters/shellcheck.toml +0 -27
  128. package/temp/rtk/src/filters/shopify-theme.toml +0 -29
  129. package/temp/rtk/src/filters/skopeo.toml +0 -45
  130. package/temp/rtk/src/filters/sops.toml +0 -16
  131. package/temp/rtk/src/filters/ssh.toml +0 -44
  132. package/temp/rtk/src/filters/stat.toml +0 -34
  133. package/temp/rtk/src/filters/swift-build.toml +0 -41
  134. package/temp/rtk/src/filters/systemctl-status.toml +0 -33
  135. package/temp/rtk/src/filters/terraform-plan.toml +0 -35
  136. package/temp/rtk/src/filters/tofu-fmt.toml +0 -16
  137. package/temp/rtk/src/filters/tofu-init.toml +0 -38
  138. package/temp/rtk/src/filters/tofu-plan.toml +0 -35
  139. package/temp/rtk/src/filters/tofu-validate.toml +0 -17
  140. package/temp/rtk/src/filters/trunk-build.toml +0 -39
  141. package/temp/rtk/src/filters/ty.toml +0 -50
  142. package/temp/rtk/src/filters/uv-sync.toml +0 -37
  143. package/temp/rtk/src/filters/xcodebuild.toml +0 -99
  144. package/temp/rtk/src/filters/yamllint.toml +0 -25
  145. package/temp/rtk/src/find_cmd.rs +0 -598
  146. package/temp/rtk/src/format_cmd.rs +0 -386
  147. package/temp/rtk/src/gain.rs +0 -723
  148. package/temp/rtk/src/gh_cmd.rs +0 -1651
  149. package/temp/rtk/src/git.rs +0 -2012
  150. package/temp/rtk/src/go_cmd.rs +0 -592
  151. package/temp/rtk/src/golangci_cmd.rs +0 -254
  152. package/temp/rtk/src/grep_cmd.rs +0 -288
  153. package/temp/rtk/src/gt_cmd.rs +0 -810
  154. package/temp/rtk/src/hook_audit_cmd.rs +0 -283
  155. package/temp/rtk/src/hook_check.rs +0 -171
  156. package/temp/rtk/src/init.rs +0 -1859
  157. package/temp/rtk/src/integrity.rs +0 -537
  158. package/temp/rtk/src/json_cmd.rs +0 -231
  159. package/temp/rtk/src/learn/detector.rs +0 -628
  160. package/temp/rtk/src/learn/mod.rs +0 -119
  161. package/temp/rtk/src/learn/report.rs +0 -184
  162. package/temp/rtk/src/lint_cmd.rs +0 -694
  163. package/temp/rtk/src/local_llm.rs +0 -316
  164. package/temp/rtk/src/log_cmd.rs +0 -248
  165. package/temp/rtk/src/ls.rs +0 -324
  166. package/temp/rtk/src/main.rs +0 -2482
  167. package/temp/rtk/src/mypy_cmd.rs +0 -389
  168. package/temp/rtk/src/next_cmd.rs +0 -241
  169. package/temp/rtk/src/npm_cmd.rs +0 -236
  170. package/temp/rtk/src/parser/README.md +0 -267
  171. package/temp/rtk/src/parser/error.rs +0 -46
  172. package/temp/rtk/src/parser/formatter.rs +0 -336
  173. package/temp/rtk/src/parser/mod.rs +0 -311
  174. package/temp/rtk/src/parser/types.rs +0 -119
  175. package/temp/rtk/src/pip_cmd.rs +0 -302
  176. package/temp/rtk/src/playwright_cmd.rs +0 -479
  177. package/temp/rtk/src/pnpm_cmd.rs +0 -573
  178. package/temp/rtk/src/prettier_cmd.rs +0 -221
  179. package/temp/rtk/src/prisma_cmd.rs +0 -482
  180. package/temp/rtk/src/psql_cmd.rs +0 -382
  181. package/temp/rtk/src/pytest_cmd.rs +0 -384
  182. package/temp/rtk/src/read.rs +0 -217
  183. package/temp/rtk/src/rewrite_cmd.rs +0 -50
  184. package/temp/rtk/src/ruff_cmd.rs +0 -402
  185. package/temp/rtk/src/runner.rs +0 -271
  186. package/temp/rtk/src/summary.rs +0 -297
  187. package/temp/rtk/src/tee.rs +0 -405
  188. package/temp/rtk/src/telemetry.rs +0 -248
  189. package/temp/rtk/src/toml_filter.rs +0 -1655
  190. package/temp/rtk/src/tracking.rs +0 -1416
  191. package/temp/rtk/src/tree.rs +0 -209
  192. package/temp/rtk/src/tsc_cmd.rs +0 -259
  193. package/temp/rtk/src/utils.rs +0 -432
  194. package/temp/rtk/src/verify_cmd.rs +0 -47
  195. package/temp/rtk/src/vitest_cmd.rs +0 -385
  196. package/temp/rtk/src/wc_cmd.rs +0 -401
  197. package/temp/rtk/src/wget_cmd.rs +0 -260
  198. package/temp/rtk/tests/fixtures/dotnet/build_failed.txt +0 -11
  199. package/temp/rtk/tests/fixtures/dotnet/format_changes.json +0 -31
  200. package/temp/rtk/tests/fixtures/dotnet/format_empty.json +0 -1
  201. package/temp/rtk/tests/fixtures/dotnet/format_success.json +0 -12
  202. package/temp/rtk/tests/fixtures/dotnet/test_failed.txt +0 -18
@@ -1,162 +0,0 @@
1
- #!/bin/bash
2
- # RTK Installation Verification Script
3
- # Helps diagnose if you have the correct rtk (Token Killer) installed
4
-
5
- set -e
6
-
7
- RED='\033[0;31m'
8
- GREEN='\033[0;32m'
9
- YELLOW='\033[1;33m'
10
- NC='\033[0m' # No Color
11
-
12
- echo "═══════════════════════════════════════════════════════════"
13
- echo " RTK Installation Verification"
14
- echo "═══════════════════════════════════════════════════════════"
15
- echo ""
16
-
17
- # Check 1: RTK installed?
18
- echo "1. Checking if RTK is installed..."
19
- if command -v rtk &> /dev/null; then
20
- echo -e " ${GREEN}✅ RTK is installed${NC}"
21
- RTK_PATH=$(which rtk)
22
- echo " Location: $RTK_PATH"
23
- else
24
- echo -e " ${RED}❌ RTK is NOT installed${NC}"
25
- echo ""
26
- echo " Install with:"
27
- echo " curl -fsSL https://github.com/rtk-ai/rtk/blob/master/install.sh| sh"
28
- exit 1
29
- fi
30
- echo ""
31
-
32
- # Check 2: RTK version
33
- echo "2. Checking RTK version..."
34
- RTK_VERSION=$(rtk --version 2>/dev/null || echo "unknown")
35
- echo " Version: $RTK_VERSION"
36
- echo ""
37
-
38
- # Check 3: Is it Token Killer or Type Kit?
39
- echo "3. Verifying this is Token Killer (not Type Kit)..."
40
- if rtk gain &>/dev/null || rtk gain --help &>/dev/null; then
41
- echo -e " ${GREEN}✅ CORRECT - You have Rust Token Killer${NC}"
42
- CORRECT_RTK=true
43
- else
44
- echo -e " ${RED}❌ WRONG - You have Rust Type Kit (different project!)${NC}"
45
- echo ""
46
- echo " You installed the wrong package. Fix it with:"
47
- echo " cargo uninstall rtk"
48
- echo " curl -fsSL https://github.com/rtk-ai/rtk/blob/master/install.sh | sh"
49
- CORRECT_RTK=false
50
- fi
51
- echo ""
52
-
53
- if [ "$CORRECT_RTK" = false ]; then
54
- echo "═══════════════════════════════════════════════════════════"
55
- echo -e "${RED}INSTALLATION CHECK FAILED${NC}"
56
- echo "═══════════════════════════════════════════════════════════"
57
- exit 1
58
- fi
59
-
60
- # Check 4: Available features
61
- echo "4. Checking available features..."
62
- FEATURES=()
63
- MISSING_FEATURES=()
64
-
65
- check_command() {
66
- local cmd=$1
67
- local name=$2
68
- if rtk --help 2>/dev/null | grep -qw "$cmd"; then
69
- echo -e " ${GREEN}✅${NC} $name"
70
- FEATURES+=("$name")
71
- else
72
- echo -e " ${YELLOW}⚠️${NC} $name (missing - upgrade to fork?)"
73
- MISSING_FEATURES+=("$name")
74
- fi
75
- }
76
-
77
- check_command "gain" "Token savings analytics"
78
- check_command "git" "Git operations"
79
- check_command "gh" "GitHub CLI"
80
- check_command "pnpm" "pnpm support"
81
- check_command "vitest" "Vitest test runner"
82
- check_command "lint" "ESLint/linters"
83
- check_command "tsc" "TypeScript compiler"
84
- check_command "next" "Next.js"
85
- check_command "prettier" "Prettier"
86
- check_command "playwright" "Playwright E2E"
87
- check_command "prisma" "Prisma ORM"
88
- check_command "discover" "Discover missed savings"
89
-
90
- echo ""
91
-
92
- # Check 5: CLAUDE.md initialization
93
- echo "5. Checking Claude Code integration..."
94
- GLOBAL_INIT=false
95
- LOCAL_INIT=false
96
-
97
- if [ -f "$HOME/.claude/CLAUDE.md" ] && grep -q "rtk" "$HOME/.claude/CLAUDE.md"; then
98
- echo -e " ${GREEN}✅${NC} Global CLAUDE.md initialized (~/.claude/CLAUDE.md)"
99
- GLOBAL_INIT=true
100
- else
101
- echo -e " ${YELLOW}⚠️${NC} Global CLAUDE.md not initialized"
102
- echo " Run: rtk init --global"
103
- fi
104
-
105
- if [ -f "./CLAUDE.md" ] && grep -q "rtk" "./CLAUDE.md"; then
106
- echo -e " ${GREEN}✅${NC} Local CLAUDE.md initialized (./CLAUDE.md)"
107
- LOCAL_INIT=true
108
- else
109
- echo -e " ${YELLOW}⚠️${NC} Local CLAUDE.md not initialized in current directory"
110
- echo " Run: rtk init (in your project directory)"
111
- fi
112
- echo ""
113
-
114
- # Check 6: Auto-rewrite hook
115
- echo "6. Checking auto-rewrite hook (optional but recommended)..."
116
- if [ -f "$HOME/.claude/hooks/rtk-rewrite.sh" ]; then
117
- echo -e " ${GREEN}✅${NC} Hook script installed"
118
- if [ -f "$HOME/.claude/settings.json" ] && grep -q "rtk-rewrite.sh" "$HOME/.claude/settings.json"; then
119
- echo -e " ${GREEN}✅${NC} Hook enabled in settings.json"
120
- else
121
- echo -e " ${YELLOW}⚠️${NC} Hook script exists but not enabled in settings.json"
122
- echo " See README.md 'Auto-Rewrite Hook' section"
123
- fi
124
- else
125
- echo -e " ${YELLOW}⚠️${NC} Auto-rewrite hook not installed (optional)"
126
- echo " Install: cp .claude/hooks/rtk-rewrite.sh ~/.claude/hooks/"
127
- fi
128
- echo ""
129
-
130
- # Summary
131
- echo "═══════════════════════════════════════════════════════════"
132
- echo " SUMMARY"
133
- echo "═══════════════════════════════════════════════════════════"
134
-
135
- if [ ${#MISSING_FEATURES[@]} -gt 0 ]; then
136
- echo -e "${YELLOW}⚠️ You have a basic RTK installation${NC}"
137
- echo ""
138
- echo "Missing features:"
139
- for feature in "${MISSING_FEATURES[@]}"; do
140
- echo " - $feature"
141
- done
142
- echo ""
143
- echo "To get all features, install the fork:"
144
- echo " cargo uninstall rtk"
145
- echo " curl -fsSL https://github.com/rtk-ai/rtk/blob/master/install.sh | sh"
146
- echo " cd rtk && git checkout feat/all-features"
147
- echo " cargo install --path . --force"
148
- else
149
- echo -e "${GREEN}✅ Full-featured RTK installation detected${NC}"
150
- fi
151
-
152
- echo ""
153
-
154
- if [ "$GLOBAL_INIT" = false ] && [ "$LOCAL_INIT" = false ]; then
155
- echo -e "${YELLOW}⚠️ RTK not initialized for Claude Code${NC}"
156
- echo " Run: rtk init --global (for all projects)"
157
- echo " Or: rtk init (for this project only)"
158
- fi
159
-
160
- echo ""
161
- echo "Need help? See docs/TROUBLESHOOTING.md"
162
- echo "═══════════════════════════════════════════════════════════"
@@ -1,37 +0,0 @@
1
- #!/bin/bash
2
- # Install RTK from a local release build (builds from source, no network download).
3
-
4
- set -euo pipefail
5
-
6
- INSTALL_DIR="${1:-$HOME/.cargo/bin}"
7
- INSTALL_PATH="${INSTALL_DIR}/rtk"
8
- BINARY_PATH="./target/release/rtk"
9
-
10
- if ! command -v cargo &>/dev/null; then
11
- echo "error: cargo not found"
12
- echo "install Rust: https://rustup.rs"
13
- exit 1
14
- fi
15
-
16
- echo "installing to: $INSTALL_DIR"
17
- if [ -f "$BINARY_PATH" ] && [ -z "$(find src/ Cargo.toml Cargo.lock -newer "$BINARY_PATH" -print -quit 2>/dev/null)" ]; then
18
- echo "binary is up to date"
19
- else
20
- echo "building rtk (release)..."
21
- cargo build --release
22
- fi
23
-
24
- mkdir -p "$INSTALL_DIR"
25
- install -m 755 "$BINARY_PATH" "$INSTALL_PATH"
26
-
27
- echo "installed: $INSTALL_PATH"
28
- echo "version: $("$INSTALL_PATH" --version)"
29
-
30
- case ":$PATH:" in
31
- *":$INSTALL_DIR:"*) ;;
32
- *) echo
33
- echo "warning: $INSTALL_DIR is not in your PATH"
34
- echo "add this to your shell profile:"
35
- echo " export PATH=\"\$PATH:$INSTALL_DIR\""
36
- ;;
37
- esac
@@ -1,137 +0,0 @@
1
- #!/bin/bash
2
- # rtk-economics.sh
3
- # Combine ccusage (tokens spent) with rtk (tokens saved) for economic analysis
4
-
5
- set -euo pipefail
6
-
7
- # Colors for output
8
- RED='\033[0;31m'
9
- GREEN='\033[0;32m'
10
- YELLOW='\033[1;33m'
11
- BLUE='\033[0;34m'
12
- NC='\033[0m' # No Color
13
-
14
- # Get current month
15
- CURRENT_MONTH=$(date +%Y-%m)
16
-
17
- echo -e "${BLUE}📊 RTK Economic Impact Analysis${NC}"
18
- echo "════════════════════════════════════════════════════════════════"
19
- echo
20
-
21
- # Check if ccusage is available
22
- if ! command -v ccusage &> /dev/null; then
23
- echo -e "${RED}Error: ccusage not found${NC}"
24
- echo "Install: npm install -g @anthropics/claude-code-usage"
25
- exit 1
26
- fi
27
-
28
- # Check if rtk is available
29
- if ! command -v rtk &> /dev/null; then
30
- echo -e "${RED}Error: rtk not found${NC}"
31
- echo "Install: cargo install --path ."
32
- exit 1
33
- fi
34
-
35
- # Fetch ccusage data
36
- echo -e "${YELLOW}Fetching token usage data from ccusage...${NC}"
37
- if ! ccusage_json=$(ccusage monthly --json 2>/dev/null); then
38
- echo -e "${RED}Failed to fetch ccusage data${NC}"
39
- exit 1
40
- fi
41
-
42
- # Fetch rtk data
43
- echo -e "${YELLOW}Fetching token savings data from rtk...${NC}"
44
- if ! rtk_json=$(rtk gain --monthly --format json 2>/dev/null); then
45
- echo -e "${RED}Failed to fetch rtk data${NC}"
46
- exit 1
47
- fi
48
-
49
- echo
50
-
51
- # Parse ccusage data for current month
52
- ccusage_cost=$(echo "$ccusage_json" | jq -r ".monthly[] | select(.month == \"$CURRENT_MONTH\") | .totalCost // 0")
53
- ccusage_input=$(echo "$ccusage_json" | jq -r ".monthly[] | select(.month == \"$CURRENT_MONTH\") | .inputTokens // 0")
54
- ccusage_output=$(echo "$ccusage_json" | jq -r ".monthly[] | select(.month == \"$CURRENT_MONTH\") | .outputTokens // 0")
55
- ccusage_total=$(echo "$ccusage_json" | jq -r ".monthly[] | select(.month == \"$CURRENT_MONTH\") | .totalTokens // 0")
56
-
57
- # Parse rtk data for current month
58
- rtk_saved=$(echo "$rtk_json" | jq -r ".monthly[] | select(.month == \"$CURRENT_MONTH\") | .saved_tokens // 0")
59
- rtk_commands=$(echo "$rtk_json" | jq -r ".monthly[] | select(.month == \"$CURRENT_MONTH\") | .commands // 0")
60
- rtk_input=$(echo "$rtk_json" | jq -r ".monthly[] | select(.month == \"$CURRENT_MONTH\") | .input_tokens // 0")
61
- rtk_output=$(echo "$rtk_json" | jq -r ".monthly[] | select(.month == \"$CURRENT_MONTH\") | .output_tokens // 0")
62
- rtk_pct=$(echo "$rtk_json" | jq -r ".monthly[] | select(.month == \"$CURRENT_MONTH\") | .savings_pct // 0")
63
-
64
- # Estimate cost avoided (rough: $0.0001/token for mixed usage)
65
- # More accurate would be to use ccusage's model-specific pricing
66
- saved_cost=$(echo "scale=2; $rtk_saved * 0.0001" | bc 2>/dev/null || echo "0")
67
-
68
- # Calculate total without rtk
69
- total_without_rtk=$(echo "scale=2; $ccusage_cost + $saved_cost" | bc 2>/dev/null || echo "$ccusage_cost")
70
-
71
- # Calculate savings percentage
72
- if (( $(echo "$total_without_rtk > 0" | bc -l) )); then
73
- savings_pct=$(echo "scale=1; ($saved_cost / $total_without_rtk) * 100" | bc 2>/dev/null || echo "0")
74
- else
75
- savings_pct="0"
76
- fi
77
-
78
- # Calculate cost per command
79
- if [ "$rtk_commands" -gt 0 ]; then
80
- cost_per_cmd_with=$(echo "scale=2; $ccusage_cost / $rtk_commands" | bc 2>/dev/null || echo "0")
81
- cost_per_cmd_without=$(echo "scale=2; $total_without_rtk / $rtk_commands" | bc 2>/dev/null || echo "0")
82
- else
83
- cost_per_cmd_with="N/A"
84
- cost_per_cmd_without="N/A"
85
- fi
86
-
87
- # Format numbers
88
- format_number() {
89
- local num=$1
90
- if [ "$num" = "0" ] || [ "$num" = "N/A" ]; then
91
- echo "$num"
92
- else
93
- echo "$num" | numfmt --to=si 2>/dev/null || echo "$num"
94
- fi
95
- }
96
-
97
- # Display report
98
- cat << EOF
99
- ${GREEN}💰 Economic Impact Report - $CURRENT_MONTH${NC}
100
- ════════════════════════════════════════════════════════════════
101
-
102
- ${BLUE}Tokens Consumed (via Claude API):${NC}
103
- Input tokens: $(format_number $ccusage_input)
104
- Output tokens: $(format_number $ccusage_output)
105
- Total tokens: $(format_number $ccusage_total)
106
- ${RED}Actual cost: \$$ccusage_cost${NC}
107
-
108
- ${BLUE}Tokens Saved by rtk:${NC}
109
- Commands executed: $rtk_commands
110
- Input avoided: $(format_number $rtk_input) tokens
111
- Output generated: $(format_number $rtk_output) tokens
112
- Total saved: $(format_number $rtk_saved) tokens (${rtk_pct}% reduction)
113
- ${GREEN}Cost avoided: ~\$$saved_cost${NC}
114
-
115
- ${BLUE}Economic Analysis:${NC}
116
- Cost without rtk: \$$total_without_rtk (estimated)
117
- Cost with rtk: \$$ccusage_cost (actual)
118
- ${GREEN}Net savings: \$$saved_cost ($savings_pct%)${NC}
119
- ROI: ${GREEN}Infinite${NC} (rtk is free)
120
-
121
- ${BLUE}Efficiency Metrics:${NC}
122
- Cost per command: \$$cost_per_cmd_without → \$$cost_per_cmd_with
123
- Tokens per command: $(echo "scale=0; $rtk_input / $rtk_commands" | bc 2>/dev/null || echo "N/A") → $(echo "scale=0; $rtk_output / $rtk_commands" | bc 2>/dev/null || echo "N/A")
124
-
125
- ${BLUE}12-Month Projection:${NC}
126
- Annual savings: ~\$$(echo "scale=2; $saved_cost * 12" | bc 2>/dev/null || echo "0")
127
- Commands needed: $(echo "$rtk_commands * 12" | bc 2>/dev/null || echo "0") (at current rate)
128
-
129
- ════════════════════════════════════════════════════════════════
130
-
131
- ${YELLOW}Note:${NC} Cost estimates use \$0.0001/token average. Actual pricing varies by model.
132
- See ccusage for precise model-specific costs.
133
-
134
- ${GREEN}Recommendation:${NC} Focus rtk usage on high-frequency commands (git, grep, ls)
135
- for maximum cost reduction.
136
-
137
- EOF