From 3c905c979da5fc8b9f504deb5b22f8d13f552db5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8Dtalo=20Menezes?= Date: Mon, 13 Jul 2026 14:41:23 -0300 Subject: [PATCH 1/2] Revert "chore: bump version to 0.2.0 for release" This reverts commit 26edce91fe1f14bae1d7b63fdbb70e83597ba0de. --- CHANGELOG.md | 29 ---------------------- cli/package.json | 2 +- package.json | 2 +- src-tauri/Cargo.lock | 2 +- src-tauri/Cargo.toml | 2 +- src-tauri/gen/android/app/tauri.properties | 2 +- src-tauri/tauri.conf.json | 7 ++---- 7 files changed, 7 insertions(+), 39 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4077c4ee..3c9a7c6d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,35 +3,6 @@ All notable changes to Thunderbolt are documented in this file. Generated by [git-cliff](https://git-cliff.org). -## [0.2.0] - 2026-07-13 - -### Features -- Portable coding agent across cli, web, mobile, and p2p (#1032) (cca70cf) -- Frameless desktop window + menu-bar icon tray (#1067) (e318e94) -- Support editing MCP servers in settings (#1008) (a26735b) -- Require successful connection test before saving a model (#1006) (f558119) -- Quote-reply — quote a passage from a response into the composer (#1054) (b3c9253) - -### Fixes -- Keep sidebar branding on web and mobile (#1069) (de70d95) -- Add accessible names to icon-only buttons and unlabeled controls (#1057) (f4b2fcb) - -### Performance -- Cut per-token render and save overhead in the chat streaming pipeline (#1053) (c037a72) -- Lazy-load posthog-js so analytics leaves the entry chunk (#1058) (7f008f9) -- Lazy-load KaTeX and drop the duplicate markdown parser (#1059) (0852182) -- Stop leaking desktop-only tauri plugins into the web entry (#1060) (a5667ab) - -### Refactor -- Make PowerSync JWT kid env-driven and drop orphan sync rule (#1068) (f2e1bc9) - -### Documentation -- Update sync-rule workflow for self-hosted PowerSync (#1071) (605808c) - -### Other -- Drop 5s test timeout in pr-metrics (#1072) (185431e) -- Replace demo-nightly with nightly image rebuild + scope preview cleanup (#1063) (5d83346) - ## [0.1.106] - 2026-07-07 ### Features diff --git a/cli/package.json b/cli/package.json index ce72e40a6..101fc424f 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "@thunderbolt/cli", - "version": "0.2.0", + "version": "0.1.106", "private": true, "type": "module", "license": "MPL-2.0", diff --git a/package.json b/package.json index e9f4da264..5eb131e93 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "thunderbolt", "private": true, - "version": "0.2.0", + "version": "0.1.106", "description": "Thunderbolt", "type": "module", "license": "MPL-2.0", diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 53a4cd8b5..3a8711458 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -5417,7 +5417,7 @@ dependencies = [ [[package]] name = "thunderbolt" -version = "0.2.0" +version = "0.1.106" dependencies = [ "anyhow", "hex", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 5c7d21b7c..597691ad8 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "thunderbolt" -version = "0.2.0" +version = "0.1.106" description = "Privacy-respecting AI assistant." authors = ["Chris Roth "] license = "MPL-2.0" diff --git a/src-tauri/gen/android/app/tauri.properties b/src-tauri/gen/android/app/tauri.properties index 59011708f..4ba03b171 100644 --- a/src-tauri/gen/android/app/tauri.properties +++ b/src-tauri/gen/android/app/tauri.properties @@ -1,3 +1,3 @@ // THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -tauri.android.versionName=0.2.0 +tauri.android.versionName=0.1.106 tauri.android.versionCode=1018 \ No newline at end of file diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 39fc205f5..32261723c 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "Thunderbolt", - "version": "0.2.0", + "version": "0.1.106", "identifier": "net.thunderbird.thunderbolt", "build": { "beforeDevCommand": "bun run dev", @@ -20,10 +20,7 @@ "visible": false, "titleBarStyle": "Overlay", "hiddenTitle": true, - "trafficLightPosition": { - "x": 16, - "y": 26 - } + "trafficLightPosition": { "x": 16, "y": 26 } } ], "security": { From 285096e6391c79b4aa84b65ed85f8fb0e815a4b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8Dtalo=20Menezes?= Date: Mon, 13 Jul 2026 14:40:57 -0300 Subject: [PATCH 2/2] feat(settings): link to the CLI install guide on web --- .../thunderbolt-cli-install-card.test.tsx | 19 +++- .../agents/thunderbolt-cli-install-card.tsx | 89 ++++++++++++------- 2 files changed, 70 insertions(+), 38 deletions(-) diff --git a/src/components/settings/agents/thunderbolt-cli-install-card.test.tsx b/src/components/settings/agents/thunderbolt-cli-install-card.test.tsx index 576b72996..fa40aa10c 100644 --- a/src/components/settings/agents/thunderbolt-cli-install-card.test.tsx +++ b/src/components/settings/agents/thunderbolt-cli-install-card.test.tsx @@ -36,10 +36,21 @@ describe('ThunderboltCliInstallCard', () => { expect(screen.getByRole('button', { name: /install cli/i })).toBeInTheDocument() }) - it('renders nothing on web, mobile or Windows', () => { - const { container: web } = renderCard({ tauri: false }) - expect(web).toBeEmptyDOMElement() - cleanup() + it('renders the install guide on web instead of the one-click install action', () => { + renderCard({ tauri: false }) + + const guideLink = screen.getByRole('link', { name: /view install guide/i }) + expect(guideLink).toHaveAttribute( + 'href', + 'https://github.com/thunderbird/thunderbolt/blob/main/cli/README.md#install', + ) + expect(guideLink).toHaveAttribute('target', '_blank') + expect(guideLink).toHaveAttribute('rel', 'noopener noreferrer') + expect(screen.getByText(/install the standalone/i)).toHaveTextContent('from your shell') + expect(screen.queryByRole('button', { name: /install cli/i })).not.toBeInTheDocument() + }) + + it('renders nothing on unsupported Tauri platforms', () => { const { container: windows } = renderCard({ platform: 'windows' }) expect(windows).toBeEmptyDOMElement() cleanup() diff --git a/src/components/settings/agents/thunderbolt-cli-install-card.tsx b/src/components/settings/agents/thunderbolt-cli-install-card.tsx index c81d8d08c..ca0f8634f 100644 --- a/src/components/settings/agents/thunderbolt-cli-install-card.tsx +++ b/src/components/settings/agents/thunderbolt-cli-install-card.tsx @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ import { arch } from '@tauri-apps/plugin-os' -import { AlertTriangle, Check, Download, Loader2, Terminal } from 'lucide-react' +import { AlertTriangle, Check, Download, ExternalLink, Loader2, Terminal } from 'lucide-react' import { useState, useTransition } from 'react' import { CopyCommandRow } from '@/components/settings/copy-command-row' import { Button } from '@/components/ui/button' @@ -20,6 +20,7 @@ import { getPlatform, isTauri } from '@/lib/platform' /** Shell one-liner to build the CLI from source when no prebuilt binary applies. */ const manualBuildCommand = 'cd cli && bun install && bun run build && ./install.sh' +const cliInstallGuideUrl = 'https://github.com/thunderbird/thunderbolt/blob/main/cli/README.md#install' type InstallState = | { status: 'idle' } @@ -43,7 +44,8 @@ type ThunderboltCliInstallCardProps = { * the prebuilt binary into `~/.local/bin`, then renders the installed path (with * a PATH hint if the dir isn't on `PATH`) or a clear error. When a release has no * CLI assets, it surfaces the manual build fallback instead of failing silently. - * Renders nothing on unpublished OS/architecture pairs or outside Tauri. + * Web builds link to the install guide; Tauri builds render nothing on unpublished + * OS/architecture pairs. */ export const ThunderboltCliInstallCard = ({ install = installThunderboltCli, @@ -57,7 +59,7 @@ export const ThunderboltCliInstallCard = ({ const isTauriEnv = tauri ?? isTauri() const runtimeArchitecture = architecture ?? (isTauriEnv ? arch() : 'unknown') - if (!canInstallThunderboltCli(platform ?? getPlatform(), runtimeArchitecture, isTauriEnv)) { + if (isTauriEnv && !canInstallThunderboltCli(platform ?? getPlatform(), runtimeArchitecture, isTauriEnv)) { return null } @@ -81,50 +83,69 @@ export const ThunderboltCliInstallCard = ({
Thunderbolt CLI - Install the standalone thunderbolt terminal agent to{' '} - ~/.local/bin. + {isTauriEnv ? ( + <> + Install the standalone thunderbolt terminal agent to{' '} + ~/.local/bin. + + ) : ( + <> + Install the standalone thunderbolt terminal agent from your shell. + + )}
- + {isTauriEnv ? ( + <> + - {state.status === 'success' && ( -
-

-

- {!state.result.onPath && state.result.pathHint && ( -
-

- Add ~/.local/bin to your PATH, then restart your shell: + {state.status === 'success' && ( +

+

+

- + {!state.result.onPath && state.result.pathHint && ( +
+

+ Add ~/.local/bin to your PATH, then restart your shell: +

+ +
+ )}
)} -
- )} - {state.status === 'error' && ( -
-

-

- {state.showManualBuild && ( -
-

- Build it from source instead (requires Bun): + {state.status === 'error' && ( +

+

+

- + {state.showManualBuild && ( +
+

+ Build it from source instead (requires Bun): +

+ +
+ )}
)} -
+ + ) : ( + )}