Skip to content

feat(trae): add Trae client support - #555

Merged
junhoyeo merged 1 commit into
junhoyeo:mainfrom
itling:feature/trae-support
May 24, 2026
Merged

feat(trae): add Trae client support#555
junhoyeo merged 1 commit into
junhoyeo:mainfrom
itling:feature/trae-support

Conversation

@itling

@itling itling commented May 15, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds support for ByteDance's Trae IDE and Trae Solo (international editions). Both desktop clients share the same account-level usage data, so tokscale auto-discovers credentials from whichever is installed and reports them as a single trae client.

What's New

  • CLItokscale trae login | logout | status | sync (with --variant solo|ide and a --manual JWT fallback for headless environments).
  • Auth — decrypts the desktop client's iCubeAuthInfo blob from globalStorage/storage.json (faithful Rust port of byteCrypto.js: AES-128-CBC + SHA-512 integrity prefix). Cached credentials live at ~/.config/tokscale/trae-cache/credentials-{solo,ide}.json (0600 on Unix). Automatic refresh via ExchangeToken before expiry.
  • Sync — paginated POST /trae/api/v1/pay/query_user_usage_group_by_session, persisted under ~/.config/tokscale/trae-cache/sessions/*.json, with a manifest (de-dup by session_id) and a per-cache sync lock for crash-safety. Mirrors the Antigravity pattern.
  • Parsercrates/tokscale-core/src/sessions/trae.rs consumes the API dump directly; Trae reports dollar_float, so we don't go through the pricing lookup. Auto-mode sessions (model_name: "") are bucketed under trae-auto.
  • TUI / filters — Trae appears in the client list (hotkey y) and is selectable via --client trae.
  • DocsREADME.md and the three localized variants document the new client, the Windows path, and the command set.

Test Plan

  • cargo fmt --all --check clean
  • cargo clippy --workspace --all-features -- -D warnings clean
  • cargo test --workspace --all-features — 763 passed (675 core + 88 CLI), 0 failed
  • scripts/check-version-coherence.sh2.1.1 consistent across workspace
  • Parser unit tests cover: empty file, single session, zero-token skip, model normalization, auto-mode fallback, missing metadata fallback
  • Decryption tests cover: hardcoded password invariant, round-trip, Unicode, base64 round-trip, magic-mismatch, too-short blob, tampered ciphertext, misaligned ciphertext
  • Manual smoke test: tokscale trae login (auto), tokscale trae sync, tokscale --client trae reports the synced totals

Notes

  • China editions (trae.com.cn) are intentionally not included — the CN backend does not expose a session-level usage query endpoint. Will be added if/when an official endpoint appears upstream.
  • Trae IDE and Trae Solo share account-level usage data, so sync only runs once per invocation regardless of which variants have credentials.

Summary by cubic

Adds support for Trae IDE and Trae Solo as a new trae client. You can log in, sync account-level session usage from the official API, and see totals in the TUI and reports.

  • New Features

    • New trae client for Trae IDE and Trae Solo (international; CN not supported).
    • CLI: tokscale trae login|logout|status|sync with --variant solo|ide and --manual; select via --client trae (hidden legacy --trae flag kept).
    • Auth: decrypts desktop iCubeAuthInfo from Electron globalStorage/storage.json; caches credentials and auto-refreshes.
    • Sync: paginated session-usage API; stores under ~/.config/tokscale/trae-cache/ with a manifest, de-dup by session_id, and a per-cache sync lock.
    • Parser/UI: uses API dollar_float totals (no pricing lookup); auto-mode bucketed as trae-auto; shown in TUI (hotkey y).
    • Submission: excluded from default submit; opt in via --client trae.
  • Dependencies

    • Added aes, cbc, and base64 for credential decryption.

Written for commit d8479ac. Summary will update on new commits.

@vercel

vercel Bot commented May 15, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
tokscale Ignored Ignored Preview May 15, 2026 8:18am

Request Review

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 issues found across 16 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="crates/tokscale-core/src/sessions/trae.rs">

<violation number="1" location="crates/tokscale-core/src/sessions/trae.rs:64">
P2: Missing/invalid `session_id` and `usage_time` are silently defaulted, which can cause dedup collisions and invalid epoch-0 timestamps instead of rejecting bad records.</violation>
</file>

<file name="crates/tokscale-cli/src/trae.rs">

<violation number="1" location="crates/tokscale-cli/src/trae.rs:455">
P1: Manual JWT base64 padding is stripped by trim_end_matches('='), causing decode failures and immediate credential expiry</violation>

<violation number="2" location="crates/tokscale-cli/src/trae.rs:982">
P1: Stale lock file is not cleaned up after abnormal termination, permanently blocking subsequent syncs</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Comment thread crates/tokscale-cli/src/trae.rs Outdated
Comment thread crates/tokscale-cli/src/trae.rs Outdated
Comment thread crates/tokscale-core/src/sessions/trae.rs
@itling
itling force-pushed the feature/trae-support branch from 86d493b to d4ae3e1 Compare May 15, 2026 07:21
@itling

itling commented May 15, 2026

Copy link
Copy Markdown
Contributor Author

@cubic-dev-ai

@cubic-dev-ai

cubic-dev-ai Bot commented May 15, 2026

Copy link
Copy Markdown
Contributor

@cubic-dev-ai

@itling I have started the AI code review. It will take a few minutes to complete.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2 issues found across 16 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="crates/tokscale-cli/src/main.rs">

<violation number="1" location="crates/tokscale-cli/src/main.rs:4363">
P1: Invalid --variant values silently expand scope to all variants instead of returning an error</violation>
</file>

<file name="crates/tokscale-cli/src/trae.rs">

<violation number="1" location="crates/tokscale-cli/src/trae.rs:1221">
P2: Sync selection logic does not fail over to another variant when the first credentialed variant fails.</violation>
</file>

Tip: cubic can generate docs of your entire codebase and keep them up to date. Try it here.

Comment thread crates/tokscale-cli/src/main.rs Outdated
Comment thread crates/tokscale-cli/src/trae.rs Outdated
@itling
itling force-pushed the feature/trae-support branch from d4ae3e1 to ee25a89 Compare May 15, 2026 07:30
@itling

itling commented May 15, 2026

Copy link
Copy Markdown
Contributor Author

@cubic-dev-ai re-review please — the two findings on d4ae3e1 are addressed in ee25a89:

  • main.rs parse_variant_arg now returns Result<Option<TraeVariant>> and bails on unknown values; callers no longer fall through to all-variants on a typo (e.g. --variant slo).
  • trae.rs run_trae_sync iterates every credentialed variant, returning on first success and surfacing the last error only if all attempts fail.

@cubic-dev-ai

cubic-dev-ai Bot commented May 15, 2026

Copy link
Copy Markdown
Contributor

@cubic-dev-ai re-review please — the two findings on d4ae3e1 are addressed in ee25a89:

  • main.rs parse_variant_arg now returns Result<Option<TraeVariant>> and bails on unknown values; callers no longer fall through to all-variants on a typo (e.g. --variant slo).
  • trae.rs run_trae_sync iterates every credentialed variant, returning on first success and surfacing the last error only if all attempts fail.

@itling I have started the AI code review. It will take a few minutes to complete.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4 issues found across 16 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="crates/tokscale-cli/src/tui/data/mod.rs">

<violation number="1" location="crates/tokscale-cli/src/tui/data/mod.rs:1147">
P2: `test_client_all` was bumped to expect 24 clients but only asserts indices 0..=22, leaving the new client unverified. Companion mapping tests (`test_client_as_str`, `test_client_key`, `test_client_from_key`) also omit Trae assertions.</violation>
</file>

<file name="README.zh-cn.md">

<violation number="1" location="README.zh-cn.md:541">
P2: `TOKSCALE_CONFIG_DIR` documentation omits `trae-cache/` from the list of relocated directories, inconsistent with the updated cache layout section that groups `trae-cache/` with other client-specific caches under the config root.</violation>
</file>

<file name="crates/tokscale-cli/src/trae.rs">

<violation number="1" location="crates/tokscale-cli/src/trae.rs:263">
P2: Decrypted credentials returned without expiry/refresh check, causing avoidable first-run auth failures when stored access token is stale</violation>

<violation number="2" location="crates/tokscale-cli/src/trae.rs:1080">
P1: pid_is_alive always returns true on non-Unix, making stale lock recovery impossible on Windows</violation>
</file>

Tip: cubic can generate docs of your entire codebase and keep them up to date. Try it here.

Comment thread crates/tokscale-cli/src/trae.rs
Comment thread crates/tokscale-cli/src/tui/data/mod.rs
Comment thread README.zh-cn.md
Comment thread crates/tokscale-cli/src/trae.rs
@itling
itling force-pushed the feature/trae-support branch from ee25a89 to 90122a9 Compare May 15, 2026 07:43
@itling

itling commented May 15, 2026

Copy link
Copy Markdown
Contributor Author

@cubic-dev-ai re-review please — the four findings on ee25a89 are addressed in 90122a9:

  • tui/data/mod.rs: test_client_all / test_client_as_str / test_client_key / test_client_from_key now cover both Kiro and Trae.
  • All four READMEs: TOKSCALE_CONFIG_DIR description now lists trae-cache/ alongside antigravity-cache/.
  • trae.rs resolve_token: decrypted credentials now go through the same expiry → refresh path as the cache-hit branch, so stale tokens decrypted from storage.json no longer hit the API as-is.
  • trae.rs pid_is_alive: non-Unix now returns false (matching the Antigravity precedent), so a crashed previous run no longer permanently blocks subsequent syncs on Windows.

@cubic-dev-ai

cubic-dev-ai Bot commented May 15, 2026

Copy link
Copy Markdown
Contributor

@cubic-dev-ai re-review please — the four findings on ee25a89 are addressed in 90122a9:

  • tui/data/mod.rs: test_client_all / test_client_as_str / test_client_key / test_client_from_key now cover both Kiro and Trae.
  • All four READMEs: TOKSCALE_CONFIG_DIR description now lists trae-cache/ alongside antigravity-cache/.
  • trae.rs resolve_token: decrypted credentials now go through the same expiry → refresh path as the cache-hit branch, so stale tokens decrypted from storage.json no longer hit the API as-is.
    ...

@itling I have started the AI code review. It will take a few minutes to complete.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 16 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="crates/tokscale-core/src/sessions/trae.rs">

<violation number="1" location="crates/tokscale-core/src/sessions/trae.rs:75">
P2: Untrusted `usage_time` from JSON cache can overflow `i64` when multiplied by 1000, causing debug panics or release wraparound timestamps</violation>
</file>

Tip: cubic can generate docs of your entire codebase and keep them up to date. Try it here.

Comment thread crates/tokscale-core/src/sessions/trae.rs Outdated
@itling
itling force-pushed the feature/trae-support branch from 90122a9 to 1671a12 Compare May 15, 2026 07:47
@itling

itling commented May 15, 2026

Copy link
Copy Markdown
Contributor Author

@cubic-dev-ai re-review please — the usage_time overflow finding on 90122a9 is addressed in 1671a12:

  • sessions/trae.rs: usage_time * 1000 is now usage_time.checked_mul(1000)?, so a near-i64::MAX value from the JSON cache is dropped instead of panicking in debug or wrapping in release. Added a parser test that feeds i64::MAX and asserts the record is skipped.

@cubic-dev-ai

cubic-dev-ai Bot commented May 15, 2026

Copy link
Copy Markdown
Contributor

@cubic-dev-ai re-review please — the usage_time overflow finding on 90122a9 is addressed in 1671a12:

  • sessions/trae.rs: usage_time * 1000 is now usage_time.checked_mul(1000)?, so a near-i64::MAX value from the JSON cache is dropped instead of panicking in debug or wrapping in release. Added a parser test that feeds i64::MAX and asserts the record is skipped.

@itling I have started the AI code review. It will take a few minutes to complete.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2 issues found across 16 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="crates/tokscale-cli/src/trae.rs">

<violation number="1" location="crates/tokscale-cli/src/trae.rs:476">
P2: `get_token_and_host` uses `.unwrap()` on `load_credentials` despite returning `Result`, risking a panic if the credentials file is deleted, corrupted, or written non-atomically between `resolve_token` and the reload.</violation>
</file>

<file name="crates/tokscale-cli/src/main.rs">

<violation number="1" location="crates/tokscale-cli/src/main.rs:4486">
P2: `trae sync --since` accepts non-positive `i64` values without validation, forwarding invalid lookback windows to the sync layer where negative days produce a future timestamp and zero days produce an empty range.</violation>
</file>

Tip: cubic can generate docs of your entire codebase and keep them up to date. Try it here.

Comment thread crates/tokscale-cli/src/trae.rs
Comment thread crates/tokscale-cli/src/main.rs
@itling
itling force-pushed the feature/trae-support branch from 1671a12 to a4e2e48 Compare May 15, 2026 07:52
@itling

itling commented May 15, 2026

Copy link
Copy Markdown
Contributor Author

@cubic-dev-ai re-review please — the two findings on 1671a12 are addressed in a4e2e48:

  • trae.rs get_token_and_host: replaced load_credentials(variant).unwrap() with a default-host fallback, so a concurrent logout / partial write / corrupted JSON cannot panic the sync.
  • main.rs Trae Sync: rejects --since values <= 0 at the CLI boundary instead of forwarding them to the sync layer (negative → future start_time, zero → empty range).

@cubic-dev-ai

cubic-dev-ai Bot commented May 15, 2026

Copy link
Copy Markdown
Contributor

@cubic-dev-ai re-review please — the two findings on 1671a12 are addressed in a4e2e48:

  • trae.rs get_token_and_host: replaced load_credentials(variant).unwrap() with a default-host fallback, so a concurrent logout / partial write / corrupted JSON cannot panic the sync.
  • main.rs Trae Sync: rejects --since values <= 0 at the CLI boundary instead of forwarding them to the sync layer (negative → future start_time, zero → empty range).

@itling I have started the AI code review. It will take a few minutes to complete.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2 issues found across 16 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="crates/tokscale-cli/src/trae.rs">

<violation number="1" location="crates/tokscale-cli/src/trae.rs:1040">
P2: Pagination can silently truncate data when API omits `total` due to `unwrap_or(0)`</violation>
</file>

<file name="README.ko.md">

<violation number="1" location="README.ko.md:945">
P2: Trae cache path documentation hardcodes inconsistent paths rather than using config-root-relative locations</violation>
</file>

Tip: cubic can generate docs of your entire codebase and keep them up to date. Try it here.

Comment thread crates/tokscale-cli/src/trae.rs Outdated
Comment thread README.ko.md Outdated
@itling
itling force-pushed the feature/trae-support branch from a4e2e48 to 465c66c Compare May 15, 2026 08:07
@itling

itling commented May 15, 2026

Copy link
Copy Markdown
Contributor Author

@cubic-dev-ai re-review please

@cubic-dev-ai

cubic-dev-ai Bot commented May 15, 2026

Copy link
Copy Markdown
Contributor

@cubic-dev-ai re-review please

@itling I have started the AI code review. It will take a few minutes to complete.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2 issues found across 16 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="README.md">

<violation number="1" location="README.md:525">
P2: Trae documentation hardcodes `~/.config/tokscale/trae-cache/` as the definitive cache path, but the Rust code resolves it via `get_config_dir().join("trae-cache")` which honors `TOKSCALE_CONFIG_DIR`, `XDG_CONFIG_HOME`, and platform defaults. The Windows path in the Session Data Locations table (`%USERPROFILE%\.config\tokscale\trae-cache\`) is factually incorrect: on Windows `get_config_dir()` uses `dirs::config_dir()` (`%APPDATA%\tokscale`), not `%USERPROFILE%\.config\tokscale`. Docs should describe the default alongside the override behavior.</violation>
</file>

<file name="crates/tokscale-cli/src/trae.rs">

<violation number="1" location="crates/tokscale-cli/src/trae.rs:316">
P2: Error message uses `variant.client_str()` for `--variant` flag instead of `variant.cli_arg()`, producing invalid CLI guidance like `--variant trae-solo` instead of `--variant solo`</violation>
</file>

Tip: cubic can generate docs of your entire codebase and keep them up to date. Try it here.

Comment thread README.md
tokscale trae logout --variant solo
```

**Cache location**: `~/.config/tokscale/trae-cache/`

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Trae documentation hardcodes ~/.config/tokscale/trae-cache/ as the definitive cache path, but the Rust code resolves it via get_config_dir().join("trae-cache") which honors TOKSCALE_CONFIG_DIR, XDG_CONFIG_HOME, and platform defaults. The Windows path in the Session Data Locations table (%USERPROFILE%\.config\tokscale\trae-cache\) is factually incorrect: on Windows get_config_dir() uses dirs::config_dir() (%APPDATA%\tokscale), not %USERPROFILE%\.config\tokscale. Docs should describe the default alongside the override behavior.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At README.md, line 525:

<comment>Trae documentation hardcodes `~/.config/tokscale/trae-cache/` as the definitive cache path, but the Rust code resolves it via `get_config_dir().join("trae-cache")` which honors `TOKSCALE_CONFIG_DIR`, `XDG_CONFIG_HOME`, and platform defaults. The Windows path in the Session Data Locations table (`%USERPROFILE%\.config\tokscale\trae-cache\`) is factually incorrect: on Windows `get_config_dir()` uses `dirs::config_dir()` (`%APPDATA%\tokscale`), not `%USERPROFILE%\.config\tokscale`. Docs should describe the default alongside the override behavior.</comment>

<file context>
@@ -489,6 +491,43 @@ tokscale antigravity purge-cache
+tokscale trae logout --variant solo
+```
+
+**Cache location**: `~/.config/tokscale/trae-cache/`
+
+**How it works**: tokscale either decrypts the desktop client's `iCubeAuthInfo://*` blob (`globalStorage/storage.json`) to recover a JWT, or accepts one pasted via `--manual`. It then calls `POST /trae/api/v1/pay/query_user_usage_group_by_session` paginated and stores the raw JSON. Run sync before reports if you want the freshest Trae data.
</file context>
Suggested change
**Cache location**: `~/.config/tokscale/trae-cache/`
**Cache location**: `<config_dir>/trae-cache/` (default `~/.config/tokscale/trae-cache/` on Linux/macOS and `%APPDATA%\tokscale\trae-cache\` on Windows; overridden by `TOKSCALE_CONFIG_DIR` or `XDG_CONFIG_HOME`).

// 4. Everything failed.
Err(anyhow::anyhow!(
"Could not obtain a Trae {} access token. Run `tokscale trae login --manual --variant {}` to paste a JWT manually.",
variant.client_str(),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Error message uses variant.client_str() for --variant flag instead of variant.cli_arg(), producing invalid CLI guidance like --variant trae-solo instead of --variant solo

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At crates/tokscale-cli/src/trae.rs, line 316:

<comment>Error message uses `variant.client_str()` for `--variant` flag instead of `variant.cli_arg()`, producing invalid CLI guidance like `--variant trae-solo` instead of `--variant solo`</comment>

<file context>
@@ -0,0 +1,1398 @@
+        // 4. Everything failed.
+        Err(anyhow::anyhow!(
+        "Could not obtain a Trae {} access token. Run `tokscale trae login --manual --variant {}` to paste a JWT manually.",
+        variant.client_str(),
+        variant.client_str()
+    ))
</file context>

Add support for ByteDance's Trae IDE and Trae Solo (international editions). Both desktop clients share the same account-level usage data; tokscale auto-discovers credentials from whichever is installed and reports them as a single `trae` client.

- `tokscale trae login/logout/status/sync` CLI subcommand with `--variant solo|ide`
- Auth: decrypts `iCubeAuthInfo` from the desktop client's `globalStorage/storage.json` (AES-128-CBC port of `byteCrypto.js`) with a `--manual` JWT fallback for headless environments
- Sync: paginated POST against `query_user_usage_group_by_session`, persisted under `~/.config/tokscale/trae-cache/` with a manifest + sync lock for crash-safety
- Parser uses Trae's reported `dollar_float`, so pricing lookup is skipped; auto-mode sessions bucket under `trae-auto`
- Per `--client/-c`-only convention, only a hidden legacy `--trae` flag is added; the user-facing surface is `--client trae`
- README + localized variants document the new client, command set, and Windows path

China editions (`trae.com.cn`) are intentionally not supported — the CN backend does not expose a session-level usage query endpoint.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@itling
itling force-pushed the feature/trae-support branch from 465c66c to d8479ac Compare May 15, 2026 08:18
@itling

itling commented May 15, 2026

Copy link
Copy Markdown
Contributor Author

@cubic-dev-ai re-review please

@cubic-dev-ai

cubic-dev-ai Bot commented May 15, 2026

Copy link
Copy Markdown
Contributor

@cubic-dev-ai re-review please

@itling I have started the AI code review. It will take a few minutes to complete.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No issues found across 16 files

Tip: cubic can generate docs of your entire codebase and keep them up to date. Try it here.

@junhoyeo junhoyeo left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM — auth model is sound and well-tested, opt-in client. Follow-up: README note that Trae cost figures are vendor-reported, not tokscale-priced.

@junhoyeo
junhoyeo merged commit b300ea6 into junhoyeo:main May 24, 2026
5 checks passed
@junhoyeo

Copy link
Copy Markdown
Owner

@itling this has been merged to v3.0.0: https://github.com/junhoyeo/tokscale/releases/tag/v3.0.0 thanks for the contribution!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants