Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
32c0ace
feat: add thunderbolt CLI, a Pi-harness coding agent with acp/mcp bri…
ital0 Jun 28, 2026
ad89a34
feat: run the built-in agent on an in-browser Pi harness
ital0 Jun 28, 2026
b8c2461
feat: add iroh P2P transport for the acp/mcp bridges
ital0 Jun 29, 2026
b075632
feat: harden the in-app Pi engine — browser-native tools, per-thread …
ital0 Jun 29, 2026
a4e79cd
feat: serve the built-in pi agent over an acp endpoint for the bridge
ital0 Jun 29, 2026
181633b
fix: bound iroh bridge handshakes and apply stdin backpressure
ital0 Jun 29, 2026
f690e35
feat: dial a laptop iroh bridge from the web app via a wasm client
ital0 Jun 29, 2026
7cd577d
feat: bind a device iroh node id via a canary-gated route with qr pai…
ital0 Jun 29, 2026
3ea443c
fix: surface device pairing errors and widen the node id length cap
ital0 Jun 29, 2026
251ca37
fix: cap qr scan image size and resolution to bound main-thread cost
ital0 Jun 29, 2026
b9fe7eb
feat: add openai-compat provider and model self-announce to the cli
ital0 Jun 29, 2026
58af582
fix: gate the cli bridge with an origin allowlist and per-run token
ital0 Jun 30, 2026
b35f8bc
fix: harden the embed workspace jail against symlink and path escape
ital0 Jun 30, 2026
9dc58ae
fix: bound iroh client warmup, cap qr decode, and clear credentials o…
ital0 Jun 30, 2026
24b7b14
feat: add iroh remote agents and bridged mcp servers to the app
ital0 Jun 30, 2026
95793a3
chore: drop the unneeded playwright and env-backup gitignore rules
ital0 Jun 30, 2026
b89699c
fix: cancel the remote acp turn when the user stops
ital0 Jun 30, 2026
0325eab
fix: contain the add-agent modal overflow and lead with the iroh ticket
ital0 Jun 30, 2026
224a810
feat: make the iroh relay configurable via env
ital0 Jun 30, 2026
91ca655
fix: harden the iroh bridge idle-accept and redact the api-key from logs
ital0 Jun 30, 2026
e541e2e
test: backfill unit tests for the cli agent, iroh, and agent-core
ital0 Jun 30, 2026
d16022a
ci: run the isolated agent-core test suite only when it changes
ital0 Jun 30, 2026
b4831af
build: scope the backend type-check to the shared modules it imports
ital0 Jun 30, 2026
e974e7a
test: make the agent-core mount test deterministic across reruns
ital0 Jun 30, 2026
ef34917
fix: clear the iroh node binding when a device re-registers or is denied
ital0 Jun 30, 2026
38e8590
fix: reject node-id attestation for denied devices
ital0 Jun 30, 2026
4e531aa
Merge branch 'main' into italomenezes/thunderbolt-cli-mvp
ital0 Jul 1, 2026
00e13a3
feat: persist acp sessions and add session/resume to the cli agent
ital0 Jul 1, 2026
889f8f6
feat: resume or replay acp sessions in the app by agent capability
ital0 Jul 1, 2026
542de75
ci: run cli test suite and typecheck in a dedicated CI job
ital0 Jul 1, 2026
2aa1291
ci: compile, lint, and test the thunderbolt-acp-client crate in the r…
ital0 Jul 1, 2026
b9ecb82
build: pin acp-client toolchain and checksum-gate the committed iroh …
ital0 Jul 1, 2026
3141962
docs: note deploy ordering for devices node_id synced columns
ital0 Jul 1, 2026
c85bd25
ci: gate committed wasm on crate-source changes to catch stale artifacts
ital0 Jul 1, 2026
0ee661c
build: strip builder paths from iroh wasm via --remap-path-prefix
ital0 Jul 2, 2026
d141a03
fix: redact joined --api-key=/--token= secrets in bridge command logs
ital0 Jul 2, 2026
691afef
Merge remote-tracking branch 'origin/main' into italomenezes/thunderb…
ital0 Jul 2, 2026
7623587
fix: bind a distinct iroh identity per bridge protocol
ital0 Jul 2, 2026
e36677a
refactor: extract reusable tool-activity formatters and banner text
ital0 Jul 2, 2026
e8f5cc8
feat: add interactive Pi TUI mode for the REPL
ital0 Jul 2, 2026
52a931a
feat: add per-agent setup dialog with run command and API-key instruc…
ital0 Jul 2, 2026
1703960
ci: publish CLI binaries and SHA256SUMS to GitHub releases
ital0 Jul 2, 2026
ca867eb
docs(cli): document prebuilt binary install from GitHub releases
ital0 Jul 2, 2026
e1c2e06
feat: add tauri command to download, verify and install the thunderbo…
ital0 Jul 2, 2026
e3f993d
feat: add desktop one-click thunderbolt cli install to agents settings
ital0 Jul 2, 2026
f900b3c
fix: scope pi-tui quarantine exemption to cli bunfig where it's pinned
ital0 Jul 2, 2026
0d0fa74
Merge remote-tracking branch 'origin/main' into italomenezes/thunderb…
ital0 Jul 2, 2026
acb87d1
ci: drop gratuitous secrets inherit from cli release job
ital0 Jul 2, 2026
a4a0393
docs: clarify CLI installer checksum guards transport not host integrity
ital0 Jul 2, 2026
c7910a4
Merge remote-tracking branch 'origin/main' into italomenezes/thunderb…
ital0 Jul 7, 2026
b6c98c2
Merge remote-tracking branch 'origin/main' into italomenezes/thunderb…
ital0 Jul 8, 2026
bd3437d
fix: add overall reqwest timeout to CLI download so a stalled host ca…
ital0 Jul 8, 2026
aa2ba20
fix: allow editing an existing iroh MCP server
ital0 Jul 9, 2026
3f2dabd
fix: redact token/secret/password env assignments in bridge command logs
ital0 Jul 9, 2026
a246f40
fix: guard websocket bridge stdin write against dead-pipe epipe
ital0 Jul 9, 2026
22ceb5b
fix: cap concurrent live subprocesses in websocket and iroh bridges
ital0 Jul 9, 2026
129847d
fix: strip terminal control sequences from untrusted CLI output
ital0 Jul 9, 2026
f965dfe
fix: abort the in-flight turn on TUI Ctrl-C and Ctrl-D
ital0 Jul 9, 2026
da84ea7
fix: reject path-traversal session ids at ACP resume boundary
ital0 Jul 9, 2026
b7294e3
fix: catch fire-and-forget session cancel on ACP abort
ital0 Jul 9, 2026
c363d3c
fix: widen backend agents.transport enum to include iroh
ital0 Jul 9, 2026
9ad4a69
ci: publish CLI release binaries and SHA256SUMS atomically
ital0 Jul 9, 2026
5c717d1
fix: settle iroh send() on actual QUIC write, not enqueue, to prevent…
ital0 Jul 9, 2026
478d504
style: use arrow functions for the device pairing components
ital0 Jul 9, 2026
43cd913
fix(csp): allow loopback bridge ports in connect-src
ital0 Jul 10, 2026
31a6133
fix(csp): allow WebAssembly via wasm-unsafe-eval for iroh
ital0 Jul 10, 2026
6822484
fix(cli): sanitize model-controlled text in permission prompt and tur…
ital0 Jul 10, 2026
30658e0
fix(chat): show tool command in bridged permission dialog
ital0 Jul 10, 2026
b87f7e5
fix(settings): gate CLI install card by CPU architecture
ital0 Jul 10, 2026
c3ed301
fix(cli): source version from package.json and stamp cli on release
ital0 Jul 10, 2026
fec711e
fix(cli): forward --help after -- to the connect client command
ital0 Jul 10, 2026
d19dd89
fix(acp): persist fresh session id before consuming its marker
ital0 Jul 10, 2026
28f5d8e
fix(acp): reach legacy-chat parity in the built-in agent
ital0 Jul 10, 2026
35b22a6
fix(cli): confine the bridged agent to a server-owned workspace
ital0 Jul 10, 2026
a974879
fix(agent-core): report write byte count in UTF-8 not code units
ital0 Jul 10, 2026
9a21e25
fix(agent-core): stop buffering discarded MCP result chunks
ital0 Jul 10, 2026
a7a97b4
fix(agent-core): surface partial output when a browser command times out
ital0 Jul 10, 2026
cc58da3
refactor(acp): share the tool-permission kernel across cli and built-…
ital0 Jul 10, 2026
d0aa70b
refactor(iroh): source the ALPN protocol string from one shared constant
ital0 Jul 10, 2026
07ca791
fix(iroh): don't leak the child when the connection-closed promise re…
ital0 Jul 10, 2026
d1a9c10
refactor(settings): extract the shared copy-command row
ital0 Jul 10, 2026
731cc48
fix(cli): honor THUNDERBOLT_HOME for the ACP sessions directory
ital0 Jul 10, 2026
647c573
fix(device): show a loading state while the QR code regenerates
ital0 Jul 10, 2026
7342954
docs(device): correct the node-id mutation's refresh comment
ital0 Jul 10, 2026
5294048
ci(wasm): verify the pkg file set and drop the stale determinism note
ital0 Jul 10, 2026
c6115fe
docs: refresh stale cli, transport, and crate documentation
ital0 Jul 10, 2026
6be900d
test(cli): use a placeholder host in the model test
ital0 Jul 10, 2026
53c3698
fix(shared): define tool-permission types locally so the isolated cli…
ital0 Jul 11, 2026
efd8f5a
fix(cli): drop bash from the workspace-jailed agent so it cannot esca…
ital0 Jul 11, 2026
6254796
test(acp): await the rejects assertion in the fresh-session persisten…
ital0 Jul 11, 2026
33fa0ae
docs(cli): document the served agent's workspace scope
ital0 Jul 13, 2026
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
6 changes: 6 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,9 @@ VITE_AUTH_ENABLE_ANONYMOUS=false
# Show app download links/banners in the web UI (set to "true" for internal testing deployments)
# When enabled, desktop users see a sidebar section + bottom-right banner; mobile users see a top banner
# VITE_SHOW_APP_DOWNLOADS="true"

# iroh relay for the ACP/MCP bridge transport (build-time; Vite inlines it).
# Unset = the n0 public relays (default). Set to a self-hosted iroh-relay wss URL
# to route every bridge dial through it — n0 DNS discovery + crypto are kept, only
# the relay hop changes. The CLI bridge has its own runtime env: THUNDERBOLT_IROH_RELAY_URL.
# VITE_IROH_RELAY_URL="wss://relay.example.com"
147 changes: 147 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ jobs:
runs-on: ubuntu-latest
outputs:
rust: ${{ steps.filter.outputs.rust }}
agent-core: ${{ steps.filter.outputs.agent-core }}
cli: ${{ steps.filter.outputs.cli }}
wasm-artifact: ${{ steps.filter.outputs.wasm-artifact }}
Comment thread
ital0 marked this conversation as resolved.
crate-src: ${{ steps.filter.outputs.crate-src }}
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
Expand All @@ -41,6 +45,23 @@ jobs:
- 'src-tauri/build.rs'
- 'src-tauri/rust-toolchain.toml'
- 'src-tauri/.cargo/**'
- 'crates/**'
agent-core:
- 'shared/agent-core/**'
cli:
- 'cli/**'
wasm-artifact:
- 'src/acp/iroh/pkg/**'
Comment thread
ital0 marked this conversation as resolved.
# Inputs that change the compiled wasm (README.md excluded — it doesn't).
# Pairs with the wasm-artifact staleness gate: touching any of these MUST
# ship a regenerated src/acp/iroh/pkg in the same PR.
crate-src:
- 'crates/thunderbolt-acp-client/src/**'
- 'crates/thunderbolt-acp-client/Cargo.toml'
- 'crates/thunderbolt-acp-client/Cargo.lock'
- 'crates/thunderbolt-acp-client/rust-toolchain.toml'
- 'crates/thunderbolt-acp-client/.cargo/**'
- 'crates/thunderbolt-acp-client/build.sh'

typescript:
runs-on: ubuntu-latest
Expand Down Expand Up @@ -126,6 +147,117 @@ jobs:
path: .metrics-baseline
key: pr-metrics-main-${{ github.sha }}

# shared/agent-core is an isolated module (also consumed by cli/). Its unit tests
# are NOT part of the default `bun run test` — they only need to run when the
# module itself changes, so gate them on the agent-core path filter. Mirrors the
# `rust` job's detect-changes pattern and the `typescript` job's Bun setup.
agent-core:
needs: detect-changes
if: needs.detect-changes.outputs.agent-core == 'true'
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

- name: Setup Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '20'

- name: Install Bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: 1.3.14

- name: Cache Bun dependencies
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
~/.bun/install/cache
node_modules
key: bun-${{ hashFiles('bun.lock') }}
restore-keys: |
bun-

- name: Install dependencies
run: bun install --frozen-lockfile

- name: Run agent-core tests (5x)
run: bun run test:agent-core:5x

# cli/ is a self-contained package (own bun.lock, no imports from src/ or shared/),
# so its tests and typecheck aren't reached by the `typescript` job. Gate on the
# `cli/**` path filter — same detect-changes mechanism as the `rust` and
# `agent-core` jobs — so it runs only when cli/ changes.
cli:
needs: detect-changes
if: needs.detect-changes.outputs.cli == 'true'
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

- name: Install Bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: 1.3.14

- name: Cache Bun dependencies (cli)
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
~/.bun/install/cache
cli/node_modules
key: cli-bun-${{ hashFiles('cli/bun.lock') }}
restore-keys: |
cli-bun-

- name: Install cli dependencies
run: cd cli && bun install --frozen-lockfile

- name: Type check cli
run: cd cli && bun run typecheck

- name: Run cli tests (5x)
run: cd cli && bun run test:5x

# The iroh ACP client (P2P/QUIC crypto core) ships as a prebuilt wasm artifact at
# src/acp/iroh/pkg so the web app imports it without a wasm toolchain in CI. The
# build remaps absolute cargo/repo paths for local reproducibility; cross-platform
# Linux/macOS reproducibility remains unproven. CI therefore enforces provenance
# two ways without rebuilding or needing a wasm toolchain:
# 1. Staleness gate — a change to the crate source MUST ship a regenerated pkg/ in
# the same PR, so editing the crate can't silently leave the committed wasm stale
# (the `rust` job host-compiles the crate but never touches the binary).
# 2. Tamper-evidence — the committed pkg/ must match its CHECKSUMS.txt manifest.
# Reproduce a bit-identical artifact locally on the pinned toolchain with
# `crates/thunderbolt-acp-client/build.sh --verify` (see that crate's README).
wasm-artifact:
needs: detect-changes
if: needs.detect-changes.outputs.wasm-artifact == 'true' || needs.detect-changes.outputs.crate-src == 'true'
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

# Crate source changed but the committed pkg/ didn't — the wasm wasn't rebuilt,
# so it's now stale relative to its source. Fail with the fix instruction.
- name: Guard against stale wasm artifact
if: needs.detect-changes.outputs.crate-src == 'true' && needs.detect-changes.outputs.wasm-artifact != 'true'
run: |
echo "::error::crates/thunderbolt-acp-client changed but src/acp/iroh/pkg was not regenerated — the committed wasm is stale."
echo "Rebuild and commit the artifact in the same change: crates/thunderbolt-acp-client/build.sh (then commit src/acp/iroh/pkg)."
exit 1

- name: Verify committed wasm artifacts match checksums manifest
if: needs.detect-changes.outputs.wasm-artifact == 'true'
run: |
cd src/acp/iroh/pkg
diff -u \
<(awk '{ print $2 }' CHECKSUMS.txt | sort) \
<(find . -maxdepth 1 -type f ! -name CHECKSUMS.txt -exec basename {} \; | sort)
shasum -a 256 -c CHECKSUMS.txt

rust:
needs: detect-changes
if: needs.detect-changes.outputs.rust == 'true'
Expand Down Expand Up @@ -189,6 +321,21 @@ jobs:
cargo clippy --all-targets -- -D warnings
cargo test

# crates/ holds the standalone thunderbolt-acp-client crate (own Cargo.toml
# and Cargo.lock, not a src-tauri workspace member), so the src-tauri build
# above never compiles it. Its wasm cdylib is the deployed artifact; the rlib
# target lets these host-target checks run without a wasm toolchain — the
# .cargo/config.toml rustflags are scoped to wasm32, so no --target override.
- name: Build and check ACP client crate
env:
CARGO_INCREMENTAL: 0
RUSTC_WRAPPER: ''
run: |
cd crates/thunderbolt-acp-client
cargo build --all-targets
cargo clippy --all-targets -- -D warnings
cargo test

backend:
runs-on: ubuntu-latest
# Healthy run is ~130s; a CPU-starved one was observed at 4920s (~82min). A
Expand Down
158 changes: 158 additions & 0 deletions .github/workflows/cli-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
name: CLI Release
run-name: CLI release for v${{ inputs.version }}

# Builds the standalone `thunderbolt` CLI binaries and attaches them, plus a
# SHA256SUMS manifest, to the shared `v{version}` GitHub Release. The desktop
# app derives download URLs from its own version:
#
# https://github.com/thunderbird/thunderbolt/releases/download/v{APP_VERSION}/thunderbolt-{target}
# https://github.com/thunderbird/thunderbolt/releases/download/v{APP_VERSION}/SHA256SUMS
#
# where {target} is one of: darwin-arm64 | linux-x64 | linux-arm64.
#
# Native-runner matrix (no cross-compile): the CLI depends on @number0/iroh, a
# NAPI addon that ships a per-platform prebuilt `.node`. `bun build --compile`
# embeds only the `.node` that is installed on the build machine, so each target
# MUST build on a runner of its own architecture — `bun install` there pulls the
# matching optional iroh dependency automatically.
#
# darwin-x64 is intentionally absent: iroh 1.0.0 publishes no x86_64-apple-darwin
# addon (`@number0/iroh-darwin-x64` does not exist on npm), so an Intel-macOS CLI
# binary cannot load iroh and is not shipped. Intel-Mac desktop users therefore
# have no one-click CLI install until iroh gains that target upstream.
#
# Publishing (flipping the draft release to public) is owned by the desktop
# release workflow, which shares the `v{version}` tag. This workflow only uploads
# assets via `gh release upload`, which never mutates the release's draft state —
# so it cannot race the desktop publish flip back into draft.

on:
workflow_call:
inputs:
version:
description: 'Version to release (e.g., 1.2.3 without v prefix)'
required: true
type: string
nightly:
description: 'Is this a nightly build?'
required: false
default: false
type: boolean
workflow_dispatch:
inputs:
version:
description: 'Version to release (e.g., 1.2.3 without v prefix)'
required: true
type: string
nightly:
description: 'Is this a nightly build?'
required: false
default: false
type: boolean

concurrency:
group: cli-release-${{ inputs.version }}
cancel-in-progress: true

permissions:
contents: write

jobs:
ensure-release:
name: Ensure Draft Release
runs-on: ubuntu-24.04
steps:
# For a regular release the draft already exists (version-bump created it).
# For a nightly it is created by the desktop workflow's draft job, which
# runs in parallel — create it here if we win the race, confirm it if we
# lose. Either way the build matrix can upload afterwards.
- name: Ensure the shared draft release exists
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REPO: ${{ github.repository }}
VERSION: ${{ inputs.version }}
NIGHTLY: ${{ inputs.nightly }}
run: |
if gh release view "v${VERSION}" --repo "$REPO" >/dev/null 2>&1; then
exit 0
fi
FLAGS="--draft"
[ "$NIGHTLY" = "true" ] && FLAGS="$FLAGS --prerelease"
gh release create "v${VERSION}" --repo "$REPO" $FLAGS \
--title "Release v${VERSION}" \
--notes "Release assets are uploaded by CI." \
|| gh release view "v${VERSION}" --repo "$REPO"

build:
name: Build ${{ matrix.target }}
needs: ensure-release
strategy:
fail-fast: false
matrix:
include:
- os: macos-latest
target: darwin-arm64
- os: ubuntu-24.04
target: linux-x64
- os: ubuntu-24.04-arm
target: linux-arm64
runs-on: ${{ matrix.os }}
timeout-minutes: 15
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
ref: v${{ inputs.version }}

- name: Install Bun
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
with:
bun-version: 1.3.14

- name: Cache Bun dependencies (cli)
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
~/.bun/install/cache
cli/node_modules
key: cli-bun-${{ matrix.os }}-${{ hashFiles('cli/bun.lock') }}
restore-keys: |
cli-bun-${{ matrix.os }}-

- name: Build CLI binary
run: cd cli && bun install --frozen-lockfile && bun run build:${{ matrix.target }}

# Upload as a workflow artifact rather than straight to the Release, so a
# failed leg can never leave a partial set of binaries on the release with
# no SHA256SUMS. The publish job below attaches everything atomically once
# ALL legs have succeeded.
- name: Upload CLI binary artifact
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: thunderbolt-${{ matrix.target }}
path: cli/dist/thunderbolt-${{ matrix.target }}
if-no-files-found: error
retention-days: 1

publish:
name: Publish CLI assets
# `needs: build` (default success()) gates this on EVERY leg succeeding, so
# publishing is atomic: either all binaries + SHA256SUMS land, or nothing does.
needs: build
runs-on: ubuntu-24.04
steps:
- name: Download all CLI binaries
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
path: dist
pattern: thunderbolt-*
merge-multiple: true

- name: Generate SHA256SUMS and upload all assets to the release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REPO: ${{ github.repository }}
VERSION: ${{ inputs.version }}
run: |
cd dist
sha256sum thunderbolt-* > SHA256SUMS
gh release upload "v${VERSION}" thunderbolt-* SHA256SUMS --clobber --repo "$REPO"
14 changes: 14 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,3 +79,17 @@ jobs:
with:
version: ${{ needs.version_bump.outputs.new_version }}
nightly: ${{ github.event_name == 'schedule' }}

# The CLI rides the unified `v{version}` release tag: its binaries attach to the
# same GitHub Release, and the desktop workflow's publish job flips that shared
# tag to public. It therefore builds only for `all` and nightly runs — not for
# single-platform (ios/android/desktop) dispatches, which produce RC tags the
# CLI would not belong to.
cli:
name: CLI Release
needs: version_bump
if: needs.version_bump.result == 'success' && (inputs.platform == 'all' || github.event_name == 'schedule')
uses: ./.github/workflows/cli-release.yml
with:
version: ${{ needs.version_bump.outputs.new_version }}
nightly: ${{ github.event_name == 'schedule' }}
5 changes: 4 additions & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,7 @@ thunderbird-mcp-bridge
thunderbird-mcp-native
package-lock.json
bun.lock
*.lock
*.lock
# Generated wasm-bindgen glue for the iroh ACP client (build artifact).
src/acp/iroh/pkg
crates/*/target
6 changes: 6 additions & 0 deletions backend/drizzle/0021_overrated_mindworm.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
-- This Source Code Form is subject to the terms of the Mozilla Public
-- License, v. 2.0. If a copy of the MPL was not distributed with this
-- file, You can obtain one at http://mozilla.org/MPL/2.0/.

ALTER TABLE "powersync"."devices" ADD COLUMN "node_id" text;--> statement-breakpoint
ALTER TABLE "powersync"."devices" ADD COLUMN "node_id_attested_at" timestamp;
Loading
Loading