Skip to content
This repository was archived by the owner on Jul 30, 2026. It is now read-only.

feat(droid): attribute session usage to agent roles - #147

Merged
makoMakoGo merged 2 commits into
agent/cli-v5-contractfrom
feat/droid-agent-attribution
Jul 15, 2026
Merged

feat(droid): attribute session usage to agent roles#147
makoMakoGo merged 2 commits into
agent/cli-v5-contractfrom
feat/droid-agent-attribution

Conversation

@makoMakoGo

@makoMakoGo makoMakoGo commented Jul 15, 2026

Copy link
Copy Markdown
Owner

Summary

  • Attribute ordinary Droid Task sessions to Droid Explorer or Droid Worker.
  • Attribute Mission sessions to Droid Orchestrator, Droid Worker, or Droid Validator using Factory's persisted tags and Mission feature assignments.
  • Keep validator-spawned review and flow-check subagents under Droid Validator.
  • Track Task session headers and Mission Worker feature assignments in source cache fingerprints so those direct role inputs invalidate stale results.

Why

The Droid parser only read model, provider, timestamp, and token totals from *.settings.json. It never populated UnifiedMessage.agent, so Droid usage appeared in model totals but was absent from the Agents panel.

This change preserves each session's own tokenUsage accounting while projecting Factory's persisted role metadata into four stable Agent labels: Droid Explorer, Droid Worker, Droid Orchestrator, and Droid Validator.

Validation

  • cargo fmt --all -- --check
  • cargo test — 2293 passed, 5 ignored
  • cargo clippy --workspace --all-targets -- -D warnings
  • Real local Droid scan — 282 clean sources, 0 rejected/partial/failed sources, 153 Droid Worker instances, and 7 Droid Orchestrator instances

Branch relationship

This PR temporarily targets the head branch of #145 (agent/cli-v5-contract) so its diff contains only the Droid attribution commits. After #145 is squash-merged into personal/local-clients, rebase this branch onto the updated default branch and retarget the PR before merging.


Summary by cubic

Adds role attribution to Droid sessions so usage appears under clear agent labels in reports. Also removes Cursor and Trae, and makes CLI commands deterministic with clearer exits.

  • New Features

    • Attribute Droid Task sessions to Droid Explorer or Droid Worker; attribute Mission sessions to Droid Orchestrator, Droid Worker, or Droid Validator via persisted tags and feature assignments; workers require the built‑in mission-worker tag; validator-spawned review/flow-check subagents stay under Droid Validator.
    • Cache fingerprint includes role-bearing JSONL and features.json so Mission role changes invalidate stale results; Agents panel shows stable role labels.
    • Deterministic CLI: tokscale equals tokscale tui; reports are explicit subcommands (models, monthly, hourly, graph, time-metrics); --no-spinner is honored consistently; TUI returns exit 130 on Ctrl-C and restores the terminal.
  • Migration

    • Removed Cursor and Trae across discovery, parsers, credentials, assets, docs, and commands; retired parser ids remain to read older cache shards.
    • CLI breaking changes:
      • Replace tokscale --no-spinner --light with tokscale models --no-spinner; use tokscale tui --tab models to open the models tab.
      • Pricing: tokscale pricing lookup <model> [--source <catalog>] and tokscale pricing overrides --json.
    • Headless: only codex is supported; pass the child command after --; invalid TOKSCALE_NATIVE_TIMEOUT_MS fails early with exit 2.
    • TUI config: sessions_path removed; added no_refresh and optional home_dir; cache scope includes home_dir and schema bumped.

Written for commit 53eb07a. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • 新功能

    • 新增并统一 modelsmonthlyhourlyclientsgraphtuiheadless 等子命令及参数校验。
    • 本地 JSON 报告采用统一结构,包含数据、健康状态与处理耗时信息。
    • TUI 支持指定数据目录、关闭自动刷新,并在禁用标签页时明确提示错误。
    • 新增 Antigravity 与 Warp 集成功能。
  • 变更

    • 移除 Cursor 与 Trae 的客户端、同步及账户管理功能。
    • 定价查询命令更新为 pricing lookup,覆盖查询更新为 pricing overrides
    • 报告命令不再写入轻量缓存,改用 cache warm 预热 TUI 缓存。
  • 文档

    • 更新中英文命令示例、客户端列表、配置说明及 CLI 使用指南。

@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown

Walkthrough

本次变更重构了 v4 CLI 的解析、执行计划、错误与 TUI 退出流程,统一本地 JSON 报表信封,移除 Cursor/Trae 集成及旧凭据管理,并更新 Codex、Droid、缓存、客户端目录、测试和相关文档。

Changes

CLI 与报表执行

Layer / File(s) Summary
命令解析与执行计划
crates/tokscale-cli/src/cli.rs, crates/tokscale-cli/src/main.rs, crates/tokscale-cli/src/failure.rs
CLI 改为显式子命令和类型化 ExecutionPlan,统一处理迁移提示、参数校验、错误分类与退出码。
报表与缓存契约
crates/tokscale-cli/src/commands/*, crates/tokscale-cli/src/tui/cache.rs
本地 JSON 输出统一为 datahealthmetadata 信封;报告不再写入轻量缓存,cache warm 使用显式 home/client 作用域。
TUI 状态与作用域
crates/tokscale-cli/src/tui/app.rs, crates/tokscale-cli/src/tui/mod.rs, crates/tokscale-cli/src/tui/data/*
TUI 支持 home_dirno_refresh,禁用 tab 直接报错,按键处理返回类型化退出状态。

客户端与凭据边界

Layer / File(s) Summary
Cursor/Trae 移除
crates/tokscale-core/src/adapters/*, crates/tokscale-core/src/sessions/*, crates/tokscale-core/client-catalog.json
移除 Cursor/Trae 客户端身份、本地解析器、适配器注册、缓存扫描和相关账户管理路由。
Codex provider-owned usage
crates/tokscale-cli/src/commands/usage/*
Codex usage 改为读取 provider-owned auth.json,仅使用访问令牌和账户 ID,不再维护多账户凭据存储或刷新流程。
Droid agent 归因
crates/tokscale-core/src/sessions/droid.rs, crates/tokscale-core/src/adapters/file.rs
Droid session 根据 settings、transcript 和 mission features 解析 agent,并将依赖文件纳入缓存失效判断。

文档与验证

Layer / File(s) Summary
CLI 与配置文档
docs/cli.md, docs/configuration.md, docs/pricing.md, README.md, README.zh-cn.md
示例迁移到显式子命令,记录 JSON 信封、输出流、缓存、定价 source 和 headless 分隔规则。
架构决策记录
docs/adr/*
新增确定性 CLI、provider-owned credentials 和 Subscription Usage 边界,并更新客户端目录与本地产品边界说明。
集成回归测试
crates/tokscale-cli/tests/*, crates/tokscale-cli/src/main_tests.rs
测试覆盖新参数归属、错误退出码、JSON 信封、移除客户端拒绝、缓存作用域、benchmark 输出流和 PTY 下 TUI 退出。

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related issues

Possibly related PRs

Poem

小兔蹦过命令行,
子命令清楚又明亮;
缓存归位,信封成章,
Cursor Trae 挥手远航;
Droid 兔耳辨 agent,
一跳一跳跑得忙。

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 73.05% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 标题准确概括了本次 PR 的核心变更:将 Droid 会话用量归因到 agent 角色。
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/droid-agent-attribution

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codspeed-hq

codspeed-hq Bot commented Jul 15, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 27 untouched benchmarks


Comparing feat/droid-agent-attribution (53eb07a) with personal/local-clients (9eba780)

Open in CodSpeed

@makoMakoGo
makoMakoGo marked this pull request as ready for review July 15, 2026 12:39

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 7

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
crates/tokscale-cli/src/commands/clients.rs (1)

119-151: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

仅在选择 OpenCode 时探测其数据库。

all_clients 现在代表显式范围,但 discover_opencode_dbs 仍无条件执行。因此 tokscale clients --client codex 可能进行无关 I/O,并在 JSON health 中报告范围外的 OpenCode 故障。

建议修改
-    let opencode_auto_dbs = match discover_opencode_dbs(&opencode_data_root) {
-        Ok(paths) => paths,
-        Err(_) => {
-            health.record_unavailable_source(ClientId::OpenCode.as_str());
-            Vec::new()
-        }
-    };
+    let opencode_auto_dbs = if selected_clients.contains(&ClientId::OpenCode) {
+        match discover_opencode_dbs(&opencode_data_root) {
+            Ok(paths) => paths,
+            Err(_) => {
+                health.record_unavailable_source(ClientId::OpenCode.as_str());
+                Vec::new()
+            }
+        }
+    } else {
+        Vec::new()
+    };
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/tokscale-cli/src/commands/clients.rs` around lines 119 - 151, Update
the OpenCode discovery flow around all_clients and discover_opencode_dbs so it
only calls discover_opencode_dbs when ClientId::OpenCode is included in the
explicitly selected clients; otherwise use an empty database list without
recording OpenCode health failures. Preserve the existing discovery error
handling when OpenCode is selected.
🧹 Nitpick comments (4)
crates/tokscale-cli/src/tui/cache.rs (1)

1935-1944: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

不要在测试中硬编码 Unix 本地路径。

/tmp/other-tokscale-home 违反测试路径约束,也引入不必要的平台假设。请基于当前 TempDir 创建不同的 scope 值。

建议修改
 let other_home_scope = CacheReportScope::new(
-    Some("/tmp/other-tokscale-home".to_string()),
+    Some(
+        temp_dir
+            .path()
+            .join("other-home")
+            .to_string_lossy()
+            .into_owned(),
+    ),

As per coding guidelines, “Use temporary directories or fixtures instead of developer-local paths in tests.” <coding_guidelines>

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/tokscale-cli/src/tui/cache.rs` around lines 1935 - 1944, Update the
test around other_home_scope to derive its home path from the existing TempDir
rather than hardcoding "/tmp/other-tokscale-home". Use a distinct child path or
otherwise different scope value based on that temporary directory, preserving
the expected CacheResult::Miss assertion.

Source: Coding guidelines

crates/tokscale-cli/src/tui/ui/header.rs (1)

225-237: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

统一隔离测试文件系统与用户设置。 当前测试或读取开发者的真实配置,或依赖固定的本机风格绝对路径。

  • crates/tokscale-cli/src/tui/ui/header.rs#L225-L237: 注入测试 Settings 或临时 home。
  • crates/tokscale-cli/src/tui/app.rs#L2294-L2305: 改用现有 test_settings() fixture。
  • crates/tokscale-cli/src/tui/app.rs#L2344-L2355: 改用现有 test_settings() fixture。
  • crates/tokscale-cli/src/tui/app.rs#L2394-L2405: 改用现有 test_settings() fixture。
  • crates/tokscale-cli/src/tui/app.rs#L2435-L2446: 改用现有 test_settings() fixture。
  • crates/tokscale-cli/src/tui/app.rs#L3509-L3521: 改用现有 test_settings() fixture。
  • crates/tokscale-cli/src/commands/usage/codex.rs#L203-L225: 从 TempDir 构造 home 和 CODEX_HOME

As per coding guidelines, “Use temporary directories or fixtures instead of developer-local paths in tests.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/tokscale-cli/src/tui/ui/header.rs` around lines 225 - 237, Isolate all
affected tests from developer-local configuration and fixed paths: in
crates/tokscale-cli/src/tui/ui/header.rs lines 225-237, inject test Settings or
a temporary home; in crates/tokscale-cli/src/tui/app.rs lines 2294-2305,
2344-2355, 2394-2405, 2435-2446, and 3509-3521, reuse the existing
test_settings() fixture; and in crates/tokscale-cli/src/commands/usage/codex.rs
lines 203-225, construct the home and CODEX_HOME from a TempDir.

Source: Coding guidelines

crates/tokscale-cli/src/tui/data/mod.rs (1)

120-129: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

提取重复的 home_dir 解析逻辑。

这三处具有完全相同的逻辑(解析 home_dir 并决定 use_env_roots)。建议将其提取为 DataLoader 的辅助方法(例如 resolve_home(&self) -> Result<(String, bool)>),以减少代码重复。

  • crates/tokscale-cli/src/tui/data/mod.rs#L120-L129: 在 prepare 中复用提取出的 resolve_home 方法。
  • crates/tokscale-cli/src/tui/data/mod.rs#L196-L205: 在 execute_with_diagnostics 中复用。
  • crates/tokscale-cli/src/tui/data/mod.rs#L278-L287: 在测试的 load_with_pricing 中复用。
♻️ 提取辅助方法的重构建议

首先在 DataLoader 中添加辅助方法:

    fn resolve_home(&self) -> Result<(String, bool)> {
        match &self.home_dir {
            Some(home) => Ok((home.to_string_lossy().into_owned(), false)),
            None => Ok((
                dirs::home_dir()
                    .ok_or_else(|| anyhow::anyhow!("Could not find home directory"))?
                    .to_string_lossy()
                    .into_owned(),
                true,
            )),
        }
    }

随后在这三个地方替换为:

        let (home, use_env_roots) = self.resolve_home()?;

(注:对于测试模块中的 loader 变量,请使用 loader.resolve_home()?)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/tokscale-cli/src/tui/data/mod.rs` around lines 120 - 129, 提取重复的
home_dir 解析逻辑:在 DataLoader 中新增 resolve_home 方法,返回与现有逻辑一致的 (String, bool)
结果,并保留找不到 home 目录时的错误行为。更新 crates/tokscale-cli/src/tui/data/mod.rs#L120-L129 的
prepare、#L196-L205 的 execute_with_diagnostics,以及#L278-L287 的测试
load_with_pricing,分别复用 self.resolve_home()? 或 loader.resolve_home()?。
crates/tokscale-core/src/message_cache.rs (1)

255-283: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

补充退休解析器标签的持久化回归测试。 固定旧 Cursor/Trae 值仍解码为 RetiredCursor/RetiredTrae,并保持 stable_name()cursor/trae 映射,避免后续重排枚举时静默破坏现有缓存。

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/tokscale-core/src/message_cache.rs` around lines 255 - 283,
在消息缓存解析器标签相关测试中补充持久化回归测试:验证固定的旧 Cursor 和 Trae bincode 值仍分别解码为 RetiredCursor 与
RetiredTrae,并验证 stable_name() 对这两个退休标签仍返回 cursor 和
trae。测试应固定原始判别值,确保后续枚举重排不会改变现有缓存兼容性。

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@crates/tokscale-cli/src/cli.rs`:
- Around line 522-527: Remove the `token` command-line argument from the `Login`
command and obtain Warp credentials through a non-argv mechanism, such as
no-echo interactive input, stdin, a restricted-permission file, or a dedicated
environment variable. Preserve the existing `cookie` mode behavior while
ensuring bearer tokens and cookie header values are never exposed in shell
history or process listings.

In `@crates/tokscale-cli/src/commands/usage/codex.rs`:
- Around line 73-77: Update read_current_credentials to retain the first
parse/read error from parse_auth_file, continue checking all remaining
current_auth_paths and keychain sources, and return the first error only when no
valid credentials are found. Add a regression test covering a corrupted
preferred credential path followed by a valid fallback.

In `@crates/tokscale-cli/tests/cli_tests.rs`:
- Line 2468: Update the JSON assertions in the affected CLI tests to inspect the
`data` envelope rather than the root `json` object. Apply this to the
`totalReasoning`, `warnings`, and `diagnostics` checks, ensuring the assertions
fail when any prohibited field appears inside `data`.

In `@crates/tokscale-cli/tests/tui_exit_tests.rs`:
- Around line 128-130: Update the readiness wait in the TUI test so a
recv_timeout failure explicitly terminates and waits for the child process
before propagating the test failure. Ensure the associated reader thread is also
cleaned up on this failure path, while preserving the existing success behavior
after ready_rx receives a signal.

In `@crates/tokscale-core/src/adapters/file.rs`:
- Around line 35-40: 将 crates/tokscale-core/src/adapters/file.rs:35-40 的
CachedFileAdapter 依赖钩子改为返回路径集合;在 crates/tokscale-core/src/adapters/file.rs:61-74
更新构造器以接收多依赖回调,并在 crates/tokscale-core/src/adapters/file.rs:111-119
将所有依赖纳入扫描单元指纹。更新 crates/tokscale-core/src/sessions/droid.rs:346-358,使继承角色返回子
transcript、父 settings 和父 Mission features,并添加父 feature 变化使子代理缓存失效的回归测试。

In `@docs/adr/0015-local-only-product-surface.md`:
- Around line 7-8: Update the Decision section of ADR 0015, specifically the
requirement around lines 34–36, to remove the Cursor and Trae references or
explicitly mark that requirement as superseded by ADR 0024. Ensure the ADR no
longer conflicts with its statement that these integrations are unmaintained.

In `@docs/adr/0023-provider-owned-credentials.md`:
- Around line 42-52: Update the Cursor section in ADR 0023 to be historical
context only, removing the claim that local reports currently parse Cursor usage
CSV files or preserve related behavior. Replace the deprecated behavior details
with a concise reference to ADR 0024 as the authoritative record, while
retaining only necessary migration context.

---

Outside diff comments:
In `@crates/tokscale-cli/src/commands/clients.rs`:
- Around line 119-151: Update the OpenCode discovery flow around all_clients and
discover_opencode_dbs so it only calls discover_opencode_dbs when
ClientId::OpenCode is included in the explicitly selected clients; otherwise use
an empty database list without recording OpenCode health failures. Preserve the
existing discovery error handling when OpenCode is selected.

---

Nitpick comments:
In `@crates/tokscale-cli/src/tui/cache.rs`:
- Around line 1935-1944: Update the test around other_home_scope to derive its
home path from the existing TempDir rather than hardcoding
"/tmp/other-tokscale-home". Use a distinct child path or otherwise different
scope value based on that temporary directory, preserving the expected
CacheResult::Miss assertion.

In `@crates/tokscale-cli/src/tui/data/mod.rs`:
- Around line 120-129: 提取重复的 home_dir 解析逻辑:在 DataLoader 中新增 resolve_home
方法,返回与现有逻辑一致的 (String, bool) 结果,并保留找不到 home 目录时的错误行为。更新
crates/tokscale-cli/src/tui/data/mod.rs#L120-L129 的 prepare、#L196-L205 的
execute_with_diagnostics,以及#L278-L287 的测试 load_with_pricing,分别复用
self.resolve_home()? 或 loader.resolve_home()?。

In `@crates/tokscale-cli/src/tui/ui/header.rs`:
- Around line 225-237: Isolate all affected tests from developer-local
configuration and fixed paths: in crates/tokscale-cli/src/tui/ui/header.rs lines
225-237, inject test Settings or a temporary home; in
crates/tokscale-cli/src/tui/app.rs lines 2294-2305, 2344-2355, 2394-2405,
2435-2446, and 3509-3521, reuse the existing test_settings() fixture; and in
crates/tokscale-cli/src/commands/usage/codex.rs lines 203-225, construct the
home and CODEX_HOME from a TempDir.

In `@crates/tokscale-core/src/message_cache.rs`:
- Around line 255-283: 在消息缓存解析器标签相关测试中补充持久化回归测试:验证固定的旧 Cursor 和 Trae bincode
值仍分别解码为 RetiredCursor 与 RetiredTrae,并验证 stable_name() 对这两个退休标签仍返回 cursor 和
trae。测试应固定原始判别值,确保后续枚举重排不会改变现有缓存兼容性。
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 05035f84-9be0-431c-a959-576f8b0e19f9

📥 Commits

Reviewing files that changed from the base of the PR and between 9eba780 and 53eb07a.

⛔ Files ignored due to path filters (3)
  • .github/assets/client-cursor.jpg is excluded by !**/*.jpg
  • .github/assets/client-trae.png is excluded by !**/*.png
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (72)
  • AGENTS.md
  • Cargo.toml
  • README.md
  • README.zh-cn.md
  • crates/tokscale-cli/Cargo.toml
  • crates/tokscale-cli/src/cli.rs
  • crates/tokscale-cli/src/commands/cache.rs
  • crates/tokscale-cli/src/commands/clients.rs
  • crates/tokscale-cli/src/commands/graph.rs
  • crates/tokscale-cli/src/commands/headless.rs
  • crates/tokscale-cli/src/commands/hourly.rs
  • crates/tokscale-cli/src/commands/integrations.rs
  • crates/tokscale-cli/src/commands/models.rs
  • crates/tokscale-cli/src/commands/monthly.rs
  • crates/tokscale-cli/src/commands/pricing.rs
  • crates/tokscale-cli/src/commands/shared.rs
  • crates/tokscale-cli/src/commands/time_metrics.rs
  • crates/tokscale-cli/src/commands/usage/codex.rs
  • crates/tokscale-cli/src/commands/usage/mod.rs
  • crates/tokscale-cli/src/commands/wrapped.rs
  • crates/tokscale-cli/src/cursor.rs
  • crates/tokscale-cli/src/failure.rs
  • crates/tokscale-cli/src/main.rs
  • crates/tokscale-cli/src/main_tests.rs
  • crates/tokscale-cli/src/trae.rs
  • crates/tokscale-cli/src/tui/app.rs
  • crates/tokscale-cli/src/tui/cache.rs
  • crates/tokscale-cli/src/tui/colors.rs
  • crates/tokscale-cli/src/tui/data/mod.rs
  • crates/tokscale-cli/src/tui/mod.rs
  • crates/tokscale-cli/src/tui/settings.rs
  • crates/tokscale-cli/src/tui/ui/agents.rs
  • crates/tokscale-cli/src/tui/ui/daily.rs
  • crates/tokscale-cli/src/tui/ui/dialog/source_picker.rs
  • crates/tokscale-cli/src/tui/ui/footer.rs
  • crates/tokscale-cli/src/tui/ui/header.rs
  • crates/tokscale-cli/src/tui/ui/hourly.rs
  • crates/tokscale-cli/src/tui/ui/usage.rs
  • crates/tokscale-cli/src/tui/ui/widgets.rs
  • crates/tokscale-cli/tests/cli_tests.rs
  • crates/tokscale-cli/tests/copilot_memory.rs
  • crates/tokscale-cli/tests/tui_exit_tests.rs
  • crates/tokscale-core/client-catalog.json
  • crates/tokscale-core/src/adapters/file.rs
  • crates/tokscale-core/src/adapters/mod.rs
  • crates/tokscale-core/src/adapters/trae.rs
  • crates/tokscale-core/src/aggregate/tui.rs
  • crates/tokscale-core/src/clients.rs
  • crates/tokscale-core/src/lib.rs
  • crates/tokscale-core/src/lib_tests.rs
  • crates/tokscale-core/src/local_clients.rs
  • crates/tokscale-core/src/message_cache.rs
  • crates/tokscale-core/src/scanner.rs
  • crates/tokscale-core/src/sessionize.rs
  • crates/tokscale-core/src/sessions/cursor.rs
  • crates/tokscale-core/src/sessions/droid.rs
  • crates/tokscale-core/src/sessions/mod.rs
  • crates/tokscale-core/src/sessions/trae.rs
  • docs/adr/0007-client-identity-catalog.md
  • docs/adr/0014-explicit-subscription-usage-boundary.md
  • docs/adr/0015-local-only-product-surface.md
  • docs/adr/0018-bounded-source-fold-pipeline.md
  • docs/adr/0022-deterministic-cli-command-semantics.md
  • docs/adr/0023-provider-owned-credentials.md
  • docs/adr/0024-subscription-usage-redesign.md
  • docs/cli.md
  • docs/clients.md
  • docs/configuration.md
  • docs/development.md
  • docs/pricing.md
  • packages/cli/package.json
  • packages/tokscale/package.json
💤 Files with no reviewable changes (13)
  • packages/tokscale/package.json
  • crates/tokscale-cli/src/trae.rs
  • packages/cli/package.json
  • crates/tokscale-core/src/sessions/cursor.rs
  • crates/tokscale-core/src/sessions/mod.rs
  • crates/tokscale-core/client-catalog.json
  • crates/tokscale-core/src/adapters/trae.rs
  • crates/tokscale-core/src/sessions/trae.rs
  • Cargo.toml
  • crates/tokscale-cli/src/tui/ui/widgets.rs
  • crates/tokscale-cli/src/cursor.rs
  • crates/tokscale-cli/src/tui/colors.rs
  • crates/tokscale-core/src/local_clients.rs

Comment thread crates/tokscale-cli/src/cli.rs
Comment thread crates/tokscale-cli/src/commands/usage/codex.rs
Comment thread crates/tokscale-cli/tests/cli_tests.rs
Comment thread crates/tokscale-cli/tests/tui_exit_tests.rs
Comment thread crates/tokscale-core/src/adapters/file.rs
Comment thread docs/adr/0015-local-only-product-surface.md
Comment thread docs/adr/0023-provider-owned-credentials.md

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

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

All reported issues were addressed across 75 files

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread crates/tokscale-core/src/sessions/droid.rs
Comment thread crates/tokscale-cli/src/commands/pricing.rs
Comment thread crates/tokscale-cli/src/commands/wrapped.rs
Comment thread crates/tokscale-cli/src/tui/cache.rs
Comment thread crates/tokscale-cli/src/commands/usage/codex.rs
Comment thread crates/tokscale-cli/src/cli.rs
Comment thread crates/tokscale-cli/src/main_tests.rs
@makoMakoGo
makoMakoGo changed the base branch from personal/local-clients to agent/cli-v5-contract July 15, 2026 13:12
@makoMakoGo
makoMakoGo merged commit 6f0e387 into agent/cli-v5-contract Jul 15, 2026
11 checks passed
@makoMakoGo
makoMakoGo deleted the feat/droid-agent-attribution branch July 15, 2026 15:57
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant