Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
ad4ce38
add console, simulate, agent dev commands with TUI and protobuf IPC
theomonnom Apr 2, 2026
e47f79f
improve agent detection error messages and consistency
theomonnom Apr 2, 2026
5f2cf6f
improve error messages, entrypoint detection, and IPC safety
theomonnom Apr 2, 2026
f2a132f
add console build docs and PortAudio submodule check
theomonnom Apr 2, 2026
78a6094
add blank line after user/agent messages in console TUI
theomonnom Apr 2, 2026
8be6798
remove duplicate -lc++ linker flags, cgo handles C++ linking automati…
theomonnom Apr 2, 2026
3df43a6
fix console TUI rendering, add startup spinner and handoff support
theomonnom Apr 2, 2026
61a5803
remove local replace directives, use published server-sdk-go
theomonnom Apr 3, 2026
d10d751
update server-sdk-go to include complete AgentSimulationClient
theomonnom Apr 3, 2026
e90f904
update server-sdk-go to merged main with SimulationAdmin grant
theomonnom Apr 3, 2026
661d54a
Fix agent watcher exitCh race on restart
theomonnom Apr 20, 2026
b69df70
Remove default num-simulations, let server decide
theomonnom Apr 20, 2026
3637354
Show 'Generating scenarios' without count when num-simulations not sp…
theomonnom Apr 21, 2026
d98d896
Improve agent simulate TUI setup and log display
theomonnom May 1, 2026
ef2393d
Read NumSimulations from server response
theomonnom May 8, 2026
6f6edb4
Use larger circle icon (⏺) in TUI
theomonnom May 8, 2026
74c34fd
Integrate save scenario overlay, show labels in job list, fix selecte…
theomonnom May 8, 2026
f9763a6
Softer yellow, use ⏺ for pending icons
theomonnom May 8, 2026
ff16c48
Pad selected row to max label width for consistent highlight
theomonnom May 8, 2026
3a994d9
Remove q to quit, only ctrl+c exits
theomonnom May 8, 2026
9385f9f
CI mode, TUI improvements, log filtering, and entrypoint fix
theomonnom May 11, 2026
6cf8fe0
Use positional arg for entrypoint instead of --entrypoint flag
theomonnom May 11, 2026
127ac17
Address PR review: remove redundant flags, fix console text mode
theomonnom May 11, 2026
32b9e0e
Put start/dev/console/simulate behind console build tag, revert CI ch…
theomonnom May 11, 2026
4746a54
Add CI job for no-console, no-CGO build verification
theomonnom May 11, 2026
08618d4
Remove build-binaries.yaml workflow
theomonnom May 11, 2026
5b998c5
Remove Homebrew formula
theomonnom May 11, 2026
220f67b
Restore .goreleaser.yml
theomonnom May 11, 2026
22e399f
Rename .goreleaser.yml to .goreleaser.yaml
theomonnom May 11, 2026
feef68f
Remove console build section from README
theomonnom May 11, 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
Binary file modified .github/banner_dark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
158 changes: 147 additions & 11 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,32 +20,168 @@ on:
pull_request:
branches: [ main ]

permissions:
contents: read

jobs:
build:
build-no-console:
name: Build (no console, no CGO)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/cache@v5
with:
path: |
~/go/pkg/mod
~/go/bin
~/.cache
key: livekit-cli

- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.25"

- name: Download Go modules
run: go mod download
- name: Build without console tag
env:
CGO_ENABLED: "0"
run: go build -o bin/lk ./cmd/lk

- name: Verify binary
run: bin/lk --help > /dev/null

lint-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
submodules: true

- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.25"

- name: Static Check
uses: dominikh/staticcheck-action@v1.4.0
with:
version: "latest"
install-go: false

- name: Run Go tests
- name: Test
run: go test -v ./...

build:
strategy:
fail-fast: false
matrix:
include:
- os: macos-latest
suffix: darwin_arm64
- os: ubuntu-latest
suffix: linux_amd64
zig_target: x86_64-linux-gnu.2.28
alsa_arch: amd64
alsa_triple: x86_64-linux-gnu
- os: ubuntu-latest
suffix: linux_arm64
zig_target: aarch64-linux-gnu.2.28
alsa_arch: arm64
alsa_triple: aarch64-linux-gnu
goarch: arm64
- os: ubuntu-latest
suffix: linux_arm
zig_target: arm-linux-gnueabihf.2.28
alsa_arch: armhf
alsa_triple: arm-linux-gnueabihf
goarch: arm
goarm: "7"
- os: ubuntu-latest
suffix: windows_amd64
zig_target: x86_64-windows-gnu
goos: windows
goarch: amd64
- os: ubuntu-latest
suffix: windows_arm64
zig_target: aarch64-windows-gnu
goos: windows
goarch: arm64
- os: ubuntu-latest
suffix: windows_arm
goos: windows
goarch: arm
goarm: "7"
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v6
with:
submodules: true

- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.25"

- name: Install Zig
if: matrix.zig_target
uses: mlugg/setup-zig@v2
with:
version: 0.14.1

- name: Install ALSA headers
if: matrix.alsa_arch
run: |
sudo dpkg --add-architecture ${{ matrix.alsa_arch }}
if [ "${{ matrix.alsa_arch }}" != "amd64" ]; then
CODENAME=$(lsb_release -cs)
# Restrict existing sources to amd64 to avoid 404s for foreign arch
for f in /etc/apt/sources.list.d/*.sources; do
grep -q '^Architectures:' "$f" || sudo sed -i '/^Types:/a Architectures: amd64 i386' "$f"
done
# Add ports.ubuntu.com for the foreign architecture
printf 'Types: deb\nURIs: http://ports.ubuntu.com/ubuntu-ports\nSuites: %s %s-updates\nComponents: main universe\nArchitectures: %s\nSigned-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg\n' \
"$CODENAME" "$CODENAME" "${{ matrix.alsa_arch }}" | sudo tee /etc/apt/sources.list.d/ports.sources
fi
sudo apt-get update
sudo apt-get install -y libasound2-dev:${{ matrix.alsa_arch }}

- name: Generate Windows import libraries
if: matrix.goos == 'windows' && matrix.zig_target
run: |
ZIG_LIB=$(zig env | jq -r '.lib_dir')
echo "ZIG_LIB=${ZIG_LIB}" >> "$GITHUB_ENV"
LIB_DIR="${ZIG_LIB}/libc/mingw/lib-common"
# Zig bundles MinGW .def files but lld needs .a import libraries.
# Go's compiled objects embed COFF /DEFAULTLIB directives (e.g. dbghelp,
# bcrypt) that lld resolves directly, bypassing Zig's lazy .def→.a
# generation. Pre-generate all import libraries so lld can find them.
MACHINE=${{ matrix.goarch == 'amd64' && 'i386:x86-64' || 'arm64' }}
for def in "${LIB_DIR}"/*.def; do
lib=$(basename "$def" .def)
[ -f "${LIB_DIR}/lib${lib}.a" ] && continue
zig dlltool -d "$def" -l "${LIB_DIR}/lib${lib}.a" -m "$MACHINE" 2>/dev/null || true
done

- name: Build
env:
CGO_ENABLED: ${{ (matrix.goos && !matrix.zig_target) && '0' || '1' }}
CC: ${{ matrix.zig_target && format('zig cc -target {0}', matrix.zig_target) || '' }}
CXX: ${{ matrix.zig_target && format('zig c++ -target {0}', matrix.zig_target) || '' }}
# Zig uses its own sysroot; point it at the system ALSA headers and libraries
CGO_CFLAGS: ${{ matrix.alsa_triple && format('-isystem /usr/include -isystem /usr/include/{0}', matrix.alsa_triple) || '' }}
CGO_LDFLAGS: ${{ matrix.alsa_triple && format('-L/usr/lib/{0}', matrix.alsa_triple) || '' }}
# -fms-extensions: enable __try/__except (SEH) used by WebRTC
# -DNTDDI_VERSION: target Windows 10 base to skip WinRT includes absent from MinGW
CGO_CXXFLAGS: ${{ matrix.goos == 'windows' && '-fms-extensions -DNTDDI_VERSION=0x0A000000' || '' }}
GOOS: ${{ matrix.goos || '' }}
GOARCH: ${{ matrix.goarch || '' }}
GOARM: ${{ matrix.goarm || '' }}
shell: bash
run: |
EXT=""; if [ "${GOOS:-}" = "windows" ]; then EXT=".exe"; fi
TAGS=""
if [ "$CGO_ENABLED" = "1" ]; then TAGS="-tags console"; fi
# Force external linking for Windows so Go uses zig cc (CC) as the linker,
# and add Zig's MinGW lib path so lld can find the generated import libraries.
EXTLD=""
if [ "${GOOS:-}" = "windows" ] && [ "$CGO_ENABLED" = "1" ]; then
EXTLD="-linkmode=external -extldflags '-L${ZIG_LIB}/libc/mingw/lib-common'"
fi
go build $TAGS -ldflags "-w -s $EXTLD" -o "bin/lk${EXT}" ./cmd/lk

- name: Verify binary
if: "!matrix.goos && !matrix.goarch"
run: bin/lk --help > /dev/null
Loading