Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
4aceec1
Fix file tree edge fades at scroll boundaries (#665)
jsgrrchg Sep 30, 2026
6641095
Fix Markdown drag selection across table columns (#681)
katulevskiy Sep 30, 2026
0fab030
Question panel: paint an opaque background (#669)
katulevskiy Sep 30, 2026
651aa7a
Providers: update Homebrew-installed CLIs with brew (#661)
wintergraham Sep 30, 2026
cc8b147
Fix subagent lifecycle identity and restart recovery (#676)
katulevskiy Sep 30, 2026
626bccc
Appearance: add background positioning and zoom (#660)
Mohaddz Sep 30, 2026
710b06f
CI: seed the Rust cache from main and stop cancelling main runs
katulevskiy Sep 30, 2026
f4abe69
CI: run Windows tests in three parallel jobs on a cheaper profile
katulevskiy Sep 30, 2026
52a3481
CI: add a macOS workflow with one compile and parallel jobs
katulevskiy Sep 30, 2026
c286d11
CI: remove the macOS jobs from ui-tests and preview-tests
katulevskiy Sep 30, 2026
366b3c9
Fix drag-select failing when several transcripts share a frame (#632)
katulevskiy Sep 30, 2026
a2a593a
Bump version to v0.2.100
wingleeio Sep 30, 2026
c168ba5
windows: run the crate suites as two parallel jobs
katulevskiy Oct 1, 2026
fd3b2c0
footer
SinaKhalili Oct 1, 2026
9cb1de5
CI: add Linux test helpers (setup action, nextest, apt with retries)
katulevskiy Oct 1, 2026
878307a
CI: run Linux tests with nextest on a dev profile and one shared build
katulevskiy Oct 1, 2026
c72c66d
Add file tree context actions and drag-and-drop moves (#514)
jsgrrchg Oct 1, 2026
b3d7f48
Fix command and skill labels in the message queue (#682)
jsgrrchg Oct 1, 2026
f1297c3
Merge pull request #691 from zeronsh/footer-note
SinaKhalili Oct 1, 2026
42926c8
Right panel tabs: close button on the right (#587)
jsgrrchg Oct 1, 2026
a73fa8f
Add optional compact model picker and effort controls (#471)
gaelcado Oct 1, 2026
b42fc2b
Bump version to v0.2.101
wing-anara Oct 1, 2026
cff6a9e
Merge pull request #692 from katulevskiy/ci-seed-rust-cache
wingleeio Oct 1, 2026
7a472fc
Merge pull request #693 from katulevskiy/ci-windows-fast
wingleeio Oct 1, 2026
b7404fb
Merge remote-tracking branch 'origin/main' into pr-694
wingleeio Oct 1, 2026
5d5d935
CI: cover cursor paths in ui-tests, verify nextest after cache restor…
wingleeio Oct 1, 2026
2249a11
Merge ci-linux-fast (#694) into ci-macos-fast
wingleeio Oct 1, 2026
7aed43b
CI(macos): run CoreText tests on macOS, drop /etc/hosts patch, harden…
wingleeio Oct 1, 2026
a5c00e0
CI(macos): run the macOS jobs on macos-latest, as before
wingleeio Oct 1, 2026
0f7ae6f
Merge pull request #694 from katulevskiy/ci-linux-fast
wingleeio Oct 1, 2026
27480d9
OpenCode 2.x: fix instant "Run failed" (cold version probe), show sta…
wingleeio Oct 1, 2026
80b946b
Add opt-in on-device dictation to the desktop composer (#591)
gaelcado Oct 1, 2026
ae4181f
Fix the compact panel's model name; test settings survive navigation …
wing-anara Oct 2, 2026
64ad6f6
Bump version to v0.2.102
wing-anara Oct 2, 2026
9782693
Scope composer mic and attach hover fades per instance (#740)
jsgrrchg Oct 2, 2026
01832f2
MCP: create standalone sessions on a selected device and project (#706)
jsgrrchg Oct 2, 2026
c14d457
Let the composer's session branch label use free width and fade on ov…
armans-code Oct 2, 2026
542febc
Toggle fast mode with F in the compact model picker (#745)
armans-code Oct 2, 2026
1f7b74a
Todo: dedicated panel for the agent's checklist (#707)
katulevskiy Oct 2, 2026
55f5ed4
CI(macos): give macos-native the old job's 45 minute limit
wingleeio Oct 2, 2026
e94c49a
Fix compact model picker browsing across providers (#749)
katulevskiy Oct 2, 2026
67a1c1e
Merge pull request #695 from katulevskiy/ci-macos-fast
wingleeio Oct 2, 2026
56dc5ff
CI: pin every action to a commit SHA, keep pins current with Dependabot
wingleeio Oct 2, 2026
c78bb1c
Rename threads and side chats inline instead of in a dialog
jsgrrchg Oct 2, 2026
46bedec
Test the inline rename in both full and compact sidebar rows
wingleeio Oct 2, 2026
69e64ef
Merge pull request #750 from zeronsh/ci/pin-actions
wingleeio Oct 2, 2026
1c83cda
Merge pull request #751 from jsgrrchg/zeron/inline-thread-rename-impl…
wingleeio Oct 3, 2026
2a88477
Fix Shift+Backspace in composer and palette inputs (#757)
katulevskiy Oct 3, 2026
612df51
fix(preview): leave authentication callback listeners unprobed (#763)
katulevskiy Oct 3, 2026
e96eccb
Keep activity loaders pulsing with system reduced motion (#754)
katulevskiy Oct 3, 2026
edac0d7
Fix Windows drive paths in the project folder picker (#727)
notsapinho Oct 3, 2026
f9a4a18
Convert BMP attachments to PNG so agents can read them (#739)
notsapinho Oct 3, 2026
e2a7706
Add per-project new chat button and archive tooltip to the sidebar (#…
notsapinho Oct 3, 2026
9e1a111
Render Mermaid diagrams in chat replies (#760)
jsgrrchg Oct 3, 2026
dbb639b
Group projects by git identity, plus Zeron Icons and rolling labels (…
wing-anara Oct 5, 2026
9b37730
Bump version to v0.2.103
wing-anara Oct 5, 2026
73bd3c8
Composer: mention images and files as chips (#775)
notsapinho Oct 5, 2026
3ef98ec
Bump version to v0.2.104
wingleeio Oct 5, 2026
16d42a6
Simplify README and refresh its screenshot
wing-anara Oct 5, 2026
9ac03a5
Add Korean and Japanese READMEs
wing-anara Oct 5, 2026
c8eb752
README: replace broken DeepWiki badge with a text link
wing-anara Oct 5, 2026
3d4bfd1
Unify the sidebar project filter by repository identity (#811)
wing-anara Oct 5, 2026
d5c1cdc
Pin chip padding to Geist so insets don't follow the UI font (#816)
jsgrrchg Oct 6, 2026
8e6da95
Fix iOS showing fixture conversations when a session fails to open (#…
jsgrrchg Oct 7, 2026
4a5fb8b
Internal session plumbing and packaging cleanup (#819)
jsgrrchg Oct 7, 2026
9e83cee
Bump version to v0.2.105
wing-anara Oct 7, 2026
970f41f
Fold dated Claude snapshot IDs into curated model rows (#835)
wingleeio Oct 7, 2026
8930cd1
Fix voice helper compatibility with Codex 0.161 (#834)
jsgrrchg Oct 7, 2026
916cb1c
Bump version to v0.2.106
wingleeio Oct 7, 2026
8646bde
Cut startup memory from ~700 MB to ~200 MB on large local profiles (#…
neo773 Oct 8, 2026
e5466c5
Windows browser, image previews in tool calls, selectable tool output…
Master0fFate Oct 8, 2026
037f4c1
Engine: keep turn snapshots out of the checkout's object database (#820)
katulevskiy Oct 8, 2026
91fd851
Harden Claude/Codex adapters: no early "done", Stop kills, sends neve…
wingleeio Oct 8, 2026
565b49c
Bump version to v0.2.107
wingleeio Oct 8, 2026
e799aec
Fix remote sends stranded by mobile suspension and lost host wakes (#…
katulevskiy Oct 8, 2026
0ab65ff
Explorer: group finished subagents, show running counts
katulevskiy Sep 29, 2026
09d07f0
Explorer button: pulse and count badge for running subagents
katulevskiy Sep 29, 2026
9df936c
Sidebar: running-subagents pill takes the time stamp's place
katulevskiy Sep 29, 2026
cd0562e
Running-count pill and badge: centre the digits
katulevskiy Sep 29, 2026
956728c
Running count: centre digits by font metrics, drop hand-tuned offsets
katulevskiy Sep 29, 2026
f8a8688
Running-count pill: hang dot and digits off one baseline; balance the…
katulevskiy Sep 29, 2026
087c914
Titlebar count badge: paint it so the digit is centred exactly
katulevskiy Sep 29, 2026
c7dfc37
Add running_subagents to Session fixtures added on main
wing-anara Oct 8, 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
  •  
  •  
  •  
80 changes: 80 additions & 0 deletions .github/actions/linux-ci/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
name: Linux Rust CI setup
description: >-
Rust toolchain, cargo-nextest, optional apt packages (with a cached .deb
directory) and the main-seeded Rust cache for Linux test jobs. Run
actions/checkout first.

inputs:
rust-cache:
description: >-
rust-cache shared key. Jobs with the same key share one cache, so they
must have the same dependency graph.
required: true
save-rust-cache:
description: >-
Whether this job may save the cache when it runs on main. Give it to
exactly one job per key. Pull requests never save.
default: 'false'
apt-packages:
description: apt packages to install (space separated). Nothing is installed when empty.
default: ''
apt-cache:
description: Name of the cached .deb directory for apt-packages (one per package list).
default: ''
apt-recommends:
description: Install recommended packages too ('true' or 'false').
default: 'false'

runs:
using: composite
steps:
- name: Rust toolchain
shell: bash
run: rustup show active-toolchain || rustup toolchain install

# apt mirrors on hosted runners occasionally stall for minutes; apt-install.sh
# bounds and retries the download and uses a directory of .debs that main
# saves to the cache (pull requests only restore it).
- name: Restore apt packages
id: apt-cache
if: inputs.apt-packages != ''
uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: ~/apt-debs/*.deb
key: apt-debs-v1-${{ inputs.apt-cache }}-${{ hashFiles('scripts/ci/apt-install.sh') }}
- name: Install system packages
if: inputs.apt-packages != ''
shell: bash
env:
APT_RECOMMENDS: ${{ inputs.apt-recommends == 'true' && '1' || '0' }}
APT_PACKAGES: ${{ inputs.apt-packages }}
run: |
# shellcheck disable=SC2086 # the package list is word-split on purpose
bash scripts/ci/apt-install.sh $APT_PACKAGES
- name: Save apt packages
if: inputs.apt-packages != '' && github.ref == 'refs/heads/main' && steps.apt-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: ~/apt-debs/*.deb
key: apt-debs-v1-${{ inputs.apt-cache }}-${{ hashFiles('scripts/ci/apt-install.sh') }}

# Exported for the rest of the job. Tests and the browser fixture are built in
# the dev profile without debug info (smaller, faster to link). CARGO_* variables
# are part of the rust-cache key, so every job sharing a cache must set the same.
- name: Build settings
shell: bash
run: echo "CARGO_PROFILE_DEV_DEBUG=0" >> "$GITHUB_ENV"

- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
with:
prefix-key: ci-linux-v1
shared-key: ${{ inputs.rust-cache }}
add-job-id-key: false
save-if: ${{ inputs.save-rust-cache == 'true' && github.ref == 'refs/heads/main' }}
cache-on-failure: true

# After the cache restore, so the checksum-verified binary is the one that
# runs (rust-cache restores ~/.cargo/bin).
- name: Install cargo-nextest
shell: bash
run: bash scripts/ci/install-nextest.sh
54 changes: 54 additions & 0 deletions .github/actions/windows-ci-setup/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Windows CI setup
description: >-
Prepare a Windows runner for the Windows test jobs: toolchain, shader
compiler, a cheaper release profile for the CI builds, and the Rust cache.

runs:
using: composite
steps:
- name: Disable Defender real-time scanning
shell: pwsh
# Hosted runners are ephemeral and only build this repository; scanning
# every file rustc writes slows builds down. Best effort: warn and carry
# on if the runner image does not allow it.
run: |
try { Set-MpPreference -DisableRealtimeMonitoring $true -ErrorAction Stop }
catch { Write-Warning "Could not disable Defender real-time scanning: $_" }
- name: Rust toolchain
shell: pwsh
run: rustup show active-toolchain || rustup toolchain install
- name: Locate Windows SDK shader compiler
shell: pwsh
run: |
$fxc = Get-ChildItem "${env:ProgramFiles(x86)}/Windows Kits/10/bin/*/x64/fxc.exe" |
Sort-Object FullName -Descending | Select-Object -First 1
if (-not $fxc) { throw 'Windows SDK fxc.exe is required for GPUI release shaders' }
"GPUI_FXC_PATH=$($fxc.FullName)" >> $env:GITHUB_ENV
- name: Cheaper release profile for CI builds
shell: pwsh
# CI only: the binaries built and tested here are NOT the shipped ones
# (release.yml still builds those with the committed profile). Thin LTO is
# off and the workspace's own crates are built at opt-level 0; third-party
# dependencies (gpui, tokio, ...) keep the release opt-level. Written to
# $CARGO_HOME/config.toml so Cargo.toml is untouched and every cargo
# invocation in the job, including the ones inside
# scripts/package-windows.ps1, picks it up.
run: |
$members = (cargo metadata --no-deps --format-version 1 | ConvertFrom-Json).packages.name
$config = @('[profile.release]', 'lto = false')
foreach ($name in $members) {
$config += "[profile.release.package.`"$name`"]"
$config += 'opt-level = 0'
}
$cargoHome = if ($env:CARGO_HOME) { $env:CARGO_HOME } else { Join-Path $env:USERPROFILE '.cargo' }
Add-Content -LiteralPath (Join-Path $cargoHome 'config.toml') -Value $config
Write-Host "opt-level 0 for $($members.Count) workspace crates: $($members -join ', ')"
- uses: Swatinem/rust-cache@6323deb102c322ba6fcbdcafc7e3dddab59af2b6 # v2.9.2
with:
# Only main writes the cache; PRs restore it.
save-if: ${{ github.ref == 'refs/heads/main' }}
cache-on-failure: true
# Workspace crates are rebuilt on every change anyway and are cheap at
# opt-level 0, so keep them out of the cache. Each job gets its own
# cache (rust-cache keys on the job id by default).
cache-workspace-crates: false
13 changes: 13 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
version: 2
updates:
# Workflow actions are pinned to commit SHAs (with the version in a comment);
# this keeps the pins current. One grouped PR per week.
- package-ecosystem: github-actions
directories:
- /
- /.github/actions/*
schedule:
interval: weekly
groups:
github-actions:
patterns: ['*']
44 changes: 30 additions & 14 deletions .github/workflows/cursor-compatibility.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,16 @@ on:
- 'Cargo.lock'
- 'scripts/*cursor-sdk*'
- '.github/workflows/cursor-*.yml'
push:
branches: [main]
paths:
- 'crates/harness/**'
- 'crates/doc/**'
- 'crates/engine/**'
- 'Cargo.toml'
- 'Cargo.lock'
- 'scripts/*cursor-sdk*'
- '.github/workflows/cursor-*.yml'
workflow_dispatch:
workflow_call:
permissions:
Expand All @@ -18,11 +28,10 @@ jobs:
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: '22'
- uses: Swatinem/rust-cache@v2
- name: Dependency updater validation
run: python3 scripts/test-update-cursor-sdk.py
- name: Install the exact SDK selected by this engine
Expand All @@ -31,14 +40,21 @@ jobs:
npm install --prefix "$RUNNER_TEMP/cursor-sdk-contract" --ignore-scripts --no-audit --no-fund "$pin"
- name: Actual SDK token expiry, stream invalidation, and transient auth recovery
run: node scripts/test-cursor-sdk-auth.mjs "$RUNNER_TEMP/cursor-sdk-contract/node_modules/@cursor/sdk"
- name: Harness compatibility, steering, and session recovery
run: cargo test --locked -p zeron-harness
- name: Durable commands and engine message delivery
run: |
cargo test --locked -p zeron-doc
cargo test --locked -p zeron-engine --test message_queue
cargo test --locked -p zeron-engine --lib sessions::tests
- name: Native Pi RPC driver
run: |
cargo test --locked -p zeron-harness --features native-fixture --test pi_rpc
cargo test --locked -p zeron-engine --test pi_resume

# The Rust half (harness compatibility, steering, session recovery, durable
# commands, message delivery, native Pi RPC) is part of the `core-tests` job
# of ui-tests.yml, which already runs on pull requests and on main with a
# superset of this workflow's paths. Run it here only for the callers that
# do not get that: release.yml (tag push), cursor-sdk-update.yml (manual
# dispatch on the update branch) and manual runs.
rust-tests:
if: ${{ github.event_name != 'pull_request' && !(github.event_name == 'push' && github.ref == 'refs/heads/main') }}
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- uses: ./.github/actions/linux-ci
with:
rust-cache: core # saved by core-tests in ui-tests.yml
- name: Harness, engine, sync, update, doc and preview tests
run: scripts/ci/test-core.sh
4 changes: 2 additions & 2 deletions .github/workflows/cursor-sdk-update.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ jobs:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: '22'
- name: Check stable SDK version
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
# the token through job env and gate on that instead.
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
with:
# `github.event.before` may precede several commits in a batched push.
fetch-depth: 0
Expand All @@ -43,7 +43,7 @@ jobs:
else
echo "changed=false" >> "$GITHUB_OUTPUT"
fi
- uses: actions/setup-node@v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
if: steps.changed.outputs.changed == 'true'
with:
node-version: 22
Expand Down Expand Up @@ -72,7 +72,7 @@ jobs:
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
with:
fetch-depth: 0
- name: detect landing changes
Expand All @@ -89,7 +89,7 @@ jobs:
else
echo "changed=false" >> "$GITHUB_OUTPUT"
fi
- uses: actions/setup-node@v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
if: steps.changed.outputs.changed == 'true'
with:
node-version: 22
Expand All @@ -108,7 +108,7 @@ jobs:
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
with:
fetch-depth: 0
- name: detect www-redirect changes
Expand All @@ -125,7 +125,7 @@ jobs:
else
echo "changed=false" >> "$GITHUB_OUTPUT"
fi
- uses: actions/setup-node@v4
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
if: steps.changed.outputs.changed == 'true'
with:
node-version: 22
Expand Down
12 changes: 7 additions & 5 deletions .github/workflows/linux-installer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ on:
- 'edge/src/install.sh'
- 'scripts/package-linux.sh'
- 'scripts/test-linux-desktop-entry.sh'
- 'scripts/ci/apt-install.sh'
- 'dist/zeron.desktop'
- 'dist/zeron.png'
- '.github/workflows/linux-installer.yml'
Expand All @@ -15,6 +16,7 @@ on:
- 'edge/src/install.sh'
- 'scripts/package-linux.sh'
- 'scripts/test-linux-desktop-entry.sh'
- 'scripts/ci/apt-install.sh'
- 'dist/zeron.desktop'
- 'dist/zeron.png'
- '.github/workflows/linux-installer.yml'
Expand All @@ -25,18 +27,18 @@ permissions:

concurrency:
group: linux-installer-${{ github.ref }}
cancel-in-progress: true
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
desktop-entry:
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- name: Desktop entry validator
run: |
sudo apt-get update -qq -o Dir::Etc::sourcelist="sources.list.d/ubuntu.sources" -o Dir::Etc::sourceparts="-"
sudo apt-get install -y -qq desktop-file-utils
# Skips apt when the runner image already has it; otherwise the install
# retries and is bounded instead of hanging on a stalled mirror.
run: command -v desktop-file-validate || bash scripts/ci/apt-install.sh desktop-file-utils
# Both installers, offline, under a throwaway HOME (no network, no systemd).
- name: Installers write a valid launcher entry
run: scripts/test-linux-desktop-entry.sh
Loading
Loading