Skip to content
Open
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
daafd0b
ci: add desktop-release-package workflow for fork CI
abraxas914 Jul 9, 2026
aab807f
feat(bridge): full desktop bridge rewrite — session persistence, imag…
abraxas914 Jul 8, 2026
02655f6
feat(conductor): enhanced service orchestration with error feedback a…
abraxas914 Jul 8, 2026
f20b528
feat(desktop): React frontend scaffold — Vite, stores, hooks, layout,…
abraxas914 Jul 8, 2026
a5832a4
feat(desktop): chat UI — Composer, MessageList, SessionList, channels
abraxas914 Jul 8, 2026
8e83710
feat(desktop): thread rendering — markdown pipeline, turn segments, U…
abraxas914 Jul 8, 2026
a569d73
feat(desktop): settings & model management — CRUD, provider presets, …
abraxas914 Jul 8, 2026
2aeed07
feat(desktop): token stats — per-prompt cost tracking, time filters, …
abraxas914 Jul 8, 2026
09baab4
feat(desktop): notifications & connection status — toast system, offl…
abraxas914 Jul 8, 2026
dbe3528
feat(desktop): theme system & i18n — dark/light mode, bilingual UI (z…
abraxas914 Jul 8, 2026
a7fa059
feat(tauri): native desktop shell — Tauri v2 config, packaging script…
abraxas914 Jul 8, 2026
d810008
ci: GitHub Actions desktop release workflow — 3-platform build matrix
abraxas914 Jul 8, 2026
de08a9f
test: bridge integration tests — submit, sessions, uploads, model swi…
abraxas914 Jul 8, 2026
b45aa28
feat(dmg): post-build repackage script — clean DMG with proper Finder…
abraxas914 Jul 9, 2026
7e2e401
chore(desktop): add build:dmg script that auto-runs post-dmg repackage
abraxas914 Jul 9, 2026
f39ae42
fix(desktop): programmatic window drag — replace broken CSS drag over…
abraxas914 Jul 9, 2026
a9ba5ff
fix(desktop): align fold button with traffic lights, restore Conducto…
abraxas914 Jul 9, 2026
e55d1d9
fix(desktop): stable panel collapse — keep toggle in-place, restore d…
abraxas914 Jul 9, 2026
735dc8e
fix(desktop): traffic light alignment, stacking context isolation, co…
abraxas914 Jul 9, 2026
9631fa4
refactor(desktop): replace drag strips with event delegation, fix tit…
abraxas914 Jul 9, 2026
02d9b5e
fix(ci): add .npmrc with legacy-peer-deps for React 18 + lobehub peer…
abraxas914 Jul 9, 2026
2252ec2
fix(ci): install ds_store Python package for macOS DMG layout step
abraxas914 Jul 9, 2026
b0894fc
fix(ci): use python3 -m pip for ds_store install (macOS runner path m…
abraxas914 Jul 9, 2026
5322087
fix(ci): restore Windows UCRT DLL bundling for python-build-standalone
abraxas914 Jul 9, 2026
e4a9f7c
docs(spec): update shell chrome spec to reflect event delegation arch…
abraxas914 Jul 9, 2026
e830a3b
Merge pull request #2 from abraxas914/desktop-react-rewrite
abraxas914 Jul 9, 2026
e558fa5
fix(desktop): bind ModelSelector to per-session bridge state (SSOT)
abraxas914 Jul 9, 2026
8fca7cc
fix(desktop): correct tauriInvoke param name for set_ga_source
abraxas914 Jul 9, 2026
581d7cd
feat(desktop): add Data Maintenance section in settings
abraxas914 Jul 9, 2026
769fc09
refactor(desktop): revise DataSection microcopy per three-layer spec
abraxas914 Jul 9, 2026
e2c8f0d
feat(desktop): add error routing for local repo connection failures
abraxas914 Jul 9, 2026
b2a832b
chore: remove .trellis from repo and add to .gitignore
abraxas914 Jul 9, 2026
50887e5
fix(desktop): bridge.ts must use Tauri IPC directly, not window.ga
abraxas914 Jul 9, 2026
02ac086
feat(desktop): Windows frameless chrome — stacked layout with self-dr…
abraxas914 Jul 9, 2026
b01fea7
feat(desktop): redesign fallback setup page — product-aligned microco…
abraxas914 Jul 9, 2026
5ede669
chore(desktop): remove unused imports in test files
abraxas914 Jul 9, 2026
dda5004
fix(desktop): correct cache rate formula — exclude output from denomi…
abraxas914 Jul 9, 2026
143423d
fix(desktop): async Tauri commands + import key refresh
abraxas914 Jul 9, 2026
b464d64
test(desktop): add DataSection and GaSourceBlock unit tests
abraxas914 Jul 9, 2026
11b57ae
ci: add desktop frontend test workflow
abraxas914 Jul 9, 2026
13d2918
fix(ci): use npm install and node 22 (no lockfile in repo)
abraxas914 Jul 9, 2026
5356c77
fix(ci): include workflow file in path trigger
abraxas914 Jul 9, 2026
218eb53
chore: remove internal roadmap doc that was committed by mistake
abraxas914 Jul 9, 2026
c2af50d
fix(desktop): use config-level decorations:false to kill Windows DWM …
abraxas914 Jul 9, 2026
9ee183c
chore(ci): unify SHA256 checksum filenames to .sha256 suffix
abraxas914 Jul 9, 2026
12eb388
fix(desktop): stop live stats polling from clobbering token snapshot
abraxas914 Jul 9, 2026
a8c943d
test(desktop): add token stats tests — cache rate formula and snapsho…
abraxas914 Jul 9, 2026
ec90ea8
fix(desktop): match provider icon for models with path prefix
abraxas914 Jul 9, 2026
6d2a541
fix(desktop): open external links in system browser instead of in-app
abraxas914 Jul 9, 2026
315e586
feat(desktop/win): lifecycle optimization — tray, shortcut prompt, br…
abraxas914 Jul 9, 2026
f262bdc
feat(desktop): user bubble expand toggle and code block expandable se…
abraxas914 Jul 9, 2026
bab2f57
fix(ci): prefix unused output param in token-stats test to pass tsc
abraxas914 Jul 9, 2026
e94bd44
fix(desktop): prevent expand toggle from disappearing after unclamping
abraxas914 Jul 9, 2026
e2a0c14
Merge branch 'chore/sha256-naming'
abraxas914 Jul 9, 2026
dc25c7a
fix(desktop): skip shortcut prompt on macOS
abraxas914 Jul 9, 2026
c5df175
fix(desktop): restore macOS traffic lights and fix settings trust in …
abraxas914 Jul 9, 2026
b596d30
fix(ci): remove stale cfg(macos) gate on valid_ga_source_override
abraxas914 Jul 10, 2026
41139b6
fix(desktop): resolve model selection race condition and session life…
abraxas914 Jul 10, 2026
696ddfc
fix(desktop): harden Windows bootstrap lifecycle
abraxas914 Jul 10, 2026
d175d93
fix(desktop): inject llm_history when recreating agent after bridge r…
abraxas914 Jul 10, 2026
46d6b73
Merge remote-tracking branch 'origin/main'
abraxas914 Jul 10, 2026
294eb27
feat(desktop): add LogTail/LogView components, refactor log display
abraxas914 Jul 10, 2026
c2a9fa9
fix(desktop): align Windows chrome layout
abraxas914 Jul 10, 2026
97b38f6
fix(desktop): enable log modal scrolling, add process log tabs, fix c…
abraxas914 Jul 10, 2026
93c0ba7
fix(desktop): add Windows portable E2E harness
abraxas914 Jul 10, 2026
f6e7643
fix(desktop): enlarge user message copy button hit target (24px → 32px)
abraxas914 Jul 10, 2026
c004585
docs(desktop): add product design spec for feature architecture, disc…
abraxas914 Jul 10, 2026
b175765
Merge remote-tracking branch 'abraxas/main'
abraxas914 Jul 10, 2026
a204efd
fix(bridge): isolate session model routing
abraxas914 Jul 10, 2026
9063915
fix(conductor): validate and publish model routing
abraxas914 Jul 10, 2026
842db2f
fix(desktop): bind Collab model selector to Conductor
abraxas914 Jul 10, 2026
55029f9
Merge pull request #6 from abraxas914/codex/fix-model-routing-isolation
abraxas914 Jul 10, 2026
9351456
docs(desktop): publish spec docs and sanitize DESIGN.md references
abraxas914 Jul 10, 2026
b7ef84b
docs(desktop): add model selection spec — per-session binding and fro…
abraxas914 Jul 10, 2026
677664d
docs(desktop): purge Hermes references, consolidate spec/ directory
abraxas914 Jul 10, 2026
16df10c
chore(desktop): remove stale debug docs (issues already resolved in c…
abraxas914 Jul 10, 2026
1e6803b
ci(desktop): remove --prerelease from release workflow
abraxas914 Jul 10, 2026
0547a9f
Merge remote-tracking branch 'origin/main'
abraxas914 Jul 10, 2026
33f90ad
Merge remote-tracking branch 'origin/main'
abraxas914 Jul 14, 2026
7e6bdc4
feat(desktop): harden token ledger and empty turns
abraxas914 Jul 17, 2026
1699663
test(desktop): add isolated WebdriverIO E2E harness (#7)
abraxas914 Jul 18, 2026
47d7ddb
fix(e2e): select main window before readiness (#8)
abraxas914 Jul 18, 2026
d0cf693
fix(desktop): preserve asset origin for main navigation (#9)
abraxas914 Jul 18, 2026
3c985d5
fix(e2e): isolate Windows desktop settings (#10)
abraxas914 Jul 18, 2026
961960c
fix(e2e): compare Windows sandbox identity (#11)
abraxas914 Jul 18, 2026
ac799b8
test(desktop): stabilize native recovery journey (#12)
abraxas914 Jul 18, 2026
11f9475
test(desktop): crash after scenario call two (#13)
abraxas914 Jul 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
157 changes: 157 additions & 0 deletions .github/workflows/desktop-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
name: Desktop Quality Gates

on:
push:
branches: [main, desktop-react-rewrite]
paths: &desktop_paths
- "frontends/cost_tracker.py"
- "frontends/desktop_bridge.py"
- "frontends/tests/**"
- "frontends/desktop/**"
- ".github/workflows/desktop-ci.yml"
- ".github/workflows/desktop-e2e-nightly.yml"
- ".github/workflows/desktop-release-package.yml"
pull_request:
branches: [main, desktop-react-rewrite]
paths: *desktop_paths
workflow_dispatch:

concurrency:
group: desktop-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

permissions:
contents: read

env:
PYTHONUNBUFFERED: "1"
CARGO_TERM_COLOR: always

jobs:
contracts:
name: TypeScript, Vitest, Python, Rust
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4

- name: Install Tauri system dependencies
run: >-
sudo apt-get update && sudo apt-get install -y
libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf xvfb

- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: frontends/desktop/package-lock.json

- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
cache-dependency-path: frontends/desktop/e2e/requirements.txt

- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
workspaces: frontends/desktop/src-tauri -> target

- name: Install desktop dependencies
working-directory: frontends/desktop
run: npm ci

- name: Install Python test runtime
run: python -m pip install -r frontends/desktop/e2e/requirements.txt

- name: Type check
working-directory: frontends/desktop
run: npx tsc --noEmit && npm run test:e2e-types

- name: Frontend and harness contracts
working-directory: frontends/desktop
run: npx vitest run

- name: Python contracts
run: python -m pytest -q frontends/tests

- name: Rust contracts (production feature set)
working-directory: frontends/desktop/src-tauri
run: cargo test

- name: Rust contracts (E2E feature set)
working-directory: frontends/desktop/src-tauri
run: cargo test --features e2e

- name: Production build excludes WDIO
working-directory: frontends/desktop
run: npm run test:e2e-isolation

browser-e2e:
name: Browser E2E
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: frontends/desktop/package-lock.json
- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
cache-dependency-path: frontends/desktop/e2e/requirements.txt
- name: Install dependencies
working-directory: frontends/desktop
run: npm ci
- name: Install bridge runtime
run: python -m pip install -r frontends/desktop/e2e/requirements.txt
- name: Run deterministic browser journeys
working-directory: frontends/desktop
run: npm run e2e:browser
- name: Upload failure evidence
if: failure()
uses: actions/upload-artifact@v4
with:
name: browser-e2e-${{ github.run_id }}
path: frontends/desktop/e2e-results
if-no-files-found: warn

linux-tauri-smoke:
name: Linux Tauri smoke
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Install Tauri system dependencies
run: >-
sudo apt-get update && sudo apt-get install -y
libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf xvfb
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: frontends/desktop/package-lock.json
- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
cache-dependency-path: frontends/desktop/e2e/requirements.txt
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
workspaces: frontends/desktop/src-tauri -> target
- name: Install dependencies
working-directory: frontends/desktop
run: npm ci
- name: Install bridge runtime
run: python -m pip install -r frontends/desktop/e2e/requirements.txt
- name: Build and drive native Tauri
working-directory: frontends/desktop
run: xvfb-run -a npm run e2e:desktop
- name: Upload failure evidence
if: failure()
uses: actions/upload-artifact@v4
with:
name: linux-tauri-e2e-${{ github.run_id }}
path: frontends/desktop/e2e-results
if-no-files-found: warn
89 changes: 89 additions & 0 deletions .github/workflows/desktop-e2e-nightly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: Desktop E2E Nightly

on:
schedule:
- cron: "30 18 * * *"
workflow_dispatch:

concurrency:
group: desktop-nightly-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
native:
name: Native ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04, windows-2025, macos-15]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Install Linux desktop dependencies
if: runner.os == 'Linux'
run: >-
sudo apt-get update && sudo apt-get install -y
libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf xvfb
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: frontends/desktop/package-lock.json
- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip
cache-dependency-path: frontends/desktop/e2e/requirements.txt
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
workspaces: frontends/desktop/src-tauri -> target
- name: Install Node dependencies
working-directory: frontends/desktop
run: npm ci
- name: Install bridge runtime
run: python -m pip install -r frontends/desktop/e2e/requirements.txt
- name: Native full suite (Linux)
if: runner.os == 'Linux'
working-directory: frontends/desktop
run: xvfb-run -a npm run e2e:desktop:full
- name: Native full suite (Windows/macOS)
if: runner.os != 'Linux'
working-directory: frontends/desktop
run: npm run e2e:desktop:full
- name: Upload evidence
if: always()
uses: actions/upload-artifact@v4
with:
name: native-${{ runner.os }}-${{ github.run_id }}
path: frontends/desktop/e2e-results
if-no-files-found: ignore

canary:
name: Real-model protocol canary
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: frontends/desktop/package-lock.json
- name: Install dependencies
working-directory: frontends/desktop
run: npm ci
- name: Run canary when dedicated credentials exist
working-directory: frontends/desktop
env:
GA_E2E_CANARY_BASE: ${{ secrets.GA_E2E_CANARY_BASE }}
GA_E2E_CANARY_KEY: ${{ secrets.GA_E2E_CANARY_KEY }}
GA_E2E_CANARY_MODEL: ${{ secrets.GA_E2E_CANARY_MODEL }}
run: |
if [ -z "$GA_E2E_CANARY_KEY" ]; then
echo "Dedicated canary credentials are not configured; skipping."
exit 0
fi
npm run e2e:canary
Loading