From bc3d7cfc6cc012ccaf1ce9f3deacc08a0df0fc80 Mon Sep 17 00:00:00 2001
From: Javis <81982673+Javis603@users.noreply.github.com>
Date: Sat, 27 Jun 2026 21:16:21 +0800
Subject: [PATCH 1/2] fix(micode): scan ~/.local/share/mimocode, not micode
---
README.ja.md | 6 +++---
README.ko.md | 6 +++---
README.md | 6 +++---
README.zh-cn.md | 6 +++---
crates/tokscale-core/src/clients.rs | 2 +-
crates/tokscale-core/src/lib.rs | 2 +-
crates/tokscale-core/src/scanner.rs | 4 ++--
crates/tokscale-core/src/sessions/micode.rs | 2 +-
8 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/README.ja.md b/README.ja.md
index a37bdce70..d25ee6852 100644
--- a/README.ja.md
+++ b/README.ja.md
@@ -85,7 +85,7 @@
|
| [Cline](https://github.com/cline/cline) | VS Code globalStorage のタスクディレクトリ(Linux: `~/.config/Code/...`; macOS: `~/Library/Application Support/Code/...`; Windows: `%APPDATA%\Code\...`; サーバー: `~/.vscode-server/data/User/globalStorage/saoudrizwan.claude-dev/tasks/`) | ✅ 対応 |
|
| [gajae-code (gjc)](https://github.com/Yeachan-Heo/gajae-code) | `~/.gjc/agent/sessions/`(`GJC_CODING_AGENT_DIR`、`GJC_CONFIG_DIR`、`PI_CONFIG_DIR` でオーバーライド可能;Linux/macOS では `$XDG_DATA_HOME/gjc/sessions/` も解決) | ✅ 対応 |
|
| [Jcode](https://github.com/1jehuang/jcode) | `~/.jcode/sessions/session_*.json` + `session_*.journal.jsonl` サイドカー(`JCODE_HOME` で上書き可) | ✅ 対応 |
-|
| [MiMo Code](https://github.com/XiaomiMiMo/MiMo-Code) | `~/.local/share/micode/mimocode.db`(XDG データディレクトリ;SQLite) | ✅ 対応 |
+|
| [MiMo Code](https://github.com/XiaomiMiMo/MiMo-Code) | `~/.local/share/mimocode/mimocode.db`(XDG データディレクトリ;SQLite) | ✅ 対応 |
|
| [Junie](https://www.jetbrains.com/junie/) | `~/.junie/sessions/*/events.jsonl` | ✅ 対応 |
|
| [Command Code](https://github.com/CommandCodeAI/command-code) | `~/.commandcode/projects/**/*.jsonl`(トークン使用量はトランスクリプトから約4文字/トークンで推定;ディスクには永続化されない) | ✅ 対応 |
|
| [ZCode](https://zcode.z.ai/) | `~/.zcode/projects/**/*.jsonl` | ✅ 対応 |
@@ -1289,7 +1289,7 @@ AIコーディングツールはクロスプラットフォームの場所にセ
| Warp/Oz | `~/.config/tokscale/warp-cache/usage.json` | `%APPDATA%\tokscale\warp-cache\usage.json` | `tokscale warp sync` で同期;集計リクエスト数と使用金額のみ、トークントランスクリプトは含まない |
| Grok Build | `~/.grok/sessions/` | `%USERPROFILE%\.grok\sessions\` | `GROK_HOME` 環境変数で設定可能。`updates.jsonl` セッション更新を解析 |
| Jcode | `~/.jcode/sessions/` | `%USERPROFILE%\.jcode\sessions\` | `JCODE_HOME` 環境変数で設定可能。`session_*.json` スナップショットと `session_*.journal.jsonl` サイドカーを解析 |
-| MiMo Code | `~/.local/share/micode/` | `%USERPROFILE%\.local\share\micode\` | XDG データディレクトリを使用;SQLite データベース `mimocode.db` |
+| MiMo Code | `~/.local/share/mimocode/` | `%USERPROFILE%\.local\share\mimocode\` | XDG データディレクトリを使用;SQLite データベース `mimocode.db` |
| Gajae-Code | `~/.gjc/agent/sessions/` | `%USERPROFILE%\.gjc\agent\sessions\` | `GJC_CODING_AGENT_DIR` で設定可能(`GJC_CONFIG_DIR`/`PI_CONFIG_DIR` も解決;Linux/macOS では `$XDG_DATA_HOME/gjc/sessions/` も対応) |
| Junie | `~/.junie/sessions/` | `%USERPROFILE%\.junie\sessions\` | すべてのプラットフォームで同じホーム相対パス;`events.jsonl` 使用イベントを解析 |
| ZCode | `~/.zcode/projects/` | `%USERPROFILE%\.zcode\projects\` | `*.jsonl` セッショントランスクリプトを解析;Z.ai の GLM モデル向け ADE |
@@ -1666,7 +1666,7 @@ Synthetic は他ソースのメッセージを後処理で再帰属します。`
### MiMo Code
-場所: `~/.local/share/micode/mimocode.db`(XDG データディレクトリ)
+場所: `~/.local/share/mimocode/mimocode.db`(XDG データディレクトリ)
MiMo Code は SQLite データベースにセッションデータを保存します。Tokscale はワークスペースコンテキストのために `session` テーブルと結合した `message` テーブルをクエリします:
diff --git a/README.ko.md b/README.ko.md
index 131bcc3c7..13dcc6147 100644
--- a/README.ko.md
+++ b/README.ko.md
@@ -85,7 +85,7 @@
|
| Kiro | `~/.kiro/sessions/cli/*.json` (+ `*.jsonl`), `~/.local/share/kiro-cli/data.sqlite3` (macOS: `~/Library/Application Support/kiro-cli/data.sqlite3`), 그리고 Kiro IDE globalStorage 스냅샷 (`Kiro/User/globalStorage/kiro.kiroagent`; macOS Application Support, Linux `~/.config/Kiro`, Windows `%APPDATA%\Kiro`) | ✅ 지원 |
|
| [gajae-code (gjc)](https://github.com/Yeachan-Heo/gajae-code) | `~/.gjc/agent/sessions/` (`GJC_CODING_AGENT_DIR`, `GJC_CONFIG_DIR`, `PI_CONFIG_DIR`로 오버라이드 가능; Linux/macOS에서는 `$XDG_DATA_HOME/gjc/sessions/`도 확인) | ✅ 지원 |
|
| [Jcode](https://github.com/1jehuang/jcode) | `~/.jcode/sessions/session_*.json` + `session_*.journal.jsonl` 사이드카 (`JCODE_HOME`으로 재정의 가능) | ✅ 지원 |
-|
| [MiMo Code](https://github.com/XiaomiMiMo/MiMo-Code) | `~/.local/share/micode/mimocode.db` (XDG 데이터 디렉토리; SQLite) | ✅ 지원 |
+|
| [MiMo Code](https://github.com/XiaomiMiMo/MiMo-Code) | `~/.local/share/mimocode/mimocode.db` (XDG 데이터 디렉토리; SQLite) | ✅ 지원 |
|
| [Junie](https://www.jetbrains.com/junie/) | `~/.junie/sessions/*/events.jsonl` | ✅ 지원 |
|
| [Command Code](https://github.com/CommandCodeAI/command-code) | `~/.commandcode/projects/**/*.jsonl` (토큰 사용량은 트랜스크립트에서 토큰당 약 4자 기준으로 추정; 디스크에 저장되지 않음) | ✅ 지원 |
|
| [ZCode](https://zcode.z.ai/) | `~/.zcode/projects/**/*.jsonl` | ✅ 지원 |
@@ -1295,7 +1295,7 @@ AI 코딩 도구들은 크로스 플랫폼 위치에 세션 데이터를 저장
| Warp/Oz | `~/.config/tokscale/warp-cache/usage.json` | `%APPDATA%\tokscale\warp-cache\usage.json` | `tokscale warp sync`로 동기화; 집계된 요청 수와 비용만, 토큰 트랜스크립트 없음 |
| Grok Build | `~/.grok/sessions/` | `%USERPROFILE%\.grok\sessions\` | `GROK_HOME` 환경변수로 설정 가능; `updates.jsonl` 세션 업데이트 파싱 |
| Jcode | `~/.jcode/sessions/` | `%USERPROFILE%\.jcode\sessions\` | `JCODE_HOME` 환경변수로 설정 가능; `session_*.json` 스냅샷과 `session_*.journal.jsonl` 사이드카 파싱 |
-| MiMo Code | `~/.local/share/micode/` | `%USERPROFILE%\.local\share\micode\` | XDG 데이터 디렉토리 사용; SQLite 데이터베이스 `mimocode.db` |
+| MiMo Code | `~/.local/share/mimocode/` | `%USERPROFILE%\.local\share\mimocode\` | XDG 데이터 디렉토리 사용; SQLite 데이터베이스 `mimocode.db` |
| Gajae-Code | `~/.gjc/agent/sessions/` | `%USERPROFILE%\.gjc\agent\sessions\` | `GJC_CODING_AGENT_DIR`로 설정 가능 (`GJC_CONFIG_DIR`/`PI_CONFIG_DIR`도 지원; Linux/macOS에서는 `$XDG_DATA_HOME/gjc/sessions/`도 확인) |
| Junie | `~/.junie/sessions/` | `%USERPROFILE%\.junie\sessions\` | 모든 플랫폼에서 동일한 home 상대 경로 사용; `events.jsonl` 사용 이벤트 파싱 |
| ZCode | `~/.zcode/projects/` | `%USERPROFILE%\.zcode\projects\` | `*.jsonl` 세션 트랜스크립트 파싱; Z.ai의 GLM 모델용 ADE |
@@ -1697,7 +1697,7 @@ Synthetic은 기존 에이전트 세션을 후처리하여 재귀속합니다. `
### MiMo Code
-위치: `~/.local/share/micode/mimocode.db` (XDG 데이터 디렉토리)
+위치: `~/.local/share/mimocode/mimocode.db` (XDG 데이터 디렉토리)
MiMo Code는 SQLite 데이터베이스에 세션 데이터를 저장합니다. Tokscale은 워크스페이스 컨텍스트를 위해 `session` 테이블과 조인된 `message` 테이블을 쿼리합니다:
diff --git a/README.md b/README.md
index c4556d40d..67b4b372e 100644
--- a/README.md
+++ b/README.md
@@ -86,7 +86,7 @@
|
| [Cline](https://github.com/cline/cline) | VS Code globalStorage tasks (Linux: `~/.config/Code/...`; macOS: `~/Library/Application Support/Code/...`; Windows: `%APPDATA%\Code\...`; server: `~/.vscode-server/data/User/globalStorage/saoudrizwan.claude-dev/tasks/`) | ✅ Yes |
|
| [gajae-code (gjc)](https://github.com/Yeachan-Heo/gajae-code) | `~/.gjc/agent/sessions/` (override via `GJC_CODING_AGENT_DIR`, `GJC_CONFIG_DIR`, `PI_CONFIG_DIR`; `$XDG_DATA_HOME/gjc/sessions/` on Linux/macOS) | ✅ Yes |
|
| [Jcode](https://github.com/1jehuang/jcode) | `~/.jcode/sessions/session_*.json` + `session_*.journal.jsonl` sidecars (override via `JCODE_HOME`) | ✅ Yes |
-|
| [MiMo Code](https://github.com/XiaomiMiMo/MiMo-Code) | `~/.local/share/micode/mimocode.db` (XDG data dir; SQLite) | ✅ Yes |
+|
| [MiMo Code](https://github.com/XiaomiMiMo/MiMo-Code) | `~/.local/share/mimocode/mimocode.db` (XDG data dir; SQLite) | ✅ Yes |
|
| [Junie](https://www.jetbrains.com/junie/) | `~/.junie/sessions/*/events.jsonl` | ✅ Yes |
|
| [Command Code](https://github.com/CommandCodeAI/command-code) | `~/.commandcode/projects/**/*.jsonl` (token usage estimated from transcripts at ~4 chars/token; not persisted on disk) | ✅ Yes |
|
| [ZCode](https://zcode.z.ai/) | `~/.zcode/projects/**/*.jsonl` | ✅ Yes |
@@ -1300,7 +1300,7 @@ AI coding tools store their session data in cross-platform locations. Most tools
| Warp/Oz | `~/.config/tokscale/warp-cache/usage.json` | `%APPDATA%\tokscale\warp-cache\usage.json` | Synced via `tokscale warp sync`; aggregate requests and spend only, no token transcripts |
| Grok Build | `~/.grok/sessions/` | `%USERPROFILE%\.grok\sessions\` | Configurable via `GROK_HOME` env var; parses `updates.jsonl` session updates |
| Jcode | `~/.jcode/sessions/` | `%USERPROFILE%\.jcode\sessions\` | Configurable via `JCODE_HOME` env var; parses `session_*.json` snapshots plus `session_*.journal.jsonl` sidecars |
-| MiMo Code | `~/.local/share/micode/` | `%USERPROFILE%\.local\share\micode\` | Uses XDG data directory; SQLite database `mimocode.db` |
+| MiMo Code | `~/.local/share/mimocode/` | `%USERPROFILE%\.local\share\mimocode\` | Uses XDG data directory; SQLite database `mimocode.db` |
| Gajae-Code | `~/.gjc/agent/sessions/` | `%USERPROFILE%\.gjc\agent\sessions\` | Configurable via `GJC_CODING_AGENT_DIR` (also `GJC_CONFIG_DIR`/`PI_CONFIG_DIR`; `$XDG_DATA_HOME/gjc/sessions/` flattens on Linux/macOS) |
| Junie | `~/.junie/sessions/` | `%USERPROFILE%\.junie\sessions\` | Same home-relative path on all platforms; parses `events.jsonl` usage events |
| ZCode | `~/.zcode/projects/` | `%USERPROFILE%\.zcode\projects\` | Parses `*.jsonl` session transcripts; Z.ai's ADE for GLM models |
@@ -1721,7 +1721,7 @@ Tokscale also checks Octofriend SQLite at `~/.local/share/octofriend/sqlite.db`
### MiMo Code
-Location: `~/.local/share/micode/mimocode.db` (XDG data directory)
+Location: `~/.local/share/mimocode/mimocode.db` (XDG data directory)
MiMo Code stores session data in a SQLite database. Tokscale queries the `message` table joined with `session` for workspace context:
diff --git a/README.zh-cn.md b/README.zh-cn.md
index db22d4ffb..89ef602af 100644
--- a/README.zh-cn.md
+++ b/README.zh-cn.md
@@ -86,7 +86,7 @@
|
| [Cline](https://github.com/cline/cline) | VS Code globalStorage 任务(Linux: `~/.config/Code/...`;macOS: `~/Library/Application Support/Code/...`;Windows: `%APPDATA%\Code\...`;server: `~/.vscode-server/data/User/globalStorage/saoudrizwan.claude-dev/tasks/`) | ✅ 支持 |
|
| [gajae-code (gjc)](https://github.com/Yeachan-Heo/gajae-code) | `~/.gjc/agent/sessions/`(可通过 `GJC_CODING_AGENT_DIR`、`GJC_CONFIG_DIR`、`PI_CONFIG_DIR` 覆盖;Linux/macOS 上 `$XDG_DATA_HOME/gjc/sessions/` 亦支持) | ✅ 支持 |
|
| [Jcode](https://github.com/1jehuang/jcode) | `~/.jcode/sessions/session_*.json` + `session_*.journal.jsonl` sidecar(可通过 `JCODE_HOME` 覆盖) | ✅ 支持 |
-|
| [MiMo Code](https://github.com/XiaomiMiMo/MiMo-Code) | `~/.local/share/micode/mimocode.db`(XDG 数据目录;SQLite) | ✅ 支持 |
+|
| [MiMo Code](https://github.com/XiaomiMiMo/MiMo-Code) | `~/.local/share/mimocode/mimocode.db`(XDG 数据目录;SQLite) | ✅ 支持 |
|
| [Junie](https://www.jetbrains.com/junie/) | `~/.junie/sessions/*/events.jsonl` | ✅ 支持 |
|
| [Command Code](https://github.com/CommandCodeAI/command-code) | `~/.commandcode/projects/**/*.jsonl`(Token 使用量按 ~4 字符/Token 从转录估算;不会持久化到磁盘) | ✅ 支持 |
|
| [ZCode](https://zcode.z.ai/) | `~/.zcode/projects/**/*.jsonl` | ✅ 支持 |
@@ -1287,7 +1287,7 @@ AI 编程工具将会话数据存储在跨平台位置。大多数工具在所
| Warp/Oz | `~/.config/tokscale/warp-cache/usage.json` | `%APPDATA%\tokscale\warp-cache\usage.json` | 通过 `tokscale warp sync` 同步;仅汇总请求数和消费金额,不含 token 转录 |
| Grok Build | `~/.grok/sessions/` | `%USERPROFILE%\.grok\sessions\` | 可通过 `GROK_HOME` 环境变量配置;解析 `updates.jsonl` 会话更新 |
| Jcode | `~/.jcode/sessions/` | `%USERPROFILE%\.jcode\sessions\` | 可通过 `JCODE_HOME` 环境变量配置;解析 `session_*.json` 快照以及 `session_*.journal.jsonl` sidecar |
-| MiMo Code | `~/.local/share/micode/` | `%USERPROFILE%\.local\share\micode\` | 使用 XDG 数据目录;SQLite 数据库 `mimocode.db` |
+| MiMo Code | `~/.local/share/mimocode/` | `%USERPROFILE%\.local\share\mimocode\` | 使用 XDG 数据目录;SQLite 数据库 `mimocode.db` |
| Gajae-Code | `~/.gjc/agent/sessions/` | `%USERPROFILE%\.gjc\agent\sessions\` | 可通过 `GJC_CODING_AGENT_DIR`(也可用 `GJC_CONFIG_DIR`/`PI_CONFIG_DIR`;Linux/macOS 上 `$XDG_DATA_HOME/gjc/sessions/` 亦支持)配置 |
| Junie | `~/.junie/sessions/` | `%USERPROFILE%\.junie\sessions\` | 所有平台使用相同的 home 相对路径;解析 `events.jsonl` 使用事件 |
| ZCode | `~/.zcode/projects/` | `%USERPROFILE%\.zcode\projects\` | 解析 `*.jsonl` 会话记录;Z.ai 的 GLM 模型专用 ADE |
@@ -1694,7 +1694,7 @@ Tokscale 还会检测 `~/.local/share/octofriend/sqlite.db`,并在可用时解
### MiMo Code
-位置:`~/.local/share/micode/mimocode.db`(XDG 数据目录)
+位置:`~/.local/share/mimocode/mimocode.db`(XDG 数据目录)
MiMo Code 将会话数据存储在 SQLite 数据库中。Tokscale 查询 `message` 表并关联 `session` 表获取工作区上下文:
diff --git a/crates/tokscale-core/src/clients.rs b/crates/tokscale-core/src/clients.rs
index 4301a9f2c..5b63432ab 100644
--- a/crates/tokscale-core/src/clients.rs
+++ b/crates/tokscale-core/src/clients.rs
@@ -463,7 +463,7 @@ define_clients!(
MiMoCode = 30 => {
id: "micode",
root: PathRoot::XdgData,
- relative: "micode",
+ relative: "mimocode",
pattern: "*.db",
headless: false,
parse_local: true,
diff --git a/crates/tokscale-core/src/lib.rs b/crates/tokscale-core/src/lib.rs
index 8480b5a3c..5afd714b3 100644
--- a/crates/tokscale-core/src/lib.rs
+++ b/crates/tokscale-core/src/lib.rs
@@ -3868,7 +3868,7 @@ mod tests {
std::env::set_var("HOME", cache_home.path());
{
- let micode_dir = source_home.path().join(".local/share/micode");
+ let micode_dir = source_home.path().join(".local/share/mimocode");
std::fs::create_dir_all(&micode_dir).unwrap();
let db_path = micode_dir.join("mimocode.db");
diff --git a/crates/tokscale-core/src/scanner.rs b/crates/tokscale-core/src/scanner.rs
index 3aa72f6ed..df17a83c0 100644
--- a/crates/tokscale-core/src/scanner.rs
+++ b/crates/tokscale-core/src/scanner.rs
@@ -915,14 +915,14 @@ fn scan_all_clients_with_env_strategy_inner(
);
}
- // MiMo Code: SQLite database(s) at ~/.local/share/micode/mimocode*.db
+ // MiMo Code: SQLite database(s) at ~/.local/share/mimocode/mimocode*.db
if enabled.contains(&ClientId::MiMoCode) {
let micode_xdg_data = if use_env_roots {
std::env::var("XDG_DATA_HOME").unwrap_or_else(|_| format!("{}/.local/share", home_dir))
} else {
format!("{}/.local/share", home_dir)
};
- let micode_data_dir = PathBuf::from(format!("{}/micode", micode_xdg_data));
+ let micode_data_dir = PathBuf::from(format!("{}/mimocode", micode_xdg_data));
// `discover_micode_dbs` already returns a sorted list.
result.micode_dbs = discover_micode_dbs(&micode_data_dir);
}
diff --git a/crates/tokscale-core/src/sessions/micode.rs b/crates/tokscale-core/src/sessions/micode.rs
index 535b3bb22..b1dd20242 100644
--- a/crates/tokscale-core/src/sessions/micode.rs
+++ b/crates/tokscale-core/src/sessions/micode.rs
@@ -1,7 +1,7 @@
//! MiMo Code session parser
//!
//! Parses messages from:
-//! - SQLite database: ~/.local/share/micode/mimocode.db
+//! - SQLite database: ~/.local/share/mimocode/mimocode.db
use super::utils::open_readonly_sqlite;
use super::{
From 26c5749b18f81831026dae0d573c159f9a1d0634 Mon Sep 17 00:00:00 2001
From: Junho Yeo
Date: Sun, 28 Jun 2026 08:59:22 +0900
Subject: [PATCH 2/2] refactor(scanner): derive MiMo Code data dir from client
metadata
The scanner hardcoded the MiMo Code data root (XDG_DATA_HOME + "mimocode"),
duplicating the path that lives in `ClientId::MiMoCode` metadata and risking
drift the next time the directory changes. Resolve it via
`ClientId::MiMoCode.data().resolve_path_with_env_strategy(...)` like OpenCode,
Kimi, and the other XDG clients already do.
Behavior-preserving: for an XdgData root the helper yields the identical
`{XDG_DATA_HOME|~/.local/share}/mimocode` path. Verified by the existing
test_micode_authoritative_cost_is_not_repriced_on_first_parse_or_cache_hit.
Constraint: scan path must match clients.rs metadata to avoid silent non-detection
Confidence: high
Scope-risk: narrow
---
crates/tokscale-core/src/scanner.rs | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/crates/tokscale-core/src/scanner.rs b/crates/tokscale-core/src/scanner.rs
index df17a83c0..b3046fb01 100644
--- a/crates/tokscale-core/src/scanner.rs
+++ b/crates/tokscale-core/src/scanner.rs
@@ -917,12 +917,14 @@ fn scan_all_clients_with_env_strategy_inner(
// MiMo Code: SQLite database(s) at ~/.local/share/mimocode/mimocode*.db
if enabled.contains(&ClientId::MiMoCode) {
- let micode_xdg_data = if use_env_roots {
- std::env::var("XDG_DATA_HOME").unwrap_or_else(|_| format!("{}/.local/share", home_dir))
- } else {
- format!("{}/.local/share", home_dir)
- };
- let micode_data_dir = PathBuf::from(format!("{}/mimocode", micode_xdg_data));
+ // Derive the data dir from the client metadata so the scan path stays
+ // in sync with `ClientId::MiMoCode` (XdgData root + `mimocode`) rather
+ // than duplicating it here.
+ let micode_data_dir = PathBuf::from(
+ ClientId::MiMoCode
+ .data()
+ .resolve_path_with_env_strategy(home_dir, use_env_roots),
+ );
// `discover_micode_dbs` already returns a sorted list.
result.micode_dbs = discover_micode_dbs(&micode_data_dir);
}