Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 9 additions & 11 deletions .github/workflows/publish-cli.yml
Original file line number Diff line number Diff line change
Expand Up @@ -302,11 +302,6 @@ jobs:
name: bumped-packages
path: packages/

- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: 1.1.38

- name: Download CLI binary artifact
uses: actions/download-artifact@v4
with:
Expand All @@ -326,10 +321,11 @@ jobs:
- name: Publish platform package
working-directory: packages/${{ matrix.settings.package_dir }}
run: |
echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc
echo "📦 Publishing ${{ matrix.settings.package_name }} version: $(jq -r '.version' package.json)"
bun publish --access public
npm publish --access public
env:
NPM_CONFIG_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

publish-cli:
name: Publish @tokscale/cli
Expand Down Expand Up @@ -361,10 +357,11 @@ jobs:
- name: Publish @tokscale/cli
working-directory: packages/cli
run: |
echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc
echo "📦 Publishing version: $(jq -r '.version' package.json)"
bun publish --access public
npm publish --access public
env:
NPM_CONFIG_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

publish-alias:
name: Publish tokscale (wrapper)
Expand All @@ -388,10 +385,11 @@ jobs:
- name: Publish tokscale
working-directory: packages/tokscale
run: |
echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > ~/.npmrc
echo "📦 Publishing version: $(jq -r '.version' package.json)"
bun publish --access public
npm publish --access public
env:
NPM_CONFIG_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

finalize:
name: Commit version bump and create release
Expand Down
4 changes: 4 additions & 0 deletions crates/tokscale-cli/src/tui/client_ui.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ pub const CLIENT_UI: [ClientUi; ClientId::COUNT] = [
display_name: "Kilo CLI",
hotkey: 'l',
},
ClientUi {
display_name: "Antigravity",
hotkey: 'a',
},
];

pub fn display_name(client: ClientId) -> &'static str {
Expand Down
10 changes: 9 additions & 1 deletion crates/tokscale-core/src/clients.rs
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,14 @@ define_clients!(
pattern: "kilo.db",
headless: false,
parse_local: true
},
Antigravity = 15 => {
id: "antigravity",
root: PathRoot::Home,
relative: ".gemini/antigravity/conversations",
pattern: "*.pb",
headless: false,
parse_local: true
}
);

Expand Down Expand Up @@ -279,7 +287,7 @@ mod tests {

#[test]
fn test_client_id_count() {
assert_eq!(ClientId::COUNT, 15);
assert_eq!(ClientId::COUNT, 16);
}

#[test]
Expand Down
19 changes: 19 additions & 0 deletions crates/tokscale-core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -864,6 +864,16 @@ fn parse_all_messages_with_pricing(
all_messages.extend(kilo_messages);
}

let antigravity_messages: Vec<UnifiedMessage> =
sessions::antigravity::parse_antigravity_files(scan_result.get(ClientId::Antigravity))
.into_iter()
.map(|mut msg| {
apply_pricing_if_available(&mut msg, pricing);
msg
})
.collect();
all_messages.extend(antigravity_messages);

if include_synthetic {
if let Some(db_path) = &scan_result.synthetic_db {
let outcome = load_or_parse_sqlite_source(db_path, &source_cache, pricing, |path| {
Expand Down Expand Up @@ -1514,6 +1524,15 @@ pub fn parse_local_clients(options: LocalParseOptions) -> Result<ParsedMessages,
0
};

let antigravity_msgs: Vec<ParsedMessage> =
sessions::antigravity::parse_antigravity_files(scan_result.get(ClientId::Antigravity))
.into_iter()
.map(|msg| unified_to_parsed(&msg))
.collect();
let antigravity_count = antigravity_msgs.len() as i32;
counts.set(ClientId::Antigravity, antigravity_count);
messages.extend(antigravity_msgs);

if include_synthetic {
if let Some(db_path) = &scan_result.synthetic_db {
let synthetic_msgs: Vec<ParsedMessage> =
Expand Down
12 changes: 12 additions & 0 deletions crates/tokscale-core/src/pricing/aliases.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,18 @@ static MODEL_ALIASES: Lazy<HashMap<&'static str, &'static str>> = Lazy::new(|| {
// Synthetic model variants (only where resolver needs help)
m.insert("kimi-k2.5-nvfp4", "kimi-k2.5"); // Quantization variant → base model pricing
m.insert("kimi-k2-instruct-0905", "kimi-k2.5"); // Specific version → base (avoids reseller)

// Antigravity (Windsurf) model variants
m.insert("claude-opus-4-6-thinking", "claude-opus-4.6");
m.insert("claude-sonnet-4-6-thinking", "claude-sonnet-4.6");
m.insert("gemini-3.1-pro-high", "gemini-3.1-pro");
m.insert("gemini-3.1-pro-low", "gemini-3.1-pro");
m.insert("gemini-3-pro-high", "gemini-3-pro");
m.insert("gemini-3-pro-low", "gemini-3-pro");
m.insert("gemini-3-flash-c", "gemini-3-flash");
m.insert("claude-opus-4-6", "claude-opus-4.6");
m.insert("claude-sonnet-4-6", "claude-sonnet-4.6");
m.insert("claude-haiku-4-6", "claude-haiku-4.6");
m
});

Expand Down
1 change: 1 addition & 0 deletions crates/tokscale-core/src/scanner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ pub fn scan_directory(root: &str, pattern: &str) -> Vec<PathBuf> {
"wire.jsonl" => file_name == "wire.jsonl",
"ui_messages.json" => file_name == "ui_messages.json",
"session-usage.json" => file_name == "session-usage.json",
"*.pb" => file_name.ends_with(".pb"),
_ => false,
}
})
Expand Down
Loading