Skip to content

Commit 65da5eb

Browse files
authored
chore: revert 0.2.0 bump and link CLI install guide on web (#1079)
* Revert "chore: bump version to 0.2.0 for release" This reverts commit 26edce9. * feat(settings): link to the CLI install guide on web
1 parent 26edce9 commit 65da5eb

9 files changed

Lines changed: 77 additions & 77 deletions

File tree

CHANGELOG.md

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,6 @@
33
All notable changes to Thunderbolt are documented in this file.
44
Generated by [git-cliff](https://git-cliff.org).
55

6-
## [0.2.0] - 2026-07-13
7-
8-
### Features
9-
- Portable coding agent across cli, web, mobile, and p2p (#1032) (cca70cf)
10-
- Frameless desktop window + menu-bar icon tray (#1067) (e318e94)
11-
- Support editing MCP servers in settings (#1008) (a26735b)
12-
- Require successful connection test before saving a model (#1006) (f558119)
13-
- Quote-reply — quote a passage from a response into the composer (#1054) (b3c9253)
14-
15-
### Fixes
16-
- Keep sidebar branding on web and mobile (#1069) (de70d95)
17-
- Add accessible names to icon-only buttons and unlabeled controls (#1057) (f4b2fcb)
18-
19-
### Performance
20-
- Cut per-token render and save overhead in the chat streaming pipeline (#1053) (c037a72)
21-
- Lazy-load posthog-js so analytics leaves the entry chunk (#1058) (7f008f9)
22-
- Lazy-load KaTeX and drop the duplicate markdown parser (#1059) (0852182)
23-
- Stop leaking desktop-only tauri plugins into the web entry (#1060) (a5667ab)
24-
25-
### Refactor
26-
- Make PowerSync JWT kid env-driven and drop orphan sync rule (#1068) (f2e1bc9)
27-
28-
### Documentation
29-
- Update sync-rule workflow for self-hosted PowerSync (#1071) (605808c)
30-
31-
### Other
32-
- Drop 5s test timeout in pr-metrics (#1072) (185431e)
33-
- Replace demo-nightly with nightly image rebuild + scope preview cleanup (#1063) (5d83346)
34-
356
## [0.1.106] - 2026-07-07
367

378
### Features

cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@thunderbolt/cli",
3-
"version": "0.2.0",
3+
"version": "0.1.106",
44
"private": true,
55
"type": "module",
66
"license": "MPL-2.0",

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "thunderbolt",
33
"private": true,
4-
"version": "0.2.0",
4+
"version": "0.1.106",
55
"description": "Thunderbolt",
66
"type": "module",
77
"license": "MPL-2.0",

src-tauri/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src-tauri/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "thunderbolt"
3-
version = "0.2.0"
3+
version = "0.1.106"
44
description = "Privacy-respecting AI assistant."
55
authors = ["Chris Roth <chris@cjroth.com>"]
66
license = "MPL-2.0"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2-
tauri.android.versionName=0.2.0
2+
tauri.android.versionName=0.1.106
33
tauri.android.versionCode=1018

src-tauri/tauri.conf.json

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "https://schema.tauri.app/config/2",
33
"productName": "Thunderbolt",
4-
"version": "0.2.0",
4+
"version": "0.1.106",
55
"identifier": "net.thunderbird.thunderbolt",
66
"build": {
77
"beforeDevCommand": "bun run dev",
@@ -20,10 +20,7 @@
2020
"visible": false,
2121
"titleBarStyle": "Overlay",
2222
"hiddenTitle": true,
23-
"trafficLightPosition": {
24-
"x": 16,
25-
"y": 26
26-
}
23+
"trafficLightPosition": { "x": 16, "y": 26 }
2724
}
2825
],
2926
"security": {

src/components/settings/agents/thunderbolt-cli-install-card.test.tsx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,21 @@ describe('ThunderboltCliInstallCard', () => {
3636
expect(screen.getByRole('button', { name: /install cli/i })).toBeInTheDocument()
3737
})
3838

39-
it('renders nothing on web, mobile or Windows', () => {
40-
const { container: web } = renderCard({ tauri: false })
41-
expect(web).toBeEmptyDOMElement()
42-
cleanup()
39+
it('renders the install guide on web instead of the one-click install action', () => {
40+
renderCard({ tauri: false })
41+
42+
const guideLink = screen.getByRole('link', { name: /view install guide/i })
43+
expect(guideLink).toHaveAttribute(
44+
'href',
45+
'https://github.com/thunderbird/thunderbolt/blob/main/cli/README.md#install',
46+
)
47+
expect(guideLink).toHaveAttribute('target', '_blank')
48+
expect(guideLink).toHaveAttribute('rel', 'noopener noreferrer')
49+
expect(screen.getByText(/install the standalone/i)).toHaveTextContent('from your shell')
50+
expect(screen.queryByRole('button', { name: /install cli/i })).not.toBeInTheDocument()
51+
})
52+
53+
it('renders nothing on unsupported Tauri platforms', () => {
4354
const { container: windows } = renderCard({ platform: 'windows' })
4455
expect(windows).toBeEmptyDOMElement()
4556
cleanup()

src/components/settings/agents/thunderbolt-cli-install-card.tsx

Lines changed: 55 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
44

55
import { arch } from '@tauri-apps/plugin-os'
6-
import { AlertTriangle, Check, Download, Loader2, Terminal } from 'lucide-react'
6+
import { AlertTriangle, Check, Download, ExternalLink, Loader2, Terminal } from 'lucide-react'
77
import { useState, useTransition } from 'react'
88
import { CopyCommandRow } from '@/components/settings/copy-command-row'
99
import { Button } from '@/components/ui/button'
@@ -20,6 +20,7 @@ import { getPlatform, isTauri } from '@/lib/platform'
2020

2121
/** Shell one-liner to build the CLI from source when no prebuilt binary applies. */
2222
const manualBuildCommand = 'cd cli && bun install && bun run build && ./install.sh'
23+
const cliInstallGuideUrl = 'https://github.com/thunderbird/thunderbolt/blob/main/cli/README.md#install'
2324

2425
type InstallState =
2526
| { status: 'idle' }
@@ -43,7 +44,8 @@ type ThunderboltCliInstallCardProps = {
4344
* the prebuilt binary into `~/.local/bin`, then renders the installed path (with
4445
* a PATH hint if the dir isn't on `PATH`) or a clear error. When a release has no
4546
* CLI assets, it surfaces the manual build fallback instead of failing silently.
46-
* Renders nothing on unpublished OS/architecture pairs or outside Tauri.
47+
* Web builds link to the install guide; Tauri builds render nothing on unpublished
48+
* OS/architecture pairs.
4749
*/
4850
export const ThunderboltCliInstallCard = ({
4951
install = installThunderboltCli,
@@ -57,7 +59,7 @@ export const ThunderboltCliInstallCard = ({
5759
const isTauriEnv = tauri ?? isTauri()
5860
const runtimeArchitecture = architecture ?? (isTauriEnv ? arch() : 'unknown')
5961

60-
if (!canInstallThunderboltCli(platform ?? getPlatform(), runtimeArchitecture, isTauriEnv)) {
62+
if (isTauriEnv && !canInstallThunderboltCli(platform ?? getPlatform(), runtimeArchitecture, isTauriEnv)) {
6163
return null
6264
}
6365

@@ -81,50 +83,69 @@ export const ThunderboltCliInstallCard = ({
8183
<div className="flex flex-col gap-1 min-w-0">
8284
<CardTitle>Thunderbolt CLI</CardTitle>
8385
<CardDescription>
84-
Install the standalone <code className="font-mono">thunderbolt</code> terminal agent to{' '}
85-
<code className="font-mono">~/.local/bin</code>.
86+
{isTauriEnv ? (
87+
<>
88+
Install the standalone <code className="font-mono">thunderbolt</code> terminal agent to{' '}
89+
<code className="font-mono">~/.local/bin</code>.
90+
</>
91+
) : (
92+
<>
93+
Install the standalone <code className="font-mono">thunderbolt</code> terminal agent from your shell.
94+
</>
95+
)}
8696
</CardDescription>
8797
</div>
8898
</div>
8999
</CardHeader>
90100
<CardContent className="flex flex-col gap-4">
91-
<Button variant="secondary" className="self-start" disabled={isPending} onClick={handleInstall}>
92-
{isPending ? <Loader2 className="animate-spin" /> : <Download />}
93-
{isPending ? 'Installing…' : 'Install CLI'}
94-
</Button>
101+
{isTauriEnv ? (
102+
<>
103+
<Button variant="secondary" className="self-start" disabled={isPending} onClick={handleInstall}>
104+
{isPending ? <Loader2 className="animate-spin" /> : <Download />}
105+
{isPending ? 'Installing…' : 'Install CLI'}
106+
</Button>
95107

96-
{state.status === 'success' && (
97-
<div className="flex flex-col gap-3">
98-
<p className="flex items-center gap-2 text-[length:var(--font-size-sm)]">
99-
<Check className="size-4 shrink-0 text-green-600" aria-hidden="true" />
100-
Installed to <code className="font-mono">{state.result.path}</code>
101-
</p>
102-
{!state.result.onPath && state.result.pathHint && (
103-
<div className="flex flex-col gap-2">
104-
<p className="text-[length:var(--font-size-xs)] text-muted-foreground">
105-
Add <code className="font-mono">~/.local/bin</code> to your PATH, then restart your shell:
108+
{state.status === 'success' && (
109+
<div className="flex flex-col gap-3">
110+
<p className="flex items-center gap-2 text-[length:var(--font-size-sm)]">
111+
<Check className="size-4 shrink-0 text-green-600" aria-hidden="true" />
112+
Installed to <code className="font-mono">{state.result.path}</code>
106113
</p>
107-
<CopyCommandRow command={state.result.pathHint} label="Copy PATH command" />
114+
{!state.result.onPath && state.result.pathHint && (
115+
<div className="flex flex-col gap-2">
116+
<p className="text-[length:var(--font-size-xs)] text-muted-foreground">
117+
Add <code className="font-mono">~/.local/bin</code> to your PATH, then restart your shell:
118+
</p>
119+
<CopyCommandRow command={state.result.pathHint} label="Copy PATH command" />
120+
</div>
121+
)}
108122
</div>
109123
)}
110-
</div>
111-
)}
112124

113-
{state.status === 'error' && (
114-
<div className="flex flex-col gap-3">
115-
<p className="flex items-start gap-2 text-[length:var(--font-size-sm)] text-destructive">
116-
<AlertTriangle className="size-4 mt-0.5 shrink-0" aria-hidden="true" />
117-
{state.message}
118-
</p>
119-
{state.showManualBuild && (
120-
<div className="flex flex-col gap-2">
121-
<p className="text-[length:var(--font-size-xs)] text-muted-foreground">
122-
Build it from source instead (requires Bun):
125+
{state.status === 'error' && (
126+
<div className="flex flex-col gap-3">
127+
<p className="flex items-start gap-2 text-[length:var(--font-size-sm)] text-destructive">
128+
<AlertTriangle className="size-4 mt-0.5 shrink-0" aria-hidden="true" />
129+
{state.message}
123130
</p>
124-
<CopyCommandRow command={manualBuildCommand} label="Copy build command" />
131+
{state.showManualBuild && (
132+
<div className="flex flex-col gap-2">
133+
<p className="text-[length:var(--font-size-xs)] text-muted-foreground">
134+
Build it from source instead (requires Bun):
135+
</p>
136+
<CopyCommandRow command={manualBuildCommand} label="Copy build command" />
137+
</div>
138+
)}
125139
</div>
126140
)}
127-
</div>
141+
</>
142+
) : (
143+
<Button asChild variant="secondary" className="self-start">
144+
<a href={cliInstallGuideUrl} target="_blank" rel="noopener noreferrer">
145+
<ExternalLink />
146+
View install guide
147+
</a>
148+
</Button>
128149
)}
129150
</CardContent>
130151
</Card>

0 commit comments

Comments
 (0)