Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
c405ad1
feat(agent): fix Anthropic prompt caching with Databricks (+ MCP prox…
atishpatel Jul 29, 2026
ce01e93
Polish mobile typing indicator (#3528)
klopez4212 Jul 29, 2026
24d90d1
Refine community invite limits (#3529)
klopez4212 Jul 29, 2026
6438ded
feat(agent): route Claude/GPT model families to their native gateway …
atishpatel Jul 29, 2026
4555899
Polish mobile navigation and menus (#3486)
klopez4212 Jul 29, 2026
f7a3988
fix(desktop): preserve shared agent fidelity (#3553)
wesbillman Jul 29, 2026
294c8c8
perf(desktop): move observer-feed archive and decrypt commands off ma…
wpfleger96 Jul 29, 2026
51bb97d
Run Tauri clippy in pre-push (#3555)
wesbillman Jul 29, 2026
a13085e
chore(release): release Buzz Desktop version 0.5.1 (#3566)
wesbillman Jul 29, 2026
9752b81
Serialize Tauri pre-push checks (#3567)
wesbillman Jul 29, 2026
9beb3b8
fix(cli): mask credential env values in --help output (#3570)
wpfleger96 Jul 29, 2026
4a1ebf2
feat(agent): make Gemini and MLflow-route models usable through datab…
atishpatel Jul 29, 2026
ddd4687
revert(acp): remove dead GOOSE_ACP_SCHEDULER_DISABLED env injection (…
wpfleger96 Jul 29, 2026
7e9b77f
Fix inline raster avatars in agent catalog (#3581)
wesbillman Jul 29, 2026
324bd6b
Fix shared agent avatar import profiles (#3578)
wesbillman Jul 29, 2026
259de6a
Improve emoji autocomplete matching (#3571)
klopez4212 Jul 29, 2026
047533c
fix(mobile): keep TLS on relays joined by invite (#3139)
inventivepotter Jul 29, 2026
b42a8d4
fix(desktop): reconcile thread arrivals at bottom (#3585)
wesbillman Jul 29, 2026
66e7054
fix(desktop): deduplicate relay outage notification (#3579)
loganj Jul 29, 2026
7adc462
feat(cli): mirror Desktop mention delivery (#3330)
loganj Jul 29, 2026
581baa6
chore(ci): bump Linux AppImage build container to ubuntu:24.04 (#3602)
wpfleger96 Jul 29, 2026
005b5b8
feat(tracing): correlate trace IDs in relay logs (#3608)
ThePumpingLemma Jul 29, 2026
5aeed7c
fix(desktop): discover bun-installed agent CLIs in ~/.bun/bin (#3343)
linxule Jul 29, 2026
b18e559
docs: add Linux rendering troubleshooting guide (#3573)
wpfleger96 Jul 29, 2026
3e48f1b
chore(release): release Buzz Desktop version 0.5.2 (#3624)
wesbillman Jul 29, 2026
f95fdc1
feat(agent,acp): wire provider total_tokens through NIP-AM publish ch…
wpfleger96 Jul 29, 2026
ab55fee
feat: add first-class OpenRouter provider support (#1975)
wpfleger96 Jul 29, 2026
7012d86
feat: configure S3 URL addressing style (#3400)
kalvinnchau Jul 30, 2026
788b3c0
fix(git): channel binding tooling + author remediation for unbound re…
tlongwell-block Jul 30, 2026
63496cc
feat(replica): portable heartbeat-token fence with snapshot-local rea…
tlongwell-block Jul 30, 2026
eda5dc9
docs(desktop): add private CA release lifecycle
BrianInAz Jul 30, 2026
01c378d
feat(release): automate private CA desktop builds
BrianInAz Jul 30, 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
13 changes: 13 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,19 @@ RELAY_URL=ws://localhost:3000
# BUZZ_GIT_PACK_CACHE_MAX_BYTES=5368709120
# BUZZ_GIT_PACK_CACHE_MAX_CONCURRENT_POPULATIONS=2

# -----------------------------------------------------------------------------
# S3-Compatible Object Storage (media + Git/CAS)
# -----------------------------------------------------------------------------
# The local MinIO container is reachable from host processes at localhost:9000.
# Path style keeps the bucket in the URL path and is required by this local DNS
# setup. Use `virtual` only when the provider requires bucket-as-subdomain URLs.
BUZZ_S3_ENDPOINT=http://localhost:9000
BUZZ_S3_ACCESS_KEY=buzz_dev
BUZZ_S3_SECRET_KEY=buzz_dev_secret
BUZZ_S3_BUCKET=buzz-media
BUZZ_S3_REGION=us-east-1
BUZZ_S3_ADDRESSING_STYLE=path

# -----------------------------------------------------------------------------
# Media Upload Admission
# -----------------------------------------------------------------------------
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ jobs:
- '.github/workflows/ci.yml'
- name: Release workflow source contract
run: scripts/test-release-ref-contract.sh
- name: Private CA release workflow contract
run: scripts/test-private-ca-release-contract.sh
- name: Mobile release contract
run: |
scripts/test-mobile-release-contract.sh
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/linux-canary.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
name: Build Linux canary
if: github.repository == 'block/buzz'
runs-on: ubuntu-latest
container: ubuntu:22.04@sha256:0e0a0fc6d18feda9db1590da249ac93e8d5abfea8f4c3c0c849ce512b5ef8982
container: ubuntu:24.04@sha256:4fbb8e6a8395de5a7550b33509421a2bafbc0aab6c06ba2cef9ebffbc7092d90
timeout-minutes: 60
permissions:
contents: read
Expand Down
225 changes: 225 additions & 0 deletions .github/workflows/private-ca-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
---
# yamllint disable rule:line-length
# yamllint disable rule:comments
name: Private CA Desktop Release

"on":
schedule:
- cron: "5 15 * * *"
workflow_dispatch:
issues:
types: [labeled]

permissions:
contents: read

concurrency:
group: private-ca-release-${{ github.event.issue.number || github.run_id }}
cancel-in-progress: false

env:
UPSTREAM_REPOSITORY: block/buzz
PATCH_COMMIT: 6d03a38da5e3402bf97df1b3c46152887eb3778e

jobs:
monitor:
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: read
issues: write
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- name: Create one BUILD or SKIP ticket
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
release="$(gh api "repos/${UPSTREAM_REPOSITORY}/releases/latest")"
tag="$(jq -r '.tag_name' <<<"${release}")"
[[ "${tag}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] || { echo "not a stable tag: ${tag}" >&2; exit 1; }
existing="$(gh issue list --state all --search "[Buzz update] ${tag} available in:title" --json number --jq '.[0].number // empty')"
[[ -z "${existing}" ]] || { echo "ticket already exists: #${existing}"; exit 0; }
work="$(mktemp -d)"; trap 'rm -rf "${work}"' EXIT
git clone --depth 1 --branch "${tag}" "https://github.com/${UPSTREAM_REPOSITORY}.git" "${work}/source"
source_sha="$(git -C "${work}/source" rev-parse HEAD)"
git -C "${work}/source" fetch --depth 2 "https://github.com/${GITHUB_REPOSITORY}.git" "${PATCH_COMMIT}"
if git -C "${work}/source" cherry-pick --no-commit "${PATCH_COMMIT}"; then
patch_status=clean
git -C "${work}/source" cherry-pick --abort || git -C "${work}/source" reset --hard
else
patch_status=conflict
git -C "${work}/source" cherry-pick --abort || git -C "${work}/source" reset --hard
fi
for label in buzz-update build-approved skip remediation-required built accepted; do
gh label create "${label}" --force --color 0E8A16 --description "Buzz private-CA release lifecycle" >/dev/null
done
cat >"${work}/issue.md" <<EOF
<!-- buzz-private-ca-release tag=${tag} source_sha=${source_sha} patch_sha=${PATCH_COMMIT} patch_status=${patch_status} -->
## Buzz ${tag} is available

Upstream release: $(jq -r '.html_url' <<<"${release}")
Published: $(jq -r '.published_at' <<<"${release}")
Immutable source SHA: \`${source_sha}\`
Patch applicability: **${patch_status}**

### Changelog

$(jq -r '.body // "No upstream release notes supplied."' <<<"${release}")

### Decision required

- Add \`build-approved\` to start the guarded arm64 build. Only @BrianInAz can approve.
- Add \`skip\` and close this issue to record no build is wanted.
- If applicability is \`conflict\`, use \`remediation-required\`; do not approve.
EOF
labels=(--label buzz-update)
if [[ "${patch_status}" == conflict ]]; then
labels+=(--label remediation-required)
fi
gh issue create --title "[Buzz update] ${tag} available" "${labels[@]}" --body-file "${work}/issue.md"

skip:
if: >-
github.event_name == 'issues' && github.event.action == 'labeled' &&
github.event.label.name == 'skip' && github.actor == 'BrianInAz'
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
issues: write
steps:
- name: Record the explicit no-build decision
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
gh issue comment "${{ github.event.issue.number }}" --body "Skipped by @BrianInAz; no private-CA package was built."
gh issue close "${{ github.event.issue.number }}"

approval:
if: >-
github.event_name == 'issues' && github.event.action == 'labeled' &&
github.event.label.name == 'build-approved' && github.actor == 'BrianInAz'
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: read
issues: read
outputs:
issue_number: ${{ steps.verify.outputs.issue_number }}
tag: ${{ steps.verify.outputs.tag }}
source_sha: ${{ steps.verify.outputs.source_sha }}
steps:
- id: verify
env:
GH_TOKEN: ${{ github.token }}
ISSUE_NUMBER: ${{ github.event.issue.number }}
run: |
set -euo pipefail
body="$(gh issue view "${ISSUE_NUMBER}" --json body --jq .body)"
marker="$(grep -E '^<!-- buzz-private-ca-release tag=v[0-9]+\.[0-9]+\.[0-9]+ source_sha=[0-9a-f]{40} patch_sha=[0-9a-f]{40} patch_status=clean -->$' <<<"${body}")"
[[ -n "${marker}" ]] || { echo "not a clean monitor-created ticket" >&2; exit 1; }
tag="$(sed -E 's/.*tag=([^ ]+).*/\1/' <<<"${marker}")"
source_sha="$(sed -E 's/.*source_sha=([^ ]+).*/\1/' <<<"${marker}")"
patch_sha="$(sed -E 's/.*patch_sha=([^ ]+).*/\1/' <<<"${marker}")"
[[ "${patch_sha}" == "${PATCH_COMMIT}" ]] || { echo "wrong patch" >&2; exit 1; }
remote_sha="$(git ls-remote "https://github.com/${UPSTREAM_REPOSITORY}.git" "refs/tags/${tag}^{}" | awk '{print $1}')"
[[ -n "${remote_sha}" ]] || remote_sha="$(git ls-remote "https://github.com/${UPSTREAM_REPOSITORY}.git" "refs/tags/${tag}" | awk '{print $1}')"
[[ "${remote_sha}" == "${source_sha}" ]] || { echo "tag SHA changed" >&2; exit 1; }
echo "issue_number=${ISSUE_NUMBER}" >> "$GITHUB_OUTPUT"
echo "tag=${tag}" >> "$GITHUB_OUTPUT"
echo "source_sha=${source_sha}" >> "$GITHUB_OUTPUT"

validate:
needs: approval
runs-on: ubuntu-latest
timeout-minutes: 60
permissions:
contents: read
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- uses: cashapp/activate-hermit@cea9af7913204a965fd488637a8d1811bba2e616 # v1
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
- name: Fetch immutable source and apply patch
run: |
set -euo pipefail
git clone --depth 1 --branch "${{ needs.approval.outputs.tag }}" "https://github.com/${UPSTREAM_REPOSITORY}.git" "$RUNNER_TEMP/source"
[[ "$(git -C "$RUNNER_TEMP/source" rev-parse HEAD)" == "${{ needs.approval.outputs.source_sha }}" ]]
git -C "$RUNNER_TEMP/source" fetch --depth 2 "https://github.com/${GITHUB_REPOSITORY}.git" "${PATCH_COMMIT}"
git -C "$RUNNER_TEMP/source" cherry-pick --no-commit "${PATCH_COMMIT}"
git -C "$RUNNER_TEMP/source" diff --check
- name: Run full upstream CI
working-directory: ${{ runner.temp }}/source
run: just ci
- name: Run focused native connector test
working-directory: ${{ runner.temp }}/source
run: cargo test --manifest-path desktop/src-tauri/Cargo.toml native_websocket::tests::native_websocket_platform_tls_connector_is_available

package:
needs: [approval, validate]
runs-on: macos-15
timeout-minutes: 75
permissions:
contents: write
attestations: write
id-token: write
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
- uses: cashapp/activate-hermit@cea9af7913204a965fd488637a8d1811bba2e616 # v1
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
- name: Fetch immutable source and apply patch
run: |
set -euo pipefail
git clone --depth 1 --branch "${{ needs.approval.outputs.tag }}" "https://github.com/${UPSTREAM_REPOSITORY}.git" "$RUNNER_TEMP/source"
[[ "$(git -C "$RUNNER_TEMP/source" rev-parse HEAD)" == "${{ needs.approval.outputs.source_sha }}" ]]
git -C "$RUNNER_TEMP/source" fetch --depth 2 "https://github.com/${GITHUB_REPOSITORY}.git" "${PATCH_COMMIT}"
git -C "$RUNNER_TEMP/source" cherry-pick --no-commit "${PATCH_COMMIT}"
- name: Run macOS platform connector test
working-directory: ${{ runner.temp }}/source
run: cargo test --manifest-path desktop/src-tauri/Cargo.toml native_websocket::tests::native_websocket_platform_tls_connector_is_available
- name: Install desktop dependencies
working-directory: ${{ runner.temp }}/source
run: just desktop-install-ci
- name: Build without updater artifacts or upstream signing
working-directory: ${{ runner.temp }}/source
run: |
set -euo pipefail
cat > desktop/src-tauri/tauri.private-ca.conf.json <<'EOF'
{ "bundle": { "macOS": { "minimumSystemVersion": "10.15" }, "createUpdaterArtifacts": false } }
EOF
cd desktop
pnpm tauri build --verbose --no-sign --features mesh-llm --config src-tauri/tauri.private-ca.conf.json
- name: Ad-hoc sign and rebuild the arm64 DMG
working-directory: ${{ runner.temp }}/source
run: |
set -euo pipefail
app_path="desktop/src-tauri/target/release/bundle/macos/Buzz.app"
mkdir -p "$RUNNER_TEMP/release/dmg-root"
codesign --force --deep --sign - "${app_path}"
codesign --verify --deep --strict --verbose=2 "${app_path}"
cp -R "${app_path}" "$RUNNER_TEMP/release/dmg-root/Buzz.app"
hdiutil create -volname Buzz -srcfolder "$RUNNER_TEMP/release/dmg-root" -ov -format UDZO "$RUNNER_TEMP/release/Buzz-${{ needs.approval.outputs.tag }}-private-ca-arm64.dmg"
- name: Create manifest, patch, and checksums
working-directory: ${{ runner.temp }}/source
run: |
set -euo pipefail
cat > "$RUNNER_TEMP/release/manifest.json" <<EOF
{"upstream_tag":"${{ needs.approval.outputs.tag }}","upstream_sha":"${{ needs.approval.outputs.source_sha }}","patch_sha":"${PATCH_COMMIT}","result_tree_sha":"$(git write-tree)","runner_architecture":"$(uname -m)","workflow_url":"${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"}
EOF
git diff --binary "${{ needs.approval.outputs.source_sha }}" > "$RUNNER_TEMP/release/private-ca.patch"
(cd "$RUNNER_TEMP/release" && shasum -a 256 *.dmg manifest.json private-ca.patch > SHA256SUMS)
printf '%s\n' '# Private-CA build test summary' '- upstream tag and SHA verified' '- just ci and focused connector test passed on Ubuntu' '- macOS platform connector test passed' '- ad-hoc signed DMG with updater disabled' > "$RUNNER_TEMP/release/TEST-SUMMARY.md"
- name: Attest the DMG
uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
with:
subject-path: ${{ runner.temp }}/release/*.dmg
- name: Publish fork prerelease and mark ticket built
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
release_tag="buzz-private-ca-${{ needs.approval.outputs.tag }}-r${GITHUB_RUN_NUMBER}"
gh release create "${release_tag}" "$RUNNER_TEMP/release/Buzz-${{ needs.approval.outputs.tag }}-private-ca-arm64.dmg" "$RUNNER_TEMP/release/SHA256SUMS" "$RUNNER_TEMP/release/manifest.json" "$RUNNER_TEMP/release/private-ca.patch" "$RUNNER_TEMP/release/TEST-SUMMARY.md" --prerelease --title "Buzz private-CA ${release_tag}" --notes "Built from ${{ needs.approval.outputs.tag }} at ${{ needs.approval.outputs.source_sha }} with patch ${PATCH_COMMIT}."
gh issue edit "${{ needs.approval.outputs.issue_number }}" --add-label built
gh issue comment "${{ needs.approval.outputs.issue_number }}" --body "Fork prerelease published: https://github.com/${GITHUB_REPOSITORY}/releases/tag/${release_tag}"
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -476,7 +476,7 @@ jobs:
if: github.repository == 'block/buzz'
runs-on: ubuntu-latest
# Digest-pinned like the SHA-pinned actions below; Renovate keeps it fresh.
container: ubuntu:22.04@sha256:0e0a0fc6d18feda9db1590da249ac93e8d5abfea8f4c3c0c849ce512b5ef8982
container: ubuntu:24.04@sha256:4fbb8e6a8395de5a7550b33509421a2bafbc0aab6c06ba2cef9ebffbc7092d90
needs: setup
timeout-minutes: 60
permissions:
Expand All @@ -498,7 +498,7 @@ jobs:
env:
DEBIAN_FRONTEND: noninteractive
run: |
# Must run first: bare ubuntu:22.04 ships without curl, wget, git, or
# Must run first: bare ubuntu:24.04 ships without curl, wget, git, or
# ca-certificates. activate-hermit bootstraps via curl+HTTPS (needs
# both), and actions/checkout falls back to a REST tarball without git.
# Running as root — no sudo needed.
Expand Down
33 changes: 33 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,38 @@
# Changelog

## v0.5.2

- feat(cli): mirror Desktop mention delivery ([#3330](https://github.com/block/buzz/pull/3330)) ([`7adc46268`](https://github.com/block/buzz/commit/7adc46268d5e93f0b1d4dc8e700af22815dcac1b))
- fix(desktop): deduplicate relay outage notification ([#3579](https://github.com/block/buzz/pull/3579)) ([`66e705492`](https://github.com/block/buzz/commit/66e7054928cc29395f828467c3e8c81b7408dd29))
- fix(desktop): reconcile thread arrivals at bottom ([#3585](https://github.com/block/buzz/pull/3585)) ([`b42a8d447`](https://github.com/block/buzz/commit/b42a8d447e3a2b85b2313dc4fdd123731fd8bba3))
- Improve emoji autocomplete matching ([#3571](https://github.com/block/buzz/pull/3571)) ([`259de6afb`](https://github.com/block/buzz/commit/259de6afbe0cc0d106e57ebdb2323064990e4122))
- Fix shared agent avatar import profiles ([#3578](https://github.com/block/buzz/pull/3578)) ([`324bd6b46`](https://github.com/block/buzz/commit/324bd6b464de5751e12abbd155376046ce3d2afc))
- Fix inline raster avatars in agent catalog ([#3581](https://github.com/block/buzz/pull/3581)) ([`7e9b77f72`](https://github.com/block/buzz/commit/7e9b77f72d82e019a99f074f1c9829be30c57ae1))
- feat(agent): make Gemini and MLflow-route models usable through databricks_v2 ([#3569](https://github.com/block/buzz/pull/3569)) ([`4a1ebf25c`](https://github.com/block/buzz/commit/4a1ebf25c782fc6a68f0a69e6f866f793a259a1f))


## v0.5.1

- perf(desktop): move observer-feed archive and decrypt commands off main thread ([#3415](https://github.com/block/buzz/pull/3415)) ([`294c8c821`](https://github.com/block/buzz/commit/294c8c821de51442a8c384c0bdb66b1a10224ca0))
- fix(desktop): preserve shared agent fidelity ([#3553](https://github.com/block/buzz/pull/3553)) ([`f7a3988ba`](https://github.com/block/buzz/commit/f7a3988ba13b590d9a55a7e8413fc3fb5ffbef18))
- feat(agent): route Claude/GPT model families to their native gateway wire ([#3538](https://github.com/block/buzz/pull/3538)) ([`6438dedf8`](https://github.com/block/buzz/commit/6438dedf83a9dbe1853e484326911bf6c7f1618c))
- Refine community invite limits ([#3529](https://github.com/block/buzz/pull/3529)) ([`24d90d128`](https://github.com/block/buzz/commit/24d90d1280a9325c6cbcf8eea30ac54db5afd2cb))
- feat(agent): fix Anthropic prompt caching with Databricks (+ MCP proxy/TLS passthrough) ([#3463](https://github.com/block/buzz/pull/3463)) ([`c405ad1d4`](https://github.com/block/buzz/commit/c405ad1d4b1da061c11b3d26761252d41dcc62d3))
- feat: add explicit entry for claude-opus-5 in model config ([#2831](https://github.com/block/buzz/pull/2831)) ([`90e058ebf`](https://github.com/block/buzz/commit/90e058ebf68137e048a409aec6616519379ff726))
- fix(desktop): clear stale thread new-message pill ([#3411](https://github.com/block/buzz/pull/3411)) ([`55a3ed7b9`](https://github.com/block/buzz/commit/55a3ed7b9217cee5b23e0a5441947dc929b2a38c))
- fix(ci): ratchet file sizes against the base tree ([#3352](https://github.com/block/buzz/pull/3352)) ([`9227bdf58`](https://github.com/block/buzz/commit/9227bdf58ad6664ae3c1078888f2181ec19c4da4))
- feat(desktop): apply WebKit rendering workarounds at startup on Linux ([#3271](https://github.com/block/buzz/pull/3271)) ([`3ece4461d`](https://github.com/block/buzz/commit/3ece4461df8a7b9663a8e68327483b8377d4086d))
- fix(desktop): stabilize flaky DM expansion E2E ordering assertions ([#2004](https://github.com/block/buzz/pull/2004)) ([`913d564ce`](https://github.com/block/buzz/commit/913d564ce0f35924291bf3eeab6508517a6d8d1f))
- fix(desktop): paint community rail full height ([#3382](https://github.com/block/buzz/pull/3382)) ([`1d3b810ad`](https://github.com/block/buzz/commit/1d3b810ad70d6325718ed91e723f32c4a376d5e1))
- feat(desktop): add custom harness inline from agent dialogs ([#3252](https://github.com/block/buzz/pull/3252)) ([`b0503d80c`](https://github.com/block/buzz/commit/b0503d80c298b1ece3b0a43b41d316829a3379e7))
- feat(desktop): refine agent catalog sharing ([#2439](https://github.com/block/buzz/pull/2439)) ([`a35771fc4`](https://github.com/block/buzz/commit/a35771fc441cdc3c6f517f419037206783b502d2))
- fix(desktop): keep drafts out of the Inbox All view ([#3217](https://github.com/block/buzz/pull/3217)) ([`3afa129ee`](https://github.com/block/buzz/commit/3afa129ee785cc74d921d0ba969254a8255c4cc0))
- fix(desktop): restore the inbox icon in the sidebar ([#3341](https://github.com/block/buzz/pull/3341)) ([`00ede2e7a`](https://github.com/block/buzz/commit/00ede2e7aa7eb95571b7db3ebbd163adbf6cf74e))
- fix(desktop): gate codex-acp on a minimum supported version ([#3254](https://github.com/block/buzz/pull/3254)) ([`4e3998f36`](https://github.com/block/buzz/commit/4e3998f36e36d68b9a93dcbd85f0864450bb8f5f))
- feat(cli): add users set-status command for NIP-38 profile status ([#3253](https://github.com/block/buzz/pull/3253)) ([`60158fce3`](https://github.com/block/buzz/commit/60158fce3e670f11bb35d42627857ccaea50ff06))
- fix(composer): scope multiline block formatting ([#3246](https://github.com/block/buzz/pull/3246)) ([`5457c947a`](https://github.com/block/buzz/commit/5457c947a74f5ba4b979f9c6411aa7626a858387))


## v0.5.0

- feat(invites): add use-limited invite links ([#3141](https://github.com/block/buzz/pull/3141)) ([`d500c2d5c`](https://github.com/block/buzz/commit/d500c2d5cf5d9aabe0ca4ebebfcafdbe5f5b7fd3))
Expand Down
Loading
Loading