Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
56e7833
refactor: decouple event emission from tauri AppHandle (P1.1 PR-A)
thirsty5034 Aug 1, 2026
08020b2
refactor: decouple tauri State/command macro from business layer (P1.…
thirsty5034 Aug 1, 2026
a3c3260
refactor: extract AppContext assembly, gate desktop-only modules (P1.…
thirsty5034 Aug 1, 2026
fcd9937
build: feature-gate Tauri deps, headless build strips Tauri (P1.2 PR-D)
thirsty5034 Aug 1, 2026
c7185d9
feat: add headless binary with axum server and command dispatch (P1.2…
thirsty5034 Aug 1, 2026
df72027
feat: add same-interface tauriBridge so WebUI can run headless (P1.2 …
thirsty5034 Aug 1, 2026
69d3676
ci: add headless-rust job guarding the no-default-features build (P1.…
thirsty5034 Aug 1, 2026
90a5d10
feat: serve WebUI statics with SPA fallback and same-origin base URL …
thirsty5034 Aug 1, 2026
a114e3b
fix(runtime): probe /proc for process-group liveness and pass -- to kill
thirsty5034 Aug 3, 2026
347994c
fix(headless): workspace picker, loopback rate-limit exemption, route…
thirsty5034 Aug 3, 2026
997232f
feat(gui): add HeadlessFolderPicker for workspace directory selection
thirsty5034 Aug 3, 2026
299ba9a
feat(gui): add common development directories to HeadlessFolderPicker…
thirsty5034 Aug 3, 2026
79e5264
fix(gui): simplify HeadlessFolderPicker to only include /workspace
thirsty5034 Aug 3, 2026
7933edc
chore(ci): add headless Docker build workflow and Dockerfile
thirsty5034 Aug 3, 2026
74bc685
fix(ci): upgrade Rust to 1.85 in Dockerfile for base16ct compat
thirsty5034 Aug 3, 2026
caaaaf0
fix(ci): upgrade Rust to 1.88 for lopdf/zip/time compat
thirsty5034 Aug 3, 2026
e72cd0b
fix(ci): upgrade Rust to 1.90 for libsqlite3-sys cfg_select compat
thirsty5034 Aug 3, 2026
eec37ee
fix(ci): upgrade Rust to 1.97 for libsqlite3-sys cfg_select (needs >=…
thirsty5034 Aug 3, 2026
3969203
fix(ci): install libclang-dev for rquickjs-sys bindgen in Docker build
thirsty5034 Aug 3, 2026
e222c1d
fix(ci): install protobuf-compiler for gateway proto compilation
thirsty5034 Aug 3, 2026
1f87aaf
fix(ci): point liveagent home at data volume so history db is writable
thirsty5034 Aug 3, 2026
55bba86
fix(ci): isolate cargo cache per arch to stop parallel buildx races
thirsty5034 Aug 3, 2026
04c02b1
fix(ci): embed WebUI dist in headless image and bind 0.0.0.0
thirsty5034 Aug 3, 2026
196c841
fix(ci): include src-tauri/icons in frontend build stage
thirsty5034 Aug 3, 2026
20705e2
fix(ci): add common debug/ops tools to headless runtime image
thirsty5034 Aug 3, 2026
7e0e8da
feat(headless): BFF proxy on main HTTP routes
thirsty5034 Aug 3, 2026
0064579
feat(headless): BFF proxy baseUrl from page origin in browser mode
thirsty5034 Aug 3, 2026
ea85083
fix(headless): match /proxy/{provider}/ trailing-slash route
thirsty5034 Aug 3, 2026
9f317af
feat(headless): layered dev-tools images (core/full) with mise-manage…
thirsty5034 Aug 4, 2026
a8a51a1
feat(headless): generator-driven adapters, same-origin security, CI g…
thirsty5034 Aug 4, 2026
4d992d1
fix(headless): correct stale auto-gen comments on hand-maintained dis…
thirsty5034 Aug 4, 2026
07bfc20
fix(docker): make toolchain reachable in non-interactive shells, add …
thirsty5034 Aug 4, 2026
8cbb9ae
docs: add headless WebUI screenshot placeholder for PR governance com…
thirsty5034 Aug 4, 2026
ea8cd6d
docs: add LiveAgent desktop UI screenshot for PR governance compliance
thirsty5034 Aug 4, 2026
f08bd23
Merge feat/headless-pr-g: headless server, WebUI, layered dev-tools i…
thirsty5034 Aug 5, 2026
00f7907
chore(docker): add standalone compose files for gateway/headless-core…
thirsty5034 Aug 5, 2026
bd94948
fix(ci): fix GUI biome lint errors and WebUI mirror drift
thirsty5034 Aug 5, 2026
7737724
fix(ci): fix remaining GUI test failures after headless merge
thirsty5034 Aug 5, 2026
aaa7a8e
fix(headless): raise /api/invoke body limit and add browser file-pick…
thirsty5034 Aug 6, 2026
b74ff46
chore(docker): persist mise toolchain via named volume, document comp…
thirsty5034 Aug 6, 2026
e5e7054
feat(headless): multipart file import endpoint, matching agent-gatewa…
thirsty5034 Aug 6, 2026
cae654e
fix(headless): keep multipart field match out of dispatch-coverage scan
thirsty5034 Aug 6, 2026
d7d1314
feat(docker): add minimal image profile, fix chown copy-up waste
thirsty5034 Aug 6, 2026
29657c9
fix(docker): reliable file perms in build, apt mirror + IPv4 for CN b…
thirsty5034 Aug 6, 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
56 changes: 56 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,62 @@ jobs:
CARGO_TERM_COLOR: always
run: cargo test --manifest-path crates/agent-gui/src-tauri/Cargo.toml integration_commands::mcp --lib

headless-rust:
name: Headless Rust Check
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v6

- name: Install protobuf compiler
run: |
sudo apt-get update
sudo apt-get install -y protobuf-compiler

- uses: dtolnay/rust-toolchain@stable

- uses: Swatinem/rust-cache@v2
with:
workspaces: crates/agent-gui/src-tauri

# P1.2: `--no-default-features` strips the whole Tauri runtime and runs
# the same business code over the axum HTTP/WebSocket bridge (see
# lib.rs `headless` module). Guard that build path against regressions;
# desktop-only deps must never leak into the headless feature set.
- name: Check headless backend
env:
CARGO_TERM_COLOR: always
run: cargo check --manifest-path crates/agent-gui/src-tauri/Cargo.toml --no-default-features

- name: Test headless backend
env:
CARGO_TERM_COLOR: always
run: cargo test --manifest-path crates/agent-gui/src-tauri/Cargo.toml --no-default-features --lib

- name: Build headless release binary
env:
CARGO_TERM_COLOR: always
run: cargo build --release --manifest-path crates/agent-gui/src-tauri/Cargo.toml --no-default-features

gen-verify:
name: Generator Drift Check
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v6

# Regenerate adapters.rs from the committed command manifest and assert
# the checked-in file is byte-identical (no drift). Also assert headless.rs
# dispatch arms cover every manifest command (and nothing more).
- name: Regenerate adapters.rs from manifest
run: bash scripts/gen_headless.sh

- name: No drift in adapters.rs
run: git diff --exit-code crates/agent-gui/src-tauri/src/commands/adapters.rs

- name: Dispatch coverage vs manifest
run: python3 scripts/verify_headless.py

mirror:
name: GUI/WebUI Mirror Check
runs-on: ubuntu-latest
Expand Down
80 changes: 80 additions & 0 deletions .github/workflows/liveagent-headless-tools.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
name: LiveAgent Headless Tools Image (minimal/core/full)

# 构建并发布三个镜像到 GHCR(main 分支 push / v* tag 触发,可手动 dispatch):
# ghcr.io/<owner>/liveagent-minimal (~0.7 GB, 仅基础工具 + liveagent,生产部署推荐)
# ghcr.io/<owner>/liveagent-core (~1.8 GB, 默认开发沙箱)
# ghcr.io/<owner>/liveagent-full (~2.2 GB, 含 Java 17 + Maven, Java 8 懒加载)
# 同一 Dockerfile(Dockerfile.headless-tools),用 TARGET_PROFILE 区分;
# minimal/core/full 共享 base 层,pull 时不重复下载。

on:
push:
branches:
- main
tags:
- "v*"
workflow_dispatch:
inputs:
tag:
description: Existing release tag to publish, for example v0.1.0
required: false

permissions:
contents: read
packages: write

jobs:
build-and-push:
name: Build and Push (${{ matrix.profile }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- profile: minimal
image: ghcr.io/${{ github.repository_owner }}/liveagent-minimal
- profile: core
image: ghcr.io/${{ github.repository_owner }}/liveagent-core
- profile: full
image: ghcr.io/${{ github.repository_owner }}/liveagent-full
steps:
- uses: actions/checkout@v6
with:
ref: ${{ github.event.inputs.tag || github.ref }}

- uses: docker/setup-qemu-action@v3

- uses: docker/setup-buildx-action@v3

- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ matrix.image }}
flavor: |
latest=false
tags: |
type=raw,value=${{ github.event.inputs.tag || github.ref_name }}
type=raw,value=latest,enable=${{ github.event.inputs.tag == '' && startsWith(github.ref, 'refs/tags/') }}

- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
file: Dockerfile.headless-tools
build-args: |
TARGET_PROFILE=${{ matrix.profile }}
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
provenance: false
Empty file added 1
Empty file.
59 changes: 59 additions & 0 deletions Cargo.lock

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

Loading