fix: UI polish — leave channel, thread panel lifecycle, agent form, and text fixes
- Fix leave channel: handle ErrOwnerCannotLeave with error display, remove all owned agents from channel - Close thread panel when navigating between channels/DMs - Remove Type dropdown from agent registration (agents are always AI; human accounts created via CLI) - Fix dashboard showing "Untitled conversation" — now shows last agent name - Fix "1 msgs" → "1 msg" singular form on dashboard - Fix conversation detail "-- N messages" → "— N message(s)" with em-dash - Hide "done" status badge in MessageList and conversation detail (consistent with DM view behavior) - Add thread reply buttons and reply count to channel and DM messages - Add agent selector for multi-agent users in channel and DM compose - Add "Join Channel" prompt for non-members in channel compose area - Show "(you)" indicator on channel member list for owned agents - Add agent detail page with messages endpoint - Improve release workflow and Dockerfile Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
f12824cda9
commit
69e926441e
+137
-39
@@ -5,40 +5,41 @@ on:
|
||||
tags:
|
||||
- "v*"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
packages: write
|
||||
|
||||
env:
|
||||
GO_VERSION: "1.25"
|
||||
NODE_VERSION: "20"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: Build & Release
|
||||
build:
|
||||
name: Build ${{ matrix.goos }}/${{ matrix.goarch }}
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
strategy:
|
||||
matrix:
|
||||
include:
|
||||
- goos: linux
|
||||
goarch: amd64
|
||||
suffix: ""
|
||||
- goos: linux
|
||||
goarch: arm64
|
||||
suffix: ""
|
||||
- goos: darwin
|
||||
goarch: amd64
|
||||
suffix: ""
|
||||
- goos: darwin
|
||||
goarch: arm64
|
||||
suffix: ""
|
||||
- goos: windows
|
||||
goarch: amd64
|
||||
suffix: ".exe"
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: "1.25"
|
||||
go-version: ${{ env.GO_VERSION }}
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "20"
|
||||
node-version: ${{ env.NODE_VERSION }}
|
||||
cache: npm
|
||||
cache-dependency-path: web/package-lock.json
|
||||
|
||||
@@ -51,60 +52,154 @@ jobs:
|
||||
rm -rf internal/web/dist
|
||||
cp -r web/build internal/web/dist
|
||||
|
||||
- name: Extract version from tag
|
||||
id: version
|
||||
run: echo "VERSION=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Build binary
|
||||
env:
|
||||
CGO_ENABLED: "0"
|
||||
GOOS: ${{ matrix.goos }}
|
||||
GOARCH: ${{ matrix.goarch }}
|
||||
run: |
|
||||
go build -ldflags "-s -w" -o synapbus-${{ matrix.goos }}-${{ matrix.goarch }}${{ matrix.suffix }} ./cmd/synapbus/
|
||||
SUFFIX=""
|
||||
if [ "${{ matrix.goos }}" = "windows" ]; then
|
||||
SUFFIX=".exe"
|
||||
fi
|
||||
go build \
|
||||
-ldflags "-s -w -X main.version=${{ steps.version.outputs.VERSION }}" \
|
||||
-o "synapbus${SUFFIX}" \
|
||||
./cmd/synapbus/
|
||||
|
||||
- name: Create archive
|
||||
run: |
|
||||
ARCHIVE_NAME="synapbus-${{ matrix.goos }}-${{ matrix.goarch }}"
|
||||
if [ "${{ matrix.goos }}" = "windows" ]; then
|
||||
zip "${ARCHIVE_NAME}.zip" synapbus.exe
|
||||
else
|
||||
tar czf "${ARCHIVE_NAME}.tar.gz" synapbus
|
||||
fi
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: synapbus-${{ matrix.goos }}-${{ matrix.goarch }}
|
||||
path: synapbus-${{ matrix.goos }}-${{ matrix.goarch }}${{ matrix.suffix }}
|
||||
path: synapbus-*.tar.gz
|
||||
if-no-files-found: ignore
|
||||
|
||||
publish:
|
||||
name: Publish Release
|
||||
needs: release
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: matrix.goos == 'windows'
|
||||
with:
|
||||
name: synapbus-${{ matrix.goos }}-${{ matrix.goarch }}-zip
|
||||
path: synapbus-*.zip
|
||||
if-no-files-found: ignore
|
||||
|
||||
homebrew:
|
||||
name: Generate Homebrew Formula
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: artifacts
|
||||
merge-multiple: true
|
||||
|
||||
- name: Extract version from tag
|
||||
id: version
|
||||
run: echo "VERSION=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Calculate checksums and generate formula
|
||||
run: |
|
||||
DARWIN_AMD64_SHA=$(sha256sum artifacts/synapbus-darwin-amd64.tar.gz | awk '{print $1}')
|
||||
DARWIN_ARM64_SHA=$(sha256sum artifacts/synapbus-darwin-arm64.tar.gz | awk '{print $1}')
|
||||
LINUX_AMD64_SHA=$(sha256sum artifacts/synapbus-linux-amd64.tar.gz | awk '{print $1}')
|
||||
LINUX_ARM64_SHA=$(sha256sum artifacts/synapbus-linux-arm64.tar.gz | awk '{print $1}')
|
||||
VERSION="${{ steps.version.outputs.VERSION }}"
|
||||
REPO="https://github.com/${{ github.repository }}"
|
||||
|
||||
cat > synapbus.rb <<FORMULA
|
||||
# typed: false
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Synapbus < Formula
|
||||
desc "Local-first, MCP-native agent-to-agent messaging service"
|
||||
homepage "${REPO}"
|
||||
version "${VERSION}"
|
||||
license "Apache-2.0"
|
||||
|
||||
on_macos do
|
||||
if Hardware::CPU.intel?
|
||||
url "${REPO}/releases/download/${GITHUB_REF_NAME}/synapbus-darwin-amd64.tar.gz"
|
||||
sha256 "${DARWIN_AMD64_SHA}"
|
||||
end
|
||||
if Hardware::CPU.arm?
|
||||
url "${REPO}/releases/download/${GITHUB_REF_NAME}/synapbus-darwin-arm64.tar.gz"
|
||||
sha256 "${DARWIN_ARM64_SHA}"
|
||||
end
|
||||
end
|
||||
|
||||
on_linux do
|
||||
if Hardware::CPU.intel?
|
||||
url "${REPO}/releases/download/${GITHUB_REF_NAME}/synapbus-linux-amd64.tar.gz"
|
||||
sha256 "${LINUX_AMD64_SHA}"
|
||||
end
|
||||
if Hardware::CPU.arm?
|
||||
url "${REPO}/releases/download/${GITHUB_REF_NAME}/synapbus-linux-arm64.tar.gz"
|
||||
sha256 "${LINUX_ARM64_SHA}"
|
||||
end
|
||||
end
|
||||
|
||||
def install
|
||||
bin.install "synapbus"
|
||||
end
|
||||
|
||||
test do
|
||||
assert_match version.to_s, shell_output("#{bin}/synapbus --version")
|
||||
end
|
||||
end
|
||||
FORMULA
|
||||
|
||||
# Remove leading whitespace from heredoc
|
||||
sed -i 's/^ //' synapbus.rb
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: homebrew-formula
|
||||
path: synapbus.rb
|
||||
|
||||
release:
|
||||
name: GitHub Release
|
||||
needs: [build, homebrew]
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: artifacts
|
||||
merge-multiple: true
|
||||
|
||||
- name: List artifacts
|
||||
run: ls -la artifacts/
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
generate_release_notes: true
|
||||
files: artifacts/*
|
||||
files: |
|
||||
artifacts/synapbus-*.tar.gz
|
||||
artifacts/synapbus-*.zip
|
||||
artifacts/synapbus.rb
|
||||
|
||||
docker:
|
||||
name: Docker
|
||||
needs: release
|
||||
name: Docker Image
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
packages: write
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "20"
|
||||
cache: npm
|
||||
cache-dependency-path: web/package-lock.json
|
||||
|
||||
- name: Build web frontend
|
||||
run: |
|
||||
cd web && npm install --legacy-peer-deps && npm run build
|
||||
|
||||
- name: Copy web assets
|
||||
run: |
|
||||
rm -rf internal/web/dist
|
||||
cp -r web/build internal/web/dist
|
||||
- name: Extract version from tag
|
||||
id: version
|
||||
run: echo "VERSION=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- uses: docker/setup-qemu-action@v3
|
||||
|
||||
@@ -116,13 +211,14 @@ jobs:
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Extract version tag
|
||||
- name: Docker metadata
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: ghcr.io/smart-mcp-proxy/synapbus
|
||||
images: ghcr.io/synapbus/synapbus
|
||||
tags: |
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=raw,value=latest
|
||||
|
||||
- uses: docker/build-push-action@v6
|
||||
@@ -130,6 +226,8 @@ jobs:
|
||||
context: .
|
||||
push: true
|
||||
platforms: linux/amd64,linux/arm64
|
||||
build-args: |
|
||||
VERSION=${{ steps.version.outputs.VERSION }}
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
cache-from: type=gha
|
||||
|
||||
Reference in New Issue
Block a user