Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 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
b6f1cb6
feat: add synced device_type column to devices table
ital0 Jul 7, 2026
5641291
feat: wire Better Auth device-authorization and api-key plugins for C…
ital0 Jul 7, 2026
3532ca3
feat: add self-enroll node-id and account allowlist device routes
ital0 Jul 7, 2026
80ad400
feat: add thunderbolt login CLI device-authorization grant
ital0 Jul 7, 2026
2aa8cbd
feat: auto-trust same-account peers at the iroh bridge with a 45s rev…
ital0 Jul 7, 2026
c0d3185
feat: mirror device_type column and distinguish bridge devices in set…
ital0 Jul 7, 2026
6e1faeb
fix: server-manage device_type so clients can't self-label a device a…
ital0 Jul 7, 2026
f6a05c4
feat: add /device CLI login approval page
ital0 Jul 7, 2026
c7910a4
Merge remote-tracking branch 'origin/main' into italomenezes/thunderb…
ital0 Jul 7, 2026
33a8dc5
feat: self-enroll app node id for same-account iroh auto-trust on bri…
ital0 Jul 7, 2026
40ea193
feat: add bridge device registration route with reserved id namespace
ital0 Jul 7, 2026
9230c5c
feat: register the iroh bridge as a device on transparent enrollment
ital0 Jul 7, 2026
49cc8a0
Merge remote-tracking branch 'origin/italomenezes/thunderbolt-cli-mvp…
ital0 Jul 7, 2026
851e9f8
docs: add cli auth same-account trust design spec
ital0 Jul 7, 2026
e373c1f
feat: honor env PAT and drop bridge trust on self-revocation
ital0 Jul 7, 2026
62d8e39
docs: fix stale test-coverage note in http transport
ital0 Jul 7, 2026
afe7d25
chore: relax better-auth api-key pin to caret range
ital0 Jul 7, 2026
2afbf1e
test: reuse parsed allowlist rows in encryption test
ital0 Jul 7, 2026
099ef10
feat: preserve device approval code across login and lazy-load page
ital0 Jul 7, 2026
c03f3ef
style: use responsive sizing vars for bridge device row
ital0 Jul 7, 2026
9de0e13
docs: correct device_type same-branch deploy comment
ital0 Jul 7, 2026
4915341
refactor: flatten agent submit branching
ital0 Jul 7, 2026
e3ec35c
chore: remove design spec from the branch
ital0 Jul 8, 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
0fb5bbe
Merge remote-tracking branch 'origin/italomenezes/thunderbolt-cli-mvp…
ital0 Jul 9, 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"
143 changes: 143 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 }}
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/**'
# 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,113 @@ 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
# committed binary embeds ~750 absolute ~/.cargo build paths, so it is byte-for-byte
# reproducible only on the machine that built it — a Linux/macOS CI rebuild can never
# match hash-for-hash (see the crate README's provenance note). CI therefore enforces
# provenance two ways, neither 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 && shasum -a 256 -c CHECKSUMS.txt

rust:
needs: detect-changes
if: needs.detect-changes.outputs.rust == 'true'
Expand Down Expand Up @@ -189,6 +317,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
3 changes: 3 additions & 0 deletions backend/bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

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